vimperator用のdel.icio.usのBookmarkをインクリメンタルサーチできるプラグイン書いた!
ソース
// Vimperator plugin: 'IncSearch in del.icio.us Bookmarks' // Last Change: 05-Jul-2008. // License: MIT // Maintainer: cimadai <dice.k1984@gmail.com> - http://d.hatena.ne.jp/cimadai // // del.icio.us のブックマークの[URL][タグ][htmlのタイトル]から検索 (function(){ const recentEndPoint = "https://api.del.icio.us/v1/posts/recent?" const allEndPoint = "https://api.del.icio.us/v1/posts/all?" var deli_bookmarks = []; function loadDeliciousBookmark(){ var [lang] = Components.classes["@mozilla.org/network/protocol;1?name=http"] .getService(Components.interfaces.nsIHttpProtocolHandler) .language.split("-", 1); var xhr = new XMLHttpRequest(); if( deli_bookmarks.length == 0 ){ xhr.open("GET", allEndPoint, false); xhr.send(null); var match = xhr.responseText.match(/<post .*? \/>/g); if( match ) match.forEach( function(post){ //alert(post); var deli_bookmark = {}; post.match(/href="(.*?)"|description="(.*?)"|tag="(.*?)"/g).forEach( function(r){ var w = r.split("="); deli_bookmark[ w[0] ] = w[1].replace(/^"|"$/g,""); }); deli_bookmarks.push( deli_bookmark ); }); } // 全件取得のAPIで失敗した場合は、直近の100件を取得 if( deli_bookmarks.length == 0 ){ xhr.open("GET",recentEndPoint + "&count=" + 100, false); xhr.send(null); match = xhr.responseText.match(/<post .*? \/>/g); if( match ) match.forEach( function(post){ var deli_bookmark = {}; post.match(/href="(.*?)"|description="(.*?)"|tag="(.*?)"/g).forEach( function(r){ var w = r.split("="); deli_bookmark[ w[0] ] = w[1].replace(/^"|"$/g,""); }); deli_bookmarks.push( deli_bookmark ); }); } } // IncSearch liberator.commands.addUserCommand(['delicious'], "IncSearch in del.icio.us", function(arg){ var url = arg.replace(/ \[.*?\ ]/, ""); liberator.open(url, liberator.NEW_TAB); }, { completer: function (filter) { if( deli_bookmarks.length == 0 ){ loadDeliciousBookmark(); } var completionList = []; deli_bookmarks.forEach(function(r){ var regobj = new RegExp(".*" + filter + ".*", "i"); if( regobj.test(r.href) || regobj.test(r.description) || regobj.test(r.tag) ){ completionList.push( [ r.href + " [ " + r.description + " ]", r.tag] ); } }); return [0,completionList]; } } ); // TagReload liberator.commands.addUserCommand(['deliciousload', 'dell'], "reload del.icio.us Bookmarks", function(){ loadDeliciousBookmark(); } ); })(); // vim:sw=4 ts=4 et:
Todo
-
- del.icio.usの調子が悪い時やAPIを叩きすぎた時などにBookmarkの取得ができないので、ClientSideDBとか考えてみる。
- インクリメンタルサーチの時に、複数のタグを順序関係なく検索できるようにしたい。
- Bookmarkがたくさんある場合のテストやってないのでそのうちやる。
ということで
よかったら使ってくだしあ><