HatebuComment on LDR改良、マウスでもコメント取得

HatebuComment on LDR for Greasemonkey
はてブ数の表示位置を変更して、本文非表示状態でもブックマーク数が確認できるようにした。

さらに、キーボード(m)だけでなく、マウスを使ってコメントの取得や表示非表示の切り替えができるようにした。

7月30日追記
今までは、はてブ数の表示は「HatebuCount on LDR」で行っていたけど、ユーザー数を表示する機能をHatebuComment on LDRに統合した。

JSActionsで画像表示

回線速度が遅いのと、画像を見るのが目的なのにいちいちページ遷移を経るのが面倒くさいので。

var link = _jsaCScript.context.target.src;
var page_link = _jsaCScript.context.link.href;
if (link.match(/ameba/)) {
	//アメブロの画像を表示
	link = link.replace(/(.*\/).*?_(.*).jpg/,"$1o$2.jpg");
	_jsaCScript.addTab(link);
} else if (page_link && page_link.match(/dmm/)) {
	//DMM画像表示
	if (link.match(/pics.dmm.co.jp/)) {
		link = link.replace(/(r?p)[st].jpg/, "$1l.jpg");
	} else {
		link = page_link.replace(/^.*?cid=(.*?)\/.*/, "http://pics.dmm.co.jp/mono/movie/$1/$1pl.jpg");
	}
	//_jsaCScript.addFGTab(link);
	_jsaCScript.addTab(link);
} else if (link.match(/amazon/)) {
	//アマゾン
	link = link.replace(/(SL|AA)\d+.*.jpg/g, "SL500_.jpg");
	_jsaCScript.addTab(link);
} else if (link.match(/uniqlo/)) {
	//ユニクロ
	link = link.replace(/\?.*/, "");
	_jsaCScript.addTab(link);
} else {
	//経由リンクを直接リンクに
	link = link.replace(/^.*?(http.*$)/, "$1");
	_jsaCScript.addTab(link);
}

これはimageフォルダに保存。
ファイル名をW(画像表示)、ReloadFirefox、CopyURL、V(IEで開く)などとすると、右クリックメニュー => Actions => キーボードを左手でW|R|C|Vなどとすれば簡単にメニューを選択できて便利。

JSActionsでCopyURL

なぜか忘れたけど、CopyURLはずっとJSActionsでやっている。

// はてダ用にタイトル・URLなどをコピー
function jsa_Quote() {
	var str = "["+url+":title="+title+"]\n"+
		">>\n" + 
		sel + 
		"\n<<\n";
	_jsaCScript.setClipBoardString(str);
}
function jsa_Copy(){
	_jsaCScript.setClipBoardString("["+url+":title="+title+"]");
}

var sel = window.getSelection();		//選択範囲取得
var url = _jsaCScript.context.link.href;	//リンク先URL取得
if (url) {
//リンク上の場合、リンク先URLとリンクテキストでリンク
	var title = _jsaCScript.context.link.text;	//リンクテキスト取得
	(sel!="")?jsa_Quote():jsa_Copy();
} else {
//ページタイトルとページURLでリンク
	var title = document.title;
	var url = document.location.href;
	(sel!="")?jsa_Quote():jsa_Copy();
}

JSActionsでFirefox再起動

QuickRestartという拡張機能があるけど、拡張機能を削減するため、JSActionsで代替。
使用メモリを減らせるかどうかは分からない。

function Reload () {
	// Code taken from chrome://toolkit/content/mozapps/extensions/extensions.js
	const nsIAppStartup = Components.interfaces.nsIAppStartup;

	// Notify all windows that an application quit has been requested.
	//全ウィンドウにアプリケーション終了がリクエストされたことを知らせる
	var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
	var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
	os.notifyObservers(cancelQuit, "quit-application-requested", null);

	// Something aborted the quit process. 
	//終了プロセスが邪魔されたときは中止
	if (cancelQuit.data) return;

	// Notify all windows that an application quit has been granted.アプリ終了が許可された
	os.notifyObservers(null, "quit-application-granted", null);

	// Enumerate all windows and call shutdown handlers
	//全ウィンドウを一覧表示し、シャットダウンハンドラを呼び出す
	var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
	var windows = wm.getEnumerator(null);
	while (windows.hasMoreElements()) {
		var win = windows.getNext();
		if (("tryToClose" in win) && !win.tryToClose()) return;
	}
	Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
}
Reload();


このコードをglobalメニューに保存すると、右クリックメニューから再起動できるし、Keyconfigに登録してショートカットキーでも実行できる。

livedoorReaderの「全て読んだことにする」をキーボードで実行

livedoor Readerの「全て読んだことにする」をKeyConfigを使ったショートカットキーで実行できるようになった。以前から何度も挑戦していたもの。

コードは以下

var doc = window.getBrowser().contentDocument;
var elem = doc.getElementById('menu_button');
var event = doc.createEvent('MouseEvents');
//メニューオープン
event.initEvent('mousedown',true,true);
elem.dispatchEvent(event);

//メニュークリック
var elems = doc.evaluate(".//span/text()[self::text()='全て読んだことにする']", doc, null, 7, null);
event.initEvent('mouseup', true, true);
elems.snapshotItem(0).dispatchEvent(event);

//メニュー閉じる
var elem = doc.getElementById('keyhelp_button');
event.initEvent('click', true, true);
elem.dispatchEvent(event);
elem.dispatchEvent(event);

一度メニューをオープンしてからXPathを使う、ということが全然思いつかなかった。


上記のやり方に気づいたあとも、clickでは動作せず、mousedownやmouseupなどを使ったりと色々手間取った。


さらに、「全て既読に」を実行できるようになったあとも、メニューが閉じなくてかなり手間取ったけど、違う場所を2回クリックすることでようやく閉じるようになった。満足。

HatebuComment on LDR修正

日経ビジネスオンラインの記事の場合だけコメントが取得できなかったので修正。

item.linkで記事URLを取得した時点で&が&amp;にエスケープされていたので、それを元に戻す。

-escape(item.link)
+escape(item.link.replace(/&amp;/g, '&'))

修正したスクリプトは以下からインストール可能
http://userscripts.org/scripts/show/34576