LDRizeのindicator表示位置バグの修正

AutoPagerizeについてばかり書いているけれど、そりゃあ便利なgreasemonkeyって言ったらLDRizeも当然入れてる。
基本的にはSITEINFOいじって気が向いたら反映して、とその程度しか使わないのだけれど、それでもSITEINFOに対するmicroformatsの反映優先順位や、非対応ページでの強制実行の未実装など、不満はそこそこある。強制実行はAutoPagerizeでも実装して欲しいところ。他のスクリプトからLDRizeAutoPagerizeの起動が出来るようになると相当選択肢が増えるしね。

ともかく、今回の件はローカルに書いた分ではだいぶ前に解決していたのだけれど、やっぱり記事にまとめて公開しておくことにする。

発端

pixiv関連のSITEINFOはLDRizeAutoPagerize共にローカルでは結構いじっていて、あと普段からタグ付けしない人間なのでブックマークを手抜きするためのSITEINFOをSkip Redirector用にも書いてたりする。
で、pixiv百科事典がどうもサイト構成をリニューアルしたようなので、それに合わせてAutoPagerize用とLDRize用のSITEINFOを書いた。

AutoPagerizeAutoPagerizeで、Ajaxに対応し切れていないので、時々気持ち悪い動作になるのが不満点ではあるのだが、問題はLDRizeのほう。SITEINFOに由来する記述と動作には不満点は特にないのだが、ここにきてheightを指定した場合の動作が顕著に表れてきた。

実態

ここ( http://wedata.net/items/54763 )では、画面の下のほうにいくと強制的に画面上に現れるナビゲーションと選択中の要素とがかぶらないように、120というheight値を指定しているのだが、indicator(LDRize実行中に現れる赤い三角形)が変な場所に表示される。以前からheight値を設定した際には微妙に表示位置がズレていることには気付いていたが、120という極端な値では無視できないほどのズレとなる。

原因はindicatorのtop位置を指定するstyleの計算がズレていたこと。
こんな感じ。

@@ -437,7 +437,7 @@ LDRize.prototype = {
  if(!p)return;
  var i=this.img.indicator;
  i.style.display = 'block';
- i.style.top = (p.y+this.getScrollHeight()-DEFAULT_HEIGHT) + 'px';
+ i.style.top = (p.y+this.scrollHeight) + 'px';
  i.style.left = Math.max((p.x-this.indicatorMargin), 0) + 'px';
   },

パッチは以下のgistにある。
https://gist.github.com/1209256