初めてグリモン書いてみたよ!

TracWikiで書類管理したいなぁと思って先生他いろいろの承認用のハンコ押すとこがほしいなと思いちょこちょこっとuser scriptを初めて書いてみた。やっぱこういうちょこっと直すのってHackっぽくていいね!

恥ずかしくてたまらないけどとりあえずさらす。晒して成長するメソッド。

// ==UserScript==
// @name         AddStampPlace
// @namespace    http://d.datena.ne.jp/agile/
// @description  Adding stamp place to Trac Wiki
// ==/UserScript==

$X = function (exp, context) {
    if (!context) context = document;
    var resolver = function (prefix) {
        var o = document.createNSResolver(context)(prefix);
        return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
    }
    var exp = document.createExpression(exp, resolver);
    
    var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
    switch (result.resultType) {
        case XPathResult.STRING_TYPE : return result.stringValue;
        case XPathResult.NUMBER_TYPE : return result.numberValue;
        case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
            result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        }
    }
    return null;
}



last_rev	= $X("//ul/li[@class='last']")[2].innerHTML.match(/version=(\d+)/)[1];
head_img	= document.createElement("div");
elem		= document.getElementById("content");
head_img.style.textAlign = "right";
head_img.innerHTML = "<img src='http://www.google.co.jp/intl/ja_jp/images/logo.gif'><br>revision " + last_rev; 

elem.insertBefore(head_img, elem.childNodes[0]);

cho45さんの$Xとかめっさインラインで貼ってるし。後で直す。

とりあえずハンコ押すところはイメージを張る感じで。今はないからGoogleのロゴ。
ついでにリビジョンも表示したいと思ってソースを軽く見てたら右上メニューの「LastChange」のパラメータにリビジョン入ってるっぽかったから抜き出してみた。

無名名前空間使えとか動くドメイン制限しろとかあるいはスクリプト側でTracかどうか調べろよとか言う突っ込みは無しの方向で。後で直す。