Skip to content

Instantly share code, notes, and snippets.

@958
Last active September 27, 2015 14:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 958/1286792 to your computer and use it in GitHub Desktop.
Save 958/1286792 to your computer and use it in GitHub Desktop.
[keysnail]ブックマークのタグ一覧を表示して、そのタグがついているブックマークをまとめて開く
var PLUGIN_INFO =
<KeySnailPlugin>
<name>Bookmark tag</name>
<description lang="ja">ブックマークのタグ一覧を表示して、まとめて開く</description>
<updateURL>https://gist.github.com/958/1286792/raw/bookmarktag.ks.js</updateURL>
<license>MIT</license>
<minVersion>1.8.0</minVersion>
<author>958</author>
<version>0.0.1</version>
<detail><![CDATA[
=== 概要 ===
ブックマークのタグをまとめて開いたりできます
]]></detail>
</KeySnailPlugin>;
const TAG_ICON = 'data:image/png;base64,' +
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACHklEQVQ4y42STW8SURSGJ5REl6WJ"+
"Gjfq1kRXxhhNXGh048ZF3forWJnozsQNoV0YKyYKaRUDlIA1LghJISIyaVjwKR+dmQ5MQSzyTavA"+
"4u09N2USCk26eJKbOfM+d+acI9RqNUGW5Qna7bYwHA45o9GIns0zTEfMj99rNpuCEAwGBZvNNkE6"+
"neaSarVqCAQCFlVVoSgKh85er/cVvRePx2cLUqmUUKlUeLjf76PVamFvbw/hcFgk6vU6l5woEEWR"+
"h3u9HhqNBicUComsZiDoXCwWwQTnZgkMPp/P0u12QTeNiUQiuoDO2WyWBBeOC3i40+ngT7UMbWuN"+
"fzrBeoJYLCYSdGZ9mhLwMBV/76rQvi1ikLmP3e/PwSY1BesTCc6PBXMUZmNBpaxA+/IYo+gd/N+8"+
"jUH0FrTQM7Cm6pRKJXg8Huu4iXN+v99CjdJUCeX1RxgGruPfxjWdg42r2PnxHpqm8TG63W4ru9Q4"+
"FtzM5/Pcqq4/xcB9BQcfL+vsr13CzupDqHIBbHn08MQeOBwOcyaTgSx68Pf1ReyvLHD6bxagfLgH"+
"RcpBkiQKL43DU4tEEurs9k8X6hYT+pazUN7dhVz8BZq5y+WaCM/cRLvdbk4mkyhGP0NafYLtfAb0"+
"e1+db5fi1gfG4ws3cxNJkkgk+K25XA6+TyvLWy9Mxs2XN4RTCQin02lmRbDRLrN5GwuFgsC27/SC"+
"IxYZZ06o6YJD/IudwJlroeMAAAAASUVORK5CYII=";
plugins.withProvides(function (provide) {
provide('bookmark-tag-show', function(ev, arg) {
if (arg || !my.bookmarkTagCache) {
my.bookmarkTagCache = [];
let cache = {};
(function(id){
let parent = PlacesUtils.getFolderContents(id).root;
for (let i = 0; i < parent.childCount; i++) {
let child = parent.getChild(i);
if (PlacesUtils.nodeIsBookmark(child)) {
if (child.tags == null) continue;
let tags = child.tags.split(',');
let url = child.uri;
tags.forEach(function(tag) {
tag = tag.trim();
if (cache[tag] == null)
cache[tag] = {};
cache[tag][url] = true;
});
} else if (PlacesUtils.nodeIsFolder(child))
arguments.callee(child.itemId);
}
})(PlacesUtils.bookmarks.placesRoot);
for (let tag in cache) {
let childs = [];
for (let url in cache[tag])
childs.push(url);
my.bookmarkTagCache.push([TAG_ICON, tag, childs.length, childs]);
}
}
prompt.selector({
message : "pattern:",
collection : my.bookmarkTagCache,
flags : [ICON | IGNORE, 0, 0, HIDDEN | IGNORE],
header : ['Tag', 'Number of bookmarks'],
actions : [[
function(i)
my.bookmarkTagCache[i][3].forEach(function(url) plugins.bmany.go(url, 'tabshifted'))
]]
});
}, M({en: 'Bookmark tag - show', ja:'Bookmark tag - 一覧を表示'}));
}, PLUGIN_INFO);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment