FireGestures

Firefox 12.0 - close your eyes... の続き。

Firefox 12.0 + FireGestures 1.6.16

説明不要?マウスジェスチャでいろんな作業を実行しちゃうアドオン。慣れてしまうと対応していないソフトの上でもマウスをグリグリしてしまう病気にもれなくなります。


そんなFireGesturesに入れているユーザスクリプト

one time hilight

以前書いたスクリプト。選択してジェスチャすると、選択したテキストがハイライト表示される。

var findbar = document.getElementById("FindToolbar");
var highlightBtn = document.getAnonymousElementByAttribute(findbar, "anonid", "highlight");

if (!FireGestures.getSelectedText()) {
  highlightBtn.setAttribute("checked", "false");
  gFindBar.toggleHighlight(false);
  gFindBar.close();
  return;
}

gFindBar.toggleHighlight(false);
gFindBar.onFindCommand();
gFindBar.toggleHighlight(true);
highlightBtn.setAttribute("checked", "true");

ank pixiv tool

Ank Pixiv Tool を呼び出して、そのままpixivのブックマーク操作を進めるだけ。

//ank pixiv tool v0.1
AnkPixiv.downloadCurrentImage();
var url=window.content.location.href.replace("member_illust.php","bookmark_add.php").replace("mode=medium","type=illust");
if(url!=window.content.location.href){
  window.content.location.href=url;
}

go bookmark (link)

Firefox 22.0 以降で動作しなくなったので更新しました。


以前書いたスクリプト。リンクからのジェスチャでブックマークへ飛ぶ。

//go bookmark (link) v0.1
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);

go bookmark (selection)

Firefox 22.0 以降で動作しなくなったので更新しました。


以前書いたスクリプト。選択した範囲のリンクからのジェスチャでブックマークへ飛ぶ。

//go bookmark (selection) v0.1
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);

clear cache

キャッシュを手動でクリア。効果はほとんど感じられない。

//clear cache v0.1
var cacheSvc = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);
cacheSvc.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
cacheSvc.evictEntries(Ci.nsICache.STORE_ON_DISK);

close same tab

以前、紹介したshiopuさんのスクリプトを自分用に改変して使用。重複しているタブを閉じる。ついでにブックマークする時のために、URLからパラメーターを削ったり。

//close same tab v0.2
// URLのアンカー指定を除く
function getPlaneUrl(url){
  //url = url.replace(/#.*/, '');

  //for twitter
  if(url.match("twitter.com/")){
    return url;
  }

  url = url.replace(/#[^&]*/, '');
  return url;
}
var result = "";
//重複タブを閉じる
var tabs = gBrowser.mTabContainer.childNodes;
for (var i = 0; i < tabs.length; i++) {
  var base = gBrowser.getBrowserForTab(tabs[i]);
  var url = getPlaneUrl(base.currentURI.spec);


  if(url.match("about:blank")){
    continue;
  }

  //for google reader
  if(url.match("www.google.co.jp/reader/")){
    continue;
  }

  //for youtube
  if(url.match("www.youtube.com")){
    if(url.match(/feature|NR/)){
      //temporary code contains side effect
      url = url.replace(/&(feature|NR|sns)=[^&]*/, '').replace(/feature=[^&]*&/, '');
      base.loadURI(url);
    }
  }

  //for nicovideo
  if(url.match("nicovideo.jp")){
    if(url.match(/via|ref|from/)){
      //temporary code contains side effect
      url = url.replace(/[?](via|ref|from)=[^&]*/, '');
      base.loadURI(url);
    }
  }
  if(url.match("www.pixiv.net")){
    var pixiv = url.replace(/[?](illust_id=[\d]*)&mode=medium/, '?mode=medium&')+RegExp.$1;
    if(url != pixiv) base.loadURI(pixiv);
  }

  //no utm
  //temporary code contains side effect
  var noutm = url.replace(/[?&#]utm_(source|medium|campaign|content)=[^&]*/g, '');
  if(url != noutm) base.loadURI(noutm);


  var targets = gBrowser.mTabContainer.childNodes;
  for (var j = targets.length - 1; i < j; --j) {
    var target = gBrowser.getBrowserForTab(targets[j]);

    if (url == getPlaneUrl(target.currentURI.spec)) {
        gBrowser.removeTab(targets[j]);
        result += url + "\n";
    }
  }
}
if(result){
  alert("close:\n"+result);
}