AutoPagerizeに対応させる

連続カキコ。operaのみでチェック。

うごメモAutoPagerizeに対応していない。
それっぽいスクリプトは入っているんだけど、うまく動作していないらしい。
ちゃんとやるには、addFilterで追加をフックしてやつ必要がある。
しかし、星の数を取得するHatena.UgoMemo.Star.loadThumbnailStarCount関数が厄介。
なぜだか知らんが、囲っているdivコンテナを引数にうけて、その中を処理する。
おかげで、divコンテナを取得する要素に指定すると、上下の余分なヘッダがマイページ付いてくる。
指定しない場合は全部を再取得しようとするためさらに無駄な時間がかかる。ということで、loadThumbnailStarCountを上書きする。
変化は微小で、(コメント部分の撤去と)Ten.querySelectorAll('ul.memolist li', d);をTen.querySelectorAll('li', d);に直すだけ。
それにしても、GoogleChromeがグローバルスコープをアクセスできないため、いちいちlocationを書き換えて実行してやる必要がある。

(function(){
	boot = function(){location.href = "javascript:void(("+ overrideLoadStar +")())";window.AutoPagerize.addFilter(LoadMemo);};
	window.AutoPagerize ? boot() : window.addEventListener('GM_AutoPagerizeLoaded',boot,false);
})();

function LoadMemo(doc){
  Hatena.UgoMemo.Star.loadThumbnailStarCount(doc[0]);
  Hatena.UgoMemo.watchThumbnails();
}



function overrideLoadStar()
{
 Hatena.UgoMemo.Star.loadThumbnailStarCount = 
function(d) {
  var setEntryStarCount = function (entry, count) {
    var span = Ten.querySelector('span.stars span.star-count', entry);
    if (!span) return;
    span.innerHTML = count;
  };
  
  var allEntries = Ten.querySelectorAll('li', d);
  while (allEntries.length > 0) {
    var jsonpURL = 'http://s.hatena.' + (/jp$/.exec(location.hostname) ? 'ne.jp' : 'com') + '/entry.count.json?';
    var urlToEntries = {};
    while (allEntries.length > 0 && jsonpURL.length < Ten.JSONP.MaxBytes - 11) {
      var entry = allEntries.shift();
      var link = entry.getElementsByTagName('a')[0];
      if (link && link.href) {
        var entryURL = link.href;
        entryURL = entryURL.replace(/^http:\/\/\w+\.hatena\.ne\.jp(:\d+)?/, 'http://ugomemo.hatena.ne.jp');
        entryURL = entryURL.replace(/^http:\/\/\w+\.hatena\.com(:\d+)?/, 'http://flipnote.hatena.com');
        entryURL = entryURL.replace(/\?.*/, '');
        jsonpURL += 'uri=' + encodeURIComponent(entryURL) + '&';
        if (!urlToEntries[entryURL]) {
            urlToEntries[entryURL] = [];
        }
        urlToEntries[entryURL].push(entry);
      }
    }
    if (!Hatena.Visitor) {
      jsonpURL += 'timestamp=1';
    }
  
    with ({ urlToEntries: urlToEntries }) {
      new Ten.JSONP(
        jsonpURL, function (res) {
          var starEntries = res.entries;
          if (!starEntries) return;
  
          for (var i = 0; i < starEntries.length; i++) {
            var starEntry = starEntries[i];
  
            var entries = urlToEntries[starEntry.uri];
            if (!entries) continue;
            delete urlToEntries[starEntry.uri];
  
            var total = 0;
            for (var c in starEntry.stars) {
              total += parseInt(starEntry.stars[c]);
            }
            for (var j = 0; j < entries.length; j++) {
              setEntryStarCount(entries[j], total);
            }
          }
  
          for (var u in urlToEntries) with ({ entries: urlToEntries[u] }) {
            for (var j = 0; j < entries.length; j++) {
              setEntryStarCount(entries[j], 0);
            }
          }
        }
      );
    }
  }
}
}

これでうまくいく。
AutoPagerizeの定義が入っていない人は、以下を追加。

{
"pageElement":"//ul[@class=\"floatlist memolist\"]",
"url":"^http://(?:flipnote\\.hatena\\.com|ugomemo\\.hatena\\.ne\\.jp)/(?:ch/|movies|.*DSi/)",
"nextLink":"id(\"memo-navigation-bottom\")//span[@class=\"pager\"]//span[@class=\"right-arrow-btn\"]/.."
},

これでうまくいきます。

現在、コマンドボタンのところを書いていて、表示までできています。後は入力と検索。
それにしてもコマンド検索とワンキーショートカットの相性が悪い・・・