世界のはてスタ

3の倍数と3がつく数字のときだけアホになるはてスタ。
GreasemonkeyはいいけどOpera9.26だと文字が化けるんだよね…。

// ==UserScript==
// @name			nabeatsu
// @description		3の倍数と3がつく数字のときだけアホになるはてスタ。
// @include			http://*.hatena.ne.jp/*
// ==/UserScript==

(function () {

	// http://blog.livedoor.jp/nipotan/archives/15424695.html
	function getElementsByClass(searchClass) {
		var classElements = new Array();
		var allElements = document.getElementsByTagName("*");
		for (var i = 0, j = 0; i < allElements.length; i++) {
			if (allElements[i].className == searchClass) {
				classElements[j] = allElements[i];
				j++;
			}
		}

		return classElements;
	}

	function isAho(num) {
		if (num % 3 == 0) return true;
		return isAho_(num);
	}

	function isAho_(num) {
		if (num % 10 == 3) return true;
		if (num > 10) return isAho_(Math.floor(num / 10));
		return false;
	}

	function beingAho(elem) {
		if (elem.className == 'hatena-star-star aho') return;

		elem.className += ' aho';
		elem.src = 'http://atsumu-watanabe.laff.jp/profile.jpg';
		elem.style.width = '30px';
		elem.style.height = '40px';
	}

	function callNum(elem, label) {
		if (elem.childNodes.length > 1) return;

		elem.appendChild(document.createTextNode(label));
	}

	function startNabeatsu() {
		var hsContainers = getElementsByClass('hatena-star-star-container');

		if (hsContainers.length == 0) {
			if (retry++ > 10) clearInterval(tid);
			return;
		}

		//これコメントアウトしないと、たたまれてるはてスタを展開したときアホにならない。
		//clearInterval(tid);

		for (var i = 0; i < hsContainers.length; i++) {
			var elem = hsContainers[i].firstChild;
			var counter = 1;
			while (elem) {
				if (elem.tagName.toLowerCase() != 'a') {
					elem = elem.nextSibling;
					continue;
				}

				if (isAho(counter)) {
					beingAho(elem.firstChild);
					callNum(elem, '{' + counter + 'ぁ〜! ');
				}
				else {
					callNum(elem, '{' + counter + '! ');
				}
				counter++;
				elem = elem.nextSibling;
			}
		}
	}

	var retry = 0;
	var tid = setInterval(startNabeatsu, 3000);

}) ();

くっだらねぇ。