diff options
author | mattn | 2009-01-09 01:51:41 +0000 |
---|---|---|
committer | mattn | 2009-01-09 01:51:41 +0000 |
commit | f36b4d822f710a9cb0f49cf3b8457dd1c572d8a7 (patch) | |
tree | 8e6e6607f631b1b7023d1806dfdbb36fc23ad1b7 | |
parent | 7a1522578bdc4e1187b006fc29b8fb1da78c476f (diff) | |
download | vimperator-plugins-f36b4d822f710a9cb0f49cf3b8457dd1c572d8a7.tar.bz2 |
completerは非同期で動くので補完中に実行すると数個のDeferredが走ってしまう。補完時は1つしか走らない様、以前のgetTags()を戻し修正。btagsは現状のgetTags()をgetTagsAsync()として呼び出すよう修正。
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28186 d0d07461-0603-4401-acd4-de1884942a52
-rw-r--r-- | direct_bookmark.js | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/direct_bookmark.js b/direct_bookmark.js index 0d6eb73..d9cdf73 100644 --- a/direct_bookmark.js +++ b/direct_bookmark.js @@ -1,4 +1,4 @@ -// Last Change: 01-Jan-2009. Jan 2008
+// Last Change: 09-Jan-2009. Jan 2008
var PLUGIN_INFO =
<VimperatorPlugin>
<name>{NAME}</name>
@@ -86,10 +86,10 @@ for Migemo search: require XUL/Migemo Extension var useServicesByPost = liberator.globalVariables.direct_sbm_use_services_by_post || 'hdl';
var useServicesByTag = liberator.globalVariables.direct_sbm_use_services_by_tag || 'hdl';
- var isNormalize = typeof liberator.globalVariables.direct_sbm_is_normalize == 'undefined' ?
- true : evalFunc(liberator.globalVariables.direct_sbm_is_normalize);
- var isUseMigemo = typeof liberator.globalVariables.direct_sbm_is_use_migemo == 'undefined' ?
- true : evalFunc(liberator.globalVariables.direct_sbm_is_use_migemo);
+ var isNormalize = liberator.globalVariables.direct_sbm_is_normalize ?
+ evalFunc(liberator.globalVariables.direct_sbm_is_normalize) : true;
+ var isUseMigemo = liberator.globalVariables.direct_sbm_is_use_migemo ?
+ evalFunc(liberator.globalVariables.direct_sbm_is_use_migemo) : true;
var XMigemoCore;
try{
@@ -387,7 +387,6 @@ for Migemo search: require XUL/Migemo Extension tags.forEach(function(tag){
hatena_tags.push(tag.innerHTML);
});
- liberator.echo("Hatena Bookmark: Tag parsing is finished. Taglist length: " + tags.length);
return hatena_tags;
},
icon:function(url){
@@ -422,7 +421,6 @@ for Migemo search: require XUL/Migemo Extension var tags = evalFunc("(" + xhr.responseText + ")");
for(var tag in tags)
returnValue.push(tag);
- liberator.echo("del.icio.us: Tag parsing is finished. Taglist length: " + returnValue.length);
return returnValue;
},
icon:function(url){
@@ -479,7 +477,6 @@ for Migemo search: require XUL/Migemo Extension tags.forEach(function(tag){
ldc_tags.push(tag.textContent);
});
- liberator.echo("livedoor clip: Tag parsing is finished. Taglist length: " + tags.length);
return ldc_tags;
},
icon:function(url){
@@ -537,7 +534,6 @@ for Migemo search: require XUL/Migemo Extension var tags = xhr.responseXML.getElementsByTagName('tag');
for(var n = 0; n < tags.length; n++)
returnValue.push(tags[n].getAttribute('tag'));
- liberator.echo("foves: Tag parsing is finished. Taglist length: " + returnValue.length);
return returnValue;
},
},
@@ -563,21 +559,35 @@ for Migemo search: require XUL/Migemo Extension };
liberator.plugins.direct_bookmark = { services: services, tags: [] };
- function getTags(arg){
+ function getTagsAsync(arg){
var d,first;
d = first = Deferred();
useServicesByTag.split(/\s*/).forEach(function(service){
var user, password, currentService = services[service] || null;
[user,password] = currentService.account ? getUserAccount.apply(currentService,currentService.account) : ["", ""];
- d = d.next(function(t) t.concat(currentService.tags(user,password)));
+ d = d.next(function(t) {
+ var tags = currentService.tags(user,password);
+ liberator.echo(currentService.description + ": Tag parsing is finished. Taglist length: " + tags.length);
+ return t.concat(tags);
+ });
});
d.next(function(tags){liberator.plugins.direct_bookmark.tags = tags.filter(function(e,i,a) a.indexOf(e) == i).sort()})
.error(function(e){liberator.echoerr("direct_bookmark.js: Exception throwed! " + e)});
return first;
}
+ function getTags(arg){
+ var user,password;
+ var tags = [];
+ useServicesByTag.split(/\s*/).forEach(function(service){
+ var currentService = services[service] || null;
+ [user,password] = currentService.account ? getUserAccount.apply(currentService,currentService.account) : [null, null];
+ tags = tags.concat(currentService.tags(user,password));
+ });
+ liberator.plugins.direct_bookmark.tags = tags.filter(function(e,i,a) a.indexOf(e) == i).sort();
+ }
liberator.modules.commands.addUserCommand(['btags'],"Update Social Bookmark Tags",
- function(arg){setTimeout(function(){getTags().call([])},0)}, {});
+ function(arg){setTimeout(function(){getTagsAsync().call([])},0)}, {});
liberator.modules.commands.addUserCommand(['bentry'],"Goto Bookmark Entry Page",
function(service, special){
service = service.string || useServicesByPost.split(/\s*/)[0];
@@ -667,6 +677,7 @@ for Migemo search: require XUL/Migemo Extension var match_result = filter.match(/((?:\[[^\]]*\])*)\[?(.*)/); //[all, commited, now inputting]
var m = new RegExp(XMigemoCore && isUseMigemo ? "^(" + XMigemoCore.getRegExp(match_result[2]) + ")" : "^" + match_result[2],'i');
var completionList = [];
+ // XXX: completer works asynchronous. thus we shouldn't call getTagsAsync().
if(liberator.plugins.direct_bookmark.tags.length == 0)
getTags().call([]);
context.title = ['Tag','Description'];
|