Google Reader で 5 件ずつ一気に新しいタブで表示する Greasemonkey を書いてみた その5

その4:http://d.hatena.ne.jp/spider-man/20080119
見た目こんなの↓

なんだかダメダメな動作だった・・・「すべて表示」なのに5件しか表示しないとか・・・orz 動作確認ちゃんとせーよ -> 自分。
ついでに内部ロジックの見直しと、表示したはずなのに残ってしまうタイトルがあるのを修正。んでソースも見直し。クロージャをようやく理解できた(気がする)。

// ==UserScript==
// @name           google reader all open button
// @namespace      googlereader@basyura.com
// @include        http://www.google.co.jp/reader/view/*
// ==/UserScript==
//  version 0.8 2008.01.22 <ちょっとキレイにした>
//  version 0.7 2008.01.21 <全て表示で5件表示になっていたのを修正>
//                         <remove漏れ対応でロジック変更>
//  version 0.6 2008.01.19 <件数指定で表示できていなかったのを修正>
//  version 0.5 2008.01.19 <全て既読にするが無効になっていたのを修正>
//  version 0.1 2008.01.14 <ボタン変更>
//
var BUTTON_LIST = {5:"5件表示" , 50:"全て表示"};
function 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 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(){openPages(m_)}})(m) , 
        false);
  }
}
addButton();

ここ(http://www3.pf-x.net/~spider-man/)にも置いているので良かったらどうぞ。
今回は Firebug を使って script のエラーを確認したり HTML 要素を確認したりしながら作ったんだけど amachang が手放せないと言っている理由が良く分かった。便利すぐる。