FireGestures用 リンクからブックマークへ飛ぶ スクリプト
Firefox 22.0 以降で動作しなくなったので、更新しました。
Firefox で、リンクからブックマークへ飛ぶ FireGestures用スクリプト を書いてみた。
FireGestures は、マウス操作だけで様々な機能を実行することができるマウスジェスチャー拡張機能。
- 必要環境
動作確認Firefox 3.5.8FireGestures 1.5.6
使い方
linkリンクを起点にジェスチャポップアップが出るので選ぶブックマークに飛ぶ
selection範囲選択してジェスチャポップアップが出るので選ぶブックマークに飛ぶ
ちなみに、その場でジェスチャすると現在のページについて動きます。
ニコニコ動画のマイリストで使うとか、おもむろに全選択してジェスチャするとか。
go bookmark (link)
//go bookmark (link) v0.1 written by Agano var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); if (FireGestures.API_goBookmark === undefined) { FireGestures.API_goBookmark = function(bid, fid) { toggleSidebar("viewBookmarksSidebar", true); var sidebar = document.getElementById("sidebar").contentWindow; var bmv = sidebar.document.getElementById("bookmarks-view"); var tbo = bmv.treeBoxObject; bmv.selectItems([fid]); tbo.scrollToRow(bmv.currentIndex); bmv.selectItems([bid]); tbo.ensureRowIsVisible(bmv.currentIndex); }; } var srcNode = FireGestures.sourceNode; var url = FireGestures.getLinkURL(srcNode); if (!url) url = window.content.location.href; var uri = ios.newURI(url, null, null); if (!bmsvc.isBookmarked(uri)) throw "Bookmark Not Found"; var bookmarksArray = bmsvc.getBookmarkIdsForURI(uri, {}); var attrsList = bookmarksArray.map(function(bid) { if (!bid) return null; var parentFolderId = bmsvc.getFolderIdForItem(bid); var parentFolderName = bmsvc.getItemTitle(parentFolderId); var bookmarkName = bmsvc.getItemTitle(bid); var faviconUrl = faviconService.getFaviconImageForPage(uri).spec; return { image: faviconUrl, class: "menuitem-iconic", label: parentFolderName, description: bookmarkName + " " + uri.path, value: parentFolderId, oncommand: "this.API_goBookmark(" + bid + "," + parentFolderId + ");" }; }); attrsList.sort(function(a, b) { return a.value - b.value; }); FireGestures.generatePopup(event, attrsList);
MIT Licenseで。
go bookmark (selection)
//go bookmark (selection) v0.1 written by Agano var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); if (FireGestures.API_goBookmark === undefined) { FireGestures.API_goBookmark = function(bid, fid) { toggleSidebar("viewBookmarksSidebar", true); var sidebar = document.getElementById("sidebar").contentWindow; var bmv = sidebar.document.getElementById("bookmarks-view"); var tbo = bmv.treeBoxObject; bmv.selectItems([fid]); tbo.scrollToRow(bmv.currentIndex); bmv.selectItems([bid]); tbo.ensureRowIsVisible(bmv.currentIndex); }; } var urlArray = FireGestures.gatherLinkURLsInSelection(); if (!urlArray) { urlArray = [window.content.location.href]; } var bookmarksArray = []; var storage = {}; for (var i=0; i<urlArray.length; ++i) { var url = urlArray[i]; if (url in storage) continue; storage[url] = true; var uri = ios.newURI(url, null, null); if (!bmsvc.isBookmarked(uri)) continue; bookmarksArray = bookmarksArray.concat(bmsvc.getBookmarkIdsForURI(uri, {})); } if (bookmarksArray.length == 0) throw "Bookmark Not Found"; var attrsList = bookmarksArray.map(function(bid) { if (!bid) return null; var parentFolderId = bmsvc.getFolderIdForItem(bid); var parentFolderName = bmsvc.getItemTitle(parentFolderId); var bookmarkName = bmsvc.getItemTitle(bid); var uri = bmsvc.getBookmarkURI(bid); var faviconUrl = faviconService.getFaviconImageForPage(uri).spec; return { image: faviconUrl, class: "menuitem-iconic", label: parentFolderName, description: bookmarkName + " " + uri.path, value: parentFolderId, oncommand: "this.API_goBookmark(" + bid + "," + parentFolderId + ");" }; }); attrsList.sort(function(a, b) { return a.value - b.value; }); FireGestures.generatePopup(event, attrsList);
MIT Licenseで。
仕様
sidebarがload済みかどうか気にしていないので初回は失敗することがあるもう一回やると多分動きます
最近ブックマークしたページ(Recent Bookmarks)などのdynamic entriesに誤爆するGo Parent Folderを併用するとなんとかなります