TransFreeBSDの日記 このページをアンテナに追加 RSSフィード

2008-02-21

[][] はてなハイクで選択したキーワードやユーザだけ表示する  はてなハイクで選択したキーワードやユーザだけ表示する - TransFreeBSDの日記 を含むブックマーク

この前の改良版。コードを整理して次ページ読み込み時に絞り込みを反映するようにした。

// ==UserScript==
// @name           Entry selector
// @namespace      http://h.hatena.ne.jp/TransFreeBSD/
// @include        http://h.hatena.ne.jp/*
// ==/UserScript==
(function(){
function entry_selector(e) {
	var context = "";
	var word = document.evaluate("//div[@class='input']//input[@name='word']", document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;
	var className = e.target.parentNode.parentNode.className;
	if (className == "list-image") {
		context = "//img[@class='profile-image']/..[not(@href='"+e.target.parentNode.pathname+"')]/../..[@class='entry'][not(div[@class='list-body']/div[@class='input'])]";
		word.value = "id:"+e.target.title;
	} else if (className == "list-keyword" || className == "list-body") {
		context = "//a[not(@href='"+e.target.pathname+"')]/..[@class='title']/../..[@class='entry']";
		word.value = e.target.textContent;
	}
	if (entry_selector.context != context) {
		if (context) {
			if (e.cancelable) e.preventDefault();
		} else {
			if (document.defaultView.getComputedStyle(e.target, null).getPropertyValue("cursor") == "pointer") return;
			if (e.target.form) return;
		}
		if (entry_selector.context) {
			var entry = document.evaluate("//div[@class='entry']", document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
			for (var i=0; i<entry.snapshotLength; i++) {
				entry.snapshotItem(i).style.display = "block";
			}
		}
		entry_selector.context = context;
	}
	if (!entry_selector.context) return;
	var entry = document.evaluate(entry_selector.context, document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
	for (var i=0; i<entry.snapshotLength; i++) {
		entry.snapshotItem(i).style.display = "none";
	}
}
unsafeWindow.Hatena.Haiku.Pager.addEventListener("loadedEntries", function(){
	if (!entry_selector.context) return;
	var entry = document.evaluate(entry_selector.context, document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
	for (var i=0; i<entry.snapshotLength; i++) {
		entry.snapshotItem(i).style.display ="none";
	}
}, false);
entry_selector.context = "";
document.getElementById("container").addEventListener("click", entry_selector, false);
})();
トラックバック - http://freebsd.g.hatena.ne.jp/TransFreeBSD/20080221