Top/Mozilla Firefox/アドオン/FireGestures

FireGestures の変更点はてなブックマーク


マウスジェスチャでいろいろなコマンドを実行するためのアドオン。スクリプトを追加することも可能。
-[[FIREGESTURES :: Firefox Extension>http://www.xuldev.org/firegestures/]]

*自作スクリプト
FireGesturesの設定ウィンドウに下記リンクをドラッグアンドドロップしてください。

~

#firegestures(上の階層へ移動(archives/などを除去)){{
gBrowser.currentURI.spec.match(/(.+\/)[^$]/);
var url = RegExp.$1;
url = location.replace("archives/", "");
url = location.replace("article/", "");
gBrowser.loadURI(url);
}}

#firegestures(はてなブックマークへ追加){{
const HATENA = "http://b.hatena.ne.jp/append?";
gBrowser.loadURI(HATENA + encodeURIComponent(gBrowser.currentURI.spec));
}}

#firegestures(ドメイン内のページを検索){{
const GOOGLE = "http://google.com/search?q=site%3A";
gBrowser.loadURI(GOOGLE + encodeURIComponent(gBrowser.currentURI.host));
}}

#firegestures(URL 中の数値を10増加){{
FireGestures.goNumericURL(+10)
}}

#firegestures(URL 中の数値を10減少){{
FireGestures.goNumericURL(-10)
}}


#firegestures(ページのタイトルと URL を PukiWiki 形式でクリップボードへコピー){{
var url = window.content.location.href;
var title = window.content.document.title;
var url = gBrowser.currentURI.spec;
var title = gBrowser.contentTitle;
var txt = '[[' + title + '>' + url + ']]';
var clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"]
                .getService(Ci.nsIClipboardHelper);
clipboard.copyString(txt);
}}

#firegestures(ページを Internet Explorer で開く){{
const IE_PATH = "C:\\Program Files\\Internet Explorer\\iexplore.exe";

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath(IE_PATH);
if (!file.exists()) {
  alert("File does not exist: " + IE_PATH);
  return;
}
var process  = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
try {
  var args = [window.content.location.href];
  var args = [gBrowser.currentURI.spec];
  process.init(file);
  process.run(false, args, args.length);
}
catch (ex) {
  alert("Failed to execute: " + IE_PATH);
}
}}

#firegestures(使用している色をリスト表示){{
var col = get_color();
var lum = new Array();
var hue = new Array();
calc_hls(col, hue, lum);
sort_by_hls(col, hue, lum);
output_chart(col, lum);

