ゆるめ

ゆるめなのは公開範囲です。

HideMyAnswer で隠された回答を見るユーザスクリプト 1.2

1.1 からのバージョンアップです。コメント欄に書かれた回答も見るようにしました。
Firefox 用アドオンができるまで個人的に使うつもりのつなぎをご近所さんにおすそ分けしてるような気持ちなので、どっかに登録したりずっと更新し続けたりはしないと思います。

// ==UserScript==
// @id          ShowOurAnswer
// @name        ShowOurAnswer
// @version     1.2
// @namespace   id:pacochi
// @author      pacochi
// @description HideMyAnswer を見るだけ
// @include     http://q.hatena.ne.jp/*
// @run-at      document-end
// ==/UserScript==

(function() {

if (!document.URL.match(/q\.hatena\.ne\.jp\/\d+(#|$)/)) return;

var url = 'http://hidemyans.appspot.com/getAnswer';
var hma = {};
var pick = function(ansXpath, timeXpath) {

	var ans = document.evaluate(ansXpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

	for(var i = 0; i < ans.snapshotLength; i++) {

		var ap = ans.snapshotItem(i);

		if(ap.nodeType == 3 && ap.nodeValue.match(/HideMyAnswer:(\d{13})/)) {

			var id = RegExp.$1;
			var timestamp = document.evaluate(timeXpath, ap, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
			var atime = Date.parse(timestamp.singleNodeValue.nodeValue);

			// 早く回答した方だけ変換
			if (typeof(hma[id]) == 'undefined' || hma[id].atime > atime) hma[id] = { atime: atime, ap: ap };

		}

	}

};
var req = function(id) {

	GM_xmlhttpRequest({
		method: 'POST',
		headers: { 'Content-type': 'application/x-www-form-urlencoded' },
		url: url,
		data: 'hidemyansid=' + id,
		onload: function(res) {

			var txt = document.createElement('span');
			txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A;';
			var lines = res.responseText.split('\n');

			for (var i = 0; i < lines.length; i++) {

				if (i > 0) txt.appendChild(document.createElement('br'));
				txt.appendChild(document.createTextNode(lines[i]));

			}

			hma[id].ap.parentNode.insertBefore(txt, hma[id].ap);

		}
	});

};

// 回答欄
pick("id('read_answer_list')//div[@class='answer-detail clearfix']/div[@class='section clearfix']/p/text()",
 "ancestor::div[@class='answer' or @class='answer reply_content']/h3/span[@class='timestamp']/a/text()");
// 回答コメント欄
pick("id('read_answer_list')//div[@class='answer-comment-detail']/div[@class='section']/p/text()",
 "ancestor::div[@class='section']/span[@class='timestamp']/text()");
// 質問コメント欄
pick("id('comment-section')//div[@class='comment-content clearfix']/text()",
 "ancestor::li/div/span[@class='comment-time']/a/text()");

for(var id in hma) req(id);

})();