aboutsummaryrefslogtreecommitdiffstats
path: root/direct_bookmark.js
diff options
context:
space:
mode:
authoranekos2011-11-24 11:05:32 +0900
committeranekos2011-11-24 11:17:45 +0900
commit425cb9409e05d2b48228d756427f1b9b1749ae0a (patch)
treedb1ff82b9099c5a02bcea9f0f71d799e6405d879 /direct_bookmark.js
parent39011a8d70f5a07aba0d08971e8671515ce59a24 (diff)
downloadvimperator-plugins-425cb9409e05d2b48228d756427f1b9b1749ae0a.tar.bz2
Fix async completion
Diffstat (limited to 'direct_bookmark.js')
-rw-r--r--direct_bookmark.js29
1 files changed, 21 insertions, 8 deletions
diff --git a/direct_bookmark.js b/direct_bookmark.js
index ad17152..62353c9 100644
--- a/direct_bookmark.js
+++ b/direct_bookmark.js
@@ -397,8 +397,12 @@ for Migemo search: require XUL/Migemo Extension
if(xhr.status != 200)
return;
let json = JSON.parse(xhr.responseText);
+ if (!json)
+ return;
let tags = json.bookmarks.map(function(it) it.tags);
tags = tags.filter(function(it) it.length);
+ if (!tags.length)
+ return;
tags = Array.concat.apply([], tags);
tags = tags.map(String.trim);
tags = util.Array.uniq(tags);
@@ -625,7 +629,7 @@ for Migemo search: require XUL/Migemo Extension
d = d.next(currentService.userTags(url, results));
});
d.next(function(){
- let tags = Array.concat.apply([], results);
+ let tags = results.length ? Array.concat.apply([], results) : [];
onComplete(tags);
});
@@ -727,20 +731,29 @@ for Migemo search: require XUL/Migemo Extension
setTimeout(function(){first.call();},0);
},{
literal: 0,
- completer: let (lastURL = null, lastUserTags) function(context, arg){
+ completer: let (lastURL, lastUserTags, onComplete, done = true) function(context, arg){
context.fork('UserTags', 0, context, function(context){
context.title = ['User Tags', 'User Tags'];
+
+ onComplete = function(tags){
+ done = true;
+ lastUserTags = tags;
+ context.incomplete = false;
+ context.completions = [['[' + t + ']', t] for ([, t] in Iterator(tags))];
+ };
+
if (buffer.URL == lastURL){
- context.completions = [['[' + t + ']', t] for ([, t] in Iterator(lastUserTags))];
+ if (done) {
+ onComplete(lastUserTags);
+ } else {
+ context.incomplete = true;
+ }
} else {
lastURL = buffer.URL;
context.incomplete = true;
- getUserTags(buffer.URL, function(tags){
- lastUserTags = tags;
- context.completions = [['[' + t + ']', t] for ([, t] in Iterator(tags))];
- context.incomplete = false;
- });
+ done = false;
+ getUserTags(buffer.URL, function (tags) onComplete(tags));
}
});