// 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); } )();