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

2007-12-23

[][] はてなハイクで選択したキーワードやユーザだけ表示する  はてなハイクで選択したキーワードやユーザだけ表示する - 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;
	if (entry_selector.selecting) {
		if (e.target.form) return;
		context = "//div[@class='entry']";
	} else if (e.target.parentNode.parentNode.parentNode.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 (e.target.parentNode.parentNode.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 (e.target.parentNode.className == "list-image") {
		context = "//img[@class='profile-image']/..[not(@href='"+e.target.pathname+"')]/../..[@class='entry'][not(div[@class='list-body']/div[@class='input'])]";
		word.value = "id:"+e.target.firstChild.title;
	} else if (e.target.parentNode.parentNode.className == "list-keyword") {
		context = "//a[not(@href='"+e.target.pathname+"')]/..[@class='title']/../..[@class='entry']";
		word.value = e.target.textContent;
	} else if (e.target.parentNode.className == "title") {
		context = "//a[not(@href='"+e.target.pathname+"')]/..[@class='title']/../..[@class='entry']";
		word.value = e.target.textContent;
	} else {
		entry_selector.context = "";
		return;
	}
	var entry = document.evaluate(context, document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
	for (var i=0; i<entry.snapshotLength; i++) {
		entry.snapshotItem(i).style.display = entry_selector.selecting ? "block" : "none";
	}
	entry_selector.selecting = !entry_selector.selecting;
	if (!entry_selector.selecting)
		entry_selector(e);
	else if (entry_selector.context != context) {
		entry_selector.context = context;
		if (e.cancelable) e.preventDefault();
	}
}
entry_selector.selecting = false;
entry_selector.context = "";
document.getElementById("container").addEventListener("click", entry_selector, false);
})();
トラックバック - http://freebsd.g.hatena.ne.jp/TransFreeBSD/20071223