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

2007-12-24

[][] はてなハイクで話題になっているかチェックする  はてなハイクで話題になっているかチェックする - TransFreeBSDの日記 を含むブックマーク

はてなハイクではタイトルにURLを入れるとそれについて語れるんだけれど、検索とかにも現れないからほとんど使われていない気がする*1 *2

なので、実用性は低いかも知れないが、現在のページがはてなハイクで言及されているかチェックします。

何かエントリがある場合は左下の「HH」のリンクが反転します。リンクはハイクのページになってます。

// ==UserScript==
// @name           Hatena Haiku checker
// @namespace      http://h.hatena.ne.jp/TransFreeBSD/
// @include        http://*
// ==/UserScript==
(function(){GM_xmlhttpRequest({
	method: "GET",
	url: "http://h.hatena.ne.jp/http/"+location.href.replace(/http:/,""),
	onload: function(result) {
		exists = result.responseText.match(/class="entry"/g).length > 1;
		// copy from SBM Comments Viewer http://white.s151.xrea.com/wiki/index.php?script/SBMCommentsViewer
		var css = [
			"left:0px;",
			"bottom:0px;",
			"text-align:left;",
			"position:fixed;",
			"overflow:auto;",
			"z-index:100;",
			"background-image:none;",
			"background-color:"+(exists?"black":"white")+";",
			"opacity:"+(exists?"0.90":"0.50")+";",
			"font-size:100%;",
			"font-weight:"+(exists?"bold":"normal")+";",
			"color:"+(exists?"white":"#999999")+";",
			"padding-left:2px;",
			"padding-right:2px;",
			"border-top:1px solid #666666;",
			"border-right:1px solid #666666;",
			"display:block;"
			].join("");
		var box = document.createElement("div");
		box.setAttribute('style', css);
		box.innerHTML = '<a href="http://h.hatena.ne.jp/http/'+location.href.replace(/http:/,"")+'" target="_blank">HH</a>';
		document.body.appendChild(box);
	}
});})();
トラックバック - http://freebsd.g.hatena.ne.jp/TransFreeBSD/20071224

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

2007-12-19

[][] はてなハイクでキーワードもしくはフォロー?アンテナ?ページで特定IDだけの表示に切替える  はてなハイクでキーワードもしくはフォロー?アンテナ?ページで特定IDだけの表示に切替える - TransFreeBSDの日記 を含むブックマーク

改良版があります。


プロファイルイメージをクリックするとそのIDの発言だけ表示します。というか他を隠します。動作はトグルになっていて、もう一度クリックすると元に戻ります。

UIをどうしようかと思ったけれど、プロファイルイメージのリンクを無効化して、それを使いました。各ユーザのページには「by 〜」のリンクを使うと良いでしょう。

注意点として、Reply展開と併用したとき、動作が微妙といえば微妙です。

[修正 23:55]

Star FriendsやUsersのプロフィールアイコンでも有効にした & id/*でも有効にした。

つか、全域で有効にしてもOkなのかな?

[修正 12/21]

HTML構造の変更に追従 & @include変更。

// ==UserScript==
// @name           Select the user
// @namespace      http://h.hatena.ne.jp/TransFreeBSD/
// @include        http://h.hatena.ne.jp/*
// ==/UserScript==
select_the_user = false;
document.getElementById("container").addEventListener("click", function(e){
	if (e.target.parentNode.parentNode.className != "list-image") return;
	if (e.cancelable) e.preventDefault();
	var context = select_the_user ?
		"//div[@class='entry']"
		:
		"//img[@class='profile-image']/..[not(@href='"+e.target.parentNode.pathname+"')]/../..[@class='entry']";
	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 = select_the_user ? "block" : "none";
	}
	select_the_user = !select_the_user;
}, false);

[][] プチゴニョゴニョ  プチゴニョゴニョ - TransFreeBSDの日記 を含むブックマーク

投稿しちゃったんだけど一応。

サーチフォームは常時あった方が良いよね?

[修正 12/21]

ロゴに被ったので場所変更。

// ==UserScript==
// @name           Haiku keywords search
// @namespace      http://h.hatena.ne.jp/TransFreeBSD/
// @include        http://h.hatena.ne.jp/*
// @exclude        http://h.hatena.ne.jp/
// @exclude        http://h.hatena.ne.jp/keywords
// ==/UserScript==
document.getElementById("header").innerHTML += '<form action="/keywords" class="search-keyword" method="get"><p style="left: 22px; position:absolute; top: 67px; margin: 0; padding: 0;"><input name="word" value="" class="text" type="text"><input class="submit" value="Search" type="submit"></p></form>';

バランスわるいな...

トラックバック - http://freebsd.g.hatena.ne.jp/TransFreeBSD/20071219