diff options
| author | anekos | 2011-11-24 11:05:32 +0900 | 
|---|---|---|
| committer | anekos | 2011-11-24 11:17:45 +0900 | 
| commit | 425cb9409e05d2b48228d756427f1b9b1749ae0a (patch) | |
| tree | db1ff82b9099c5a02bcea9f0f71d799e6405d879 | |
| parent | 39011a8d70f5a07aba0d08971e8671515ce59a24 (diff) | |
| download | vimperator-plugins-425cb9409e05d2b48228d756427f1b9b1749ae0a.tar.bz2 | |
Fix async completion
| -rw-r--r-- | direct_bookmark.js | 29 | 
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));
                      }
                  });
  | 
