Google Reader の記事一覧のオンマウスで背景色を変更する GreaseMonkey を書いてみた


はてブとか特にタイトルしかのってこないので、気になった記事の「>>」をクリックして新しいウインドウを開くのだけれど、ちゃんとマウスの位置が合っているのか分かりずらいから。

5件表示、全件表示のボタンを表示する GreaseMonkey に機能追加。
DLはこちら もの置き

// ==UserScript==
// @name           google reader all open button
// @namespace      googlereader@basyura.com
// @include        http://www.google.co.jp/reader/view/*
// ==/UserScript==
//  version 0.1 2008.01.14 <ボタン変更>
//  version 0.5 2008.01.19 <全て既読にするが無効になっていたのを修正>
//  version 0.6 2008.01.19 <件数指定で表示できていなかったのを修正>
//  version 0.7 2008.01.21 <全て表示で5件表示になっていたのを修正>
//                         <remove漏れ対応でロジック変更>
//  version 0.8 2008.01.22 <ちょっとキレイにした>
//  version 0.9 2008.03.05 <記事一覧のオンマウスで背景色変更>
//
var BUTTON_LIST = {5:"5件表示" , 50:"全て表示"};
function grb_openPages(max) {
  var entries = document.getElementById("entries");
  var entry   = entries.childNodes;
  var list    = [];
  for(var i = 0 ; i < entry.length ; i ++) {
    if(list.length >= max) {
      break;
    }
    var className = entry[i].className.split(" ")[0];
    if(className == "entry") {
      var a = entry[i].getElementsByTagName("a")[0];
      var event = document.createEvent('MouseEvents');
      event.initMouseEvent ('click', false, true, document.defaultView,
          1, 0, 0, 0, 0, false, false, false, false, 0, null);
      a.dispatchEvent(event);
      GM_openInTab(a.href);
      list.push(entry[i]);
    }
  }
  for(var i = 0 ; i < list.length ; i++) {
    entries.removeChild(list[i]);
  }
}
function grb_addButton() {
  var toplinks = document.getElementById("viewer-top-links");
  var allread  = document.getElementById("mark-all-as-read");
  for(var m in BUTTON_LIST) {
    var nopen = allread.cloneNode(true);
    nopen.id  = "nopen_" + m;
    toplinks.insertBefore(nopen , allread);

    var span = nopen.getElementsByTagName("span")[0];
    span.innerHTML = BUTTON_LIST[m];
    span.addEventListener("click" , 
        (function(m_){return function(){grb_openPages(m_)}})(m) , 
        false);
  }
}
function grb_addExpandEvent() {
  var entries  = document.getElementById("entries");
  var children = entries.childNodes;
  for(var i = 0 ; i < children.length ; i++) {
    var ele = children[i].childNodes[0];
    if(ele.hasAttribute("add_event_flg")) {
      continue;
    }
    ele.addEventListener("mouseover" , grb_changeColor(ele , true)  , false);
    ele.addEventListener("mouseout"  , grb_changeColor(ele , false) , false);
    ele.setAttribute("add_event_flg" , "true");
  }
}
function grb_changeColor(ele , flg) {
  return function() {
    if(flg) {
      ele.style.background = "#C6DBFF"
    }
    else {
      ele.style.background = "";
    }
  }
}
grb_addButton();
var entries = document.getElementById("entries");
entries.addEventListener("mouseover" ,  grb_addExpandEvent , false);