読者です 読者をやめる 読者になる 読者になる

はてなブックマークで LDRize をちゃんと動かすGreasemonkey Script

Hatena Greasempnkey

ホントに「ちゃんと」なのか怪しいけど。Firefox3とOpera9.6で動くのは確認。
http://userscripts.org/scripts/show/37569
ページが継ぎ足されるたびに全エントリの位置を再計算しているので、ページが大きくなると重くなります。。


折角なのでコメントつけてみたり。

// ==UserScript==
// @name           b.hatena ldrizer
// @namespace      http://ss-o.net/
// @include        http://b.hatena.ne.jp/*
// ==/UserScript==

// LDRizeより後に実行する必要があるのでsetTimeoutする(ユーザースクリプトの管理で並べ替える必要がなくなる)
setTimeout(function(unsafeWindow) {
	// 実行して問題ないかベタに調査。。しなくても大丈夫なんだけど、一応。
	if (
		unsafeWindow.Hatena &&
		unsafeWindow.Hatena.Bookmark &&
		unsafeWindow.Hatena.Bookmark.AutoPagerize &&
		unsafeWindow.Hatena.Bookmark.AutoPagerize.instance &&
		window.LDRize &&
		window.Minibuffer
	) {
		// Hatena.Bookmark.AutoPagerize.instanceにnewしたObjectが入っているので、それでAddEventListenerする
		var autopager = unsafeWindow.Hatena.Bookmark.AutoPagerize.instance;
		// oldAddEventListenerはaddEventListenerのショートカットみたいなの
		autopager.oldAddEventListener('complete',function(){
			// サイト側のイベントからGreasemonkey側の関数を呼ぶ場合はsetTimeoutを挟む
			setTimeout(function(){
				// LDRize::paragraph-re-collectで追加された分を含めて位置を再計算する
				window.Minibuffer.execute('LDRize::paragraph-re-collect');
			},10);
		});
		// サイト側のショートカットキーがLDRizeと地味に競合するので、サイト側は止めておく
		unsafeWindow.Hatena.Bookmark.Navigator.instance.keyboard.keydownObserver.stop();
	}
},10, this.unsafeWindow || this);
// OperaなどunsafeWindowがない場合でも動くように。 unsafeWindowがなければthis(windowオブジェクト)が使用される