idea:3887 向け自分で自分を慰めるユーザスクリプト

追記

もし使おうという方は、実際にはもう以下の話は古いので、id:toinami:20050828の物を使って下さい。


らへん。はてなアイデアに出しても見向きもされないという悲しさ。同じ失敗(特定日付の日記を書いたと思ったら今日に追記された)をした人だけが判ってくれるという…。(→ http://d.hatena.ne.jp/wata_d/20050731)

過去とか未来の日付を書きたい時不便*1なんですが、idea:3887はもちろん、関連かつ検討中のidea:833もなかなか出てこないので、greasemonkey上のユーザスクリプトで対応。

// Copyright (C) 2005, toinami.
//
// ==UserScript==
// @name          HatenaDiary edit date from URL
// @namespace     http://d.hatena.ne.jp/toinami/
// @include       http://d.hatena.ne.jp/*/edit?date=*
// ==/UserScript==

(function () {
	var urldate;
	location.href.match(/.*edit\?date=(\d{8}$)/);
	if (RegExp.$1) { 
		//alert(RegExp.$1);
		urldate = RegExp.$1;
	} else {
		return;  //日付が8桁じゃないとか数字じゃないとか
	}
	urldate.match(/^(\d{4})(\d{2})(\d{2})$/);
	var y = RegExp.$1;
	var m = RegExp.$2;
	var d = RegExp.$3;

	var inputTags = document.getElementsByTagName("input");
	var modified = false;
	for (var i=0; i<inputTags.length; i++) {
		var inputTag = inputTags[i];
		if (! inputTag.getAttribute("name")) continue;
		if (inputTag.getAttribute("name").toLowerCase()=="year") {
			if (inputTag.value==y) continue;
			inputTag.value=y;
			modified = true;
		}
		if (inputTag.getAttribute("name").toLowerCase()=="month") {
			if (inputTag.value==m) continue;
			inputTag.value=m;
			modified = true;
		}
		if (inputTag.getAttribute("name").toLowerCase()=="day") {
			if (inputTag.value==d) continue;
			inputTag.value=d;
			modified = true;
		}
	}
	//if (modified) {
	//	alert("date update");
	//}
})();

程度で対応。javascriptのリファレンスがないのでコピペと直感。動くからいいや、的な。
@includeって*途中に入れて大丈夫かなーと思わなくもなかったけど、きちんと効くようだ。すごいな。
*
って、なんでユーザ側で頑張らねばならないのか……。
*
[追記]時折ここで書いておくとid:frainさんが買ってくれている。ありがたい事です。

*1:それほど過去とか未来の日付を使うことはないけど