// get color from html source and css
function get_color() {
  var c = new Array();
  var i, j;
  var pushed = new Array();
  var mat = new Array();
  var rgb16 = new Array(3);
  var src = gBrowser.contentDocument.documentElement.innerHTML.replace(/href="[^"]*"/g,'');

  var r;
  var css = gBrowser.contentDocument.styleSheets;
  for (i = 0; i < css.length; i++) {
    r = css[i].cssRules;
    for (j = 0; j < r.length; j++) {
      src += r[j].cssText;
    }
  }

  // get hex color
  if ((mat = src.match(/#[0-9a-f]{3,6}/gi))) {
    for (i = 0; i < mat.length; i++) {
      mat[i] = mat[i].toUpperCase();
      if (mat[i].length == 4) {
        for (j = 0; j < 3; j++) {
          rgb16[j] = mat[i].charAt(j+1);
          rgb16[j] += rgb16[j];
        }
        mat[i] = '#' + rgb16[0] + rgb16[1] + rgb16[2];
      }
      if (mat[i].length == 7) {
        if (!pushed[mat[i]]) {
          c.push(mat[i]);
          pushed[mat[i]] = true;
        }
      }
    }
  }

  // get rgb color
  if ((mat = src.match(/rgb\([0-9]{1,3}, [0-9]{1,3}, [0-9]{1,3}\)/gi))) {
    for (i = 0; i < mat.length; i++) {
      mat[i].match(/([0-9]{1,3}), ([0-9]{1,3}), ([0-9]{1,3})/);
      rgb16[0] = parseInt(RegExp.$1).toString(16);
      rgb16[1] = parseInt(RegExp.$2).toString(16);
      rgb16[2] = parseInt(RegExp.$3).toString(16);
      for (j = 0; j < 3; j++) {
        if (rgb16[j].length == 1) {
          rgb16[j] = '0' + rgb16[j];
        }
      }
      mat[i] = ('#' + rgb16[0] + rgb16[1] + rgb16[2]).toUpperCase();
      if (!pushed[mat[i]]) {
        c.push(mat[i]);
        pushed[mat[i]] = true;
      }
    }
  }

  // get color-name color
  var colname = define_colorname_map();
  if ((mat = src.match(/color *[:=]["']? *[a-zA-Z]+/gi))) {
    for (i = 0; i < mat.length; i++) {
      if ((mat[i].match(/([a-z]+)$/)) && (colname[RegExp.$1])) {
        mat[i] = colname[RegExp.$1];
        if (!pushed[mat[i]]) {
          c.push(mat[i]);
          pushed[mat[i]] = true;
        }
      }
    }
  }
  if ((mat = src.match(/background *: *[a-zA-Z]+/gi))) {
    for (i = 0; i < mat.length; i++) {
      if ((mat[i].match(/([a-z]+)$/)) && (colname[RegExp.$1])) {
        mat[i] = colname[RegExp.$1];
        if (!pushed[mat[i]]) {
          c.push(mat[i]);
          pushed[mat[i]] = true;
        }
      }
    }
  }
  return c;
}

// define color-name map
function define_colorname_map() {
  var cn = new Array();
  cn['aliceblue']='#F0F8FF';
  cn['antiquewhite']='#FAEBD7';
  cn['aqua']='#00FFFF';
  cn['aquamarine']='#7FFFD4';
  cn['azure']='#F0FFFF';
  cn['beige']='#F5F5DC';
  cn['bisque']='#FFE4C4';
  cn['black']='#000000';
  cn['blanchedalmond']='#FFEBCD';
  cn['blue']='#0000FF';
  cn['blueviolet']='#8A2BE2';
  cn['brass']='#B5A642';
  cn['brown']='#A52A2A';
  cn['burlywood']='#DEB887';
  cn['cadetblue']='#5F9EA0';
  cn['chartreuse']='#7FFF00';
  cn['chocolate']='#D2691E';
  cn['coolcopper']='#BFBFDF';
  cn['copper']='#BF00DF';
  cn['coral']='#FF7F50';
  cn['cornflower']='#BFEFDF';
  cn['cornflowerblue']='#6090EF';
  cn['cornsilk']='#FFF8DC';
  cn['crimson']='#DC143C';
  cn['cyan']='#00FFFF';
  cn['darkblue']='#00008B';
  cn['darkbrown']='#DA0B00';
  cn['darkcyan']='#008B8B';
  cn['darkgoldenrod']='#B8860B';
  cn['darkgray']='#A9A9A9';
  cn['darkgreen']='#006400';
  cn['darkkhaki']='#BDB76B';
  cn['darkmagenta']='#8B008B';
  cn['darkolivegreen']='#556B2F';
  cn['darkorange']='#FF8C00';
  cn['darkorchid']='#9932CC';
  cn['darkred']='#8B0000';
  cn['darksalmon']='#E9967A';
  cn['darkseagreen']='#8FBC8B';
  cn['darkslateblue']='#483D8B';
  cn['darkslategray']='#2F4F4F';
  cn['darkturquoise']='#00CED1';
  cn['darkviolet']='#9400D3';
  cn['deeppink']='#FF1493';
  cn['deepskyblue']='#00BFFF';
  cn['dimgray']='#696969';
  cn['dodgerblue']='#1E90FF';
  cn['feldsper']='#FEE0D0';
  cn['firebrick']='#B22222';
  cn['floralwhite']='#FFFAF0';
  cn['forestgreen']='#228B22';
  cn['fuchsia']='#FF00FF';
  cn['gainsboro']='#DCDCDC';
  cn['ghostwhite']='#F8F8FF';
  cn['gold']='#FFD700';
  cn['goldenrod']='#DAA520';
  cn['gray']='#808080';
  cn['green']='#008000';
  cn['greenyellow']='#ADFF2F';
  cn['honeydew']='#F0FFF0';
  cn['hotpink']='#FF69B4';
  cn['indianred']='#CD5C5C';
  cn['indigo']='#4B0082';
  cn['ivory']='#FFFFF0';
  cn['khaki']='#F0E68C';
  cn['lavender']='#E6E6FA';
  cn['lavenderblush']='#FFF0F5';
  cn['lawngreen']='#7CFC00';
  cn['lemonchiffon']='#FFFACD';
  cn['lightblue']='#ADD8E6';
  cn['lightcoral']='#F08080';
  cn['lightcyan']='#E0FFFF';
  cn['lightgoldenrodyellow']='#FAFAD2';
  cn['lightgray']='#D3D3D3';
  cn['lightgreen']='#90EE90';
  cn['lightpink']='#FFB6C1';
  cn['lightsalmon']='#FFA07A';
  cn['lightseagreen']='#20B2AA';
  cn['lightskyblue']='#87CEFA';
  cn['lightslategray']='#778899';
  cn['lightsteelblue']='#B0C4DE';
  cn['lightyellow']='#FFFFE0';
  cn['lime']='#00FF00';
  cn['limegreen']='#32CD32';
  cn['linen']='#FAF0E6';
  cn['magenta']='#FF00FF';
  cn['maroon']='#800000';
  cn['mediumaquamarine']='#66CDAA';
  cn['mediumblue']='#0000CD';
  cn['mediumorchid']='#BA55D3';
  cn['mediumpurple']='#9370DB';
  cn['mediumsateblue']='#0E00B0';
  cn['mediumseagreen']='#3CB371';
  cn['mediumspringgreen']='#00FA9A';
  cn['mediumturquoise']='#48D1CC';
  cn['mediumvioletred']='#C71585';
  cn['midnightblue']='#191970';
  cn['mintcream']='#F5FFFA';
  cn['mistyrose']='#FFE4E1';
  cn['moccasin']='#FFE4B5';
  cn['navajowhite']='#FFDEAD';
  cn['navy']='#000080';
  cn['oldlace']='#FDF5E6';
  cn['olive']='#808000';
  cn['olivedrab']='#6B8E23';
  cn['orange']='#FFA500';
  cn['orangered']='#FF4500';
  cn['orchid']='#DA70D6';
  cn['palegoldenrod']='#EEE8AA';
  cn['palegreen']='#98FB98';
  cn['paleturquoise']='#AFEEEE';
  cn['palevioletred']='#DB7093';
  cn['papayawhip']='#FFEFD5';
  cn['peachpuff']='#FFDAB9';
  cn['peru']='#CD853F';
  cn['pink']='#FFC0CB';
  cn['plum']='#DDA0DD';
  cn['powderblue']='#B0E0E6';
  cn['purple']='#800080';
  cn['red']='#FF0000';
  cn['richblue']='#0CB0E0';
  cn['rosybrown']='#BC8F8F';
  cn['royalblue']='#4169E1';
  cn['saddlebrown']='#8B4513';
  cn['salmon']='#FA8072';
  cn['sandybrown']='#F4A460';
  cn['seagreen']='#2E8B57';
  cn['seashell']='#FFF5EE';
  cn['sienna']='#A0522D';
  cn['silver']='#C0C0C0';
  cn['skyblue']='#87CEEB';
  cn['slateblue']='#6A5ACD';
  cn['slategray']='#708090';
  cn['snow']='#FFFAFA';
  cn['springgreen']='#00FF7F';
  cn['steelblue']='#4692B4';
  cn['tan']='#D2B48C';
  cn['teal']='#008080';
  cn['thistle']='#D8BFD9';
  cn['tomato']='#FF6347';
  cn['turquoise']='#40E0D0';
  cn['violet']='#EE82EE';
  cn['wheat']='#F5DEB3';
  cn['white']='#FFFFFF';
  cn['whitesmoke']='#F5F5F5';
  cn['yellow']='#FFFF00';
  cn['yellowgreen']='#9ACD32';

  return cn;
}

// calculate hue and luminance
function calc_hls(c, h, l) {
  var i, j;
  var rgb10 = new Array(3);
  var rgb16 = new Array(3);
  var min, max;
  var tmp;

  for (i = 0; i < c.length; i++) {
    rgb16[0] = c[i].substring(1, 3);
    rgb16[1] = c[i].substring(3, 5);
    rgb16[2] = c[i].substring(5, 7);
    for (j = 0; j < 3; j++) {
      rgb16[j] = '0x' + rgb16[j]
      rgb10[j] = parseInt(rgb16[j].toString(10));
    }

    max =  calc_max( rgb10[0],  rgb10[1],  rgb10[2]);
    min = -calc_max(-rgb10[0], -rgb10[1], -rgb10[2]);
    if (max == min) {
      tmp = -1;
    } else {
      switch (max) {
        case rgb10[0]:
          tmp = (rgb10[1] - rgb10[2]) / (max - min) * 60;
          break;
        case rgb10[1]:
          tmp = (rgb10[2] - rgb10[0]) / (max - min) * 60 + 120;
          break;
        default:
          tmp = (rgb10[0] - rgb10[1]) / (max - min) * 60 + 240;
      }
      if (tmp < 0) tmp += 360;
    }
    h.push(Math.floor(tmp));
    l.push(Math.floor((max + min) / 4));
  }
}

// calculate max value of 3 arguments
function calc_max(v1, v2, v3) {
  if (v1 > v2) {
    if (v1 > v3) {
      return v1;
    } else {
      return v3;
    }
  } else {
    if (v2 > v3) {
      return v2;
    } else {
      return v3;
    }
  }
}

// sort color by hue and luminance
function sort_by_hls(c, h, l) {
  var j;

  for (i = h.length ; i >= 0; i--) {
    for (j = 0 ; j < i; j++ ) {
      if (h[j] >  h[j+1]) {
        swap(c, h, l, j);
      } else if (h[j] == h[j+1]) {
        if (l[j] > l[j+1]) {
          swap(c, h, l, j);
        }
      }
    }
  }
}

// swap color, hue, and luminance
function swap(c, h, l, x) {
  var tmp;

  tmp    = l[x+1];
  l[x+1] = l[x];
  l[x]   = tmp;

  tmp    = c[x+1];
  c[x+1] = c[x];
  c[x]   = tmp;

  tmp    = h[x+1];
  h[x+1] = h[x];
  h[x]   = tmp;
}

// output color chart
function output_chart(c, l) {
  var i;
  var t;
  var s;
  var b;

  var newTab = gBrowser.getBrowserForTab(gBrowser.addTab('about:blank'));
  var doc = newTab.contentDocument;

  var st = doc.createElement('style');
  st.setAttribute('type', 'text/css');
  st.appendChild(doc.createTextNode('div.chart { border-bottom:1px solid #B9B9B9; border-right-width:4px; border-right-style:solid; }'));

  t = doc.createElement('tt');
  for (i = 0; i < c.length; i++) {
    s = doc.createElement('div');
    s.setAttribute('class', 'chart');
    s.setAttribute('style', 'border-right-color:' + c[i] + '; width:' + (96 + l[i]) + 'px;');
    s.appendChild(doc.createTextNode(c[i]));
    t.appendChild(s);
  }
  d = doc.createElement('div');
  d.setAttribute('style', 'margin-top:32px; border-bottom:1px solid #B9B9B9; width:256px; text-align:right;');
  d.appendChild(doc.createTextNode('total ' + c.length + ' colors.'));

  newTab.addEventListener('load', function() {
    doc = newTab.contentDocument;
    doc.getElementsByTagName('head')[0].appendChild(st);
    doc.body.appendChild(t);
    doc.body.appendChild(d);
    newTab.removeEventListener('load', arguments.callee, true);
  }, true);
}
}}

-&color(#FF9966){new!!};
#firegestures(Echofonのポップアップをトグル(開閉)){{
gTwitterNotifier.onOpenPopup();
}}

-&color(#FF9966){new!!};
#firegestures(Hatena Bookmarkのはてなブックマークコメントポップアップを表示){{
hBookmark.CommentViewer.show(gBrowser.currentURI.spec);
}}

*Amazon
#amazon(4777513912,left)
#amazon(487311375X,left)
差分 一覧