FireGestures用 リンクからブックマークへ飛ぶ スクリプト 0.2
以前書いた、 Firefox で、リンクからブックマークへ飛ぶ FireGestures用スクリプト が Firefox 22.0 *1 以降で動作しなくなったので、更新した。
FireGestures は、マウス操作だけで様々な機能を実行することができるマウスジェスチャー拡張機能。
使い方
- link
- リンクを起点にジェスチャ
- ポップアップが出るので選ぶ
- ブックマークに飛ぶ
- selection
- 範囲選択してジェスチャ
- ポップアップが出るので選ぶ
- ブックマークに飛ぶ
ちなみに、その場でジェスチャすると現在のページについて動きます。
ニコニコ動画のマイリストで使うとか、おもむろに全選択してジェスチャするとか。
go bookmark (link)
//go bookmark (link) v0.2 written by Agano const bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); const ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); const faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); const asyncFavicons = faviconService.QueryInterface(Components.interfaces.mozIAsyncFavicons); 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 item = { //image: favicon, class: "menuitem-iconic", label: parentFolderName, description: bookmarkName + " " + uri.path, value: parentFolderId, oncommand: "this.API_goBookmark(" + bid + "," + parentFolderId + ");" }; asyncFavicons.getFaviconURLForPage(uri, function(aURI) { if (aURI) { this.image = faviconService.getFaviconLinkForIcon(aURI).spec; FireGestures.handleEvent({type:"popuphiding"}); FireGestures.generatePopup(event, attrsList); } }.bind(item)); return item; }); attrsList.sort(function(a, b) { return a.value - b.value; }); FireGestures.generatePopup(event, attrsList);
MIT Licenseで。
go bookmark (selection)
//go bookmark (selection) v0.2 written by Agano const bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); const ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); const faviconService = Components.classes["@mozilla.org/browser/favicon-service;1"] .getService(Components.interfaces.nsIFaviconService); const asyncFavicons = faviconService.QueryInterface(Components.interfaces.mozIAsyncFavicons); 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 item = { //image: favicon, class: "menuitem-iconic", label: parentFolderName, description: bookmarkName + " " + uri.path, value: parentFolderId, oncommand: "this.API_goBookmark(" + bid + "," + parentFolderId + ");" }; asyncFavicons.getFaviconURLForPage(uri, function(aURI) { if (aURI) { this.image = faviconService.getFaviconLinkForIcon(aURI).spec; FireGestures.handleEvent({type:"popuphiding"}); FireGestures.generatePopup(event, attrsList); } }.bind(item)); return item; }); 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を併用するとなんとかなります
*1:2013年6月25日リリース