// Copyright (C) 2005, wata_d.
//
// ==UserScript==
// @name Hatena Diary DateEdit
// @namespace http://d.hatena.ne.jp/wata_d
// @include http://d.hatena.ne.jp/*/edit*
// ==/UserScript==
(function()
{
function getTag(val)
{
return document.evaluate(val, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
}
//! ボタンを作って返す
function createButton()
{
var input = document.createElement("input");
input.type = "button";
input.value = "\u65E5\u4ED8\u5909\u66F4"; // 日付変更
input.onclick = dateChange;
input.className = "field";
return input;
}
//! 「日付変更」ボタン押下時のイベント
function dateChange()
{
// 年月日取得
var year = getTag("//input[@name='year']").value;
var month = getTag("//input[@name='month']").value;
var day = getTag("//input[@name='day']").value;
var uri = document.location.href;
var idx = uri.lastIndexOf("?");
if(idx != -1)
{
uri = uri.substr(0, idx+1);
uri += "date=" + year + month + day;
}
else
{
uri += "?date=" + year + month + day;
}
document.location.replace(uri);
}
//! メイン処理(ここが一番最初に呼ばれる)
window.addEventListener("load",
function(e)
{
// 今現在, 日付を設定する input 要素は h3 要素の子になっており,
// また h3 要素はひとつしか存在していない
var h3 = getTag("//h3");
if(h3)
{
var success = false;
// 子に input 要素がある時のみ有効(プレビュー時にボタンが出てしまうのを防ぐため)
for(var i = 0; i < h3.childNodes.length; ++i)
{
if(h3.childNodes[i].nodeName == "INPUT")
{
success = true; break;
}
}
if(success)
{
h3.appendChild(createButton());
}
}
}
, false);
}
)();