はてなフォトライフの画像を外部のblogに簡単に貼れるように画像へのurlを表示されるユーザスクリプト ーその2ー

[id:sanbo-n:20080508:1210242770]で紹介されていたのでちょっと体裁を整えた
http://img.skitch.com/20080510-m6kjdwifbsq4ig1jeergxwsstt.png
コピーしたいテキストボックスの上でトリプルクリックで全選択してコピペして使ってください
titleやaltに"by ユーザ名,on Hatenafotolife"的な文言を付けようかと思ったけれどどうせ直すと思うのでやめました

ソース

// ==UserScript==
// @name           fotolife img src disp
// @namespace      http://d.hatena.ne.jp/natu_n/
// @include        http*://f.hatena.ne.jp/*
// ==/UserScript==

(
function(){
    var BASE   = 'http://f.hatena.ne.jp';
    var PREFIX = '<img src="http://f.hatena.ne.jp';
    var SUFFIX = '">'
    var nodes, img, src, ttl;
    nodes = getElementsByClassName(document.body, 'foto-body');
    if (nodes[0]) {
        if (img = nodes[0].getElementsByTagName("img")[0] || null) {
            src = img.getAttribute("src");
            ttl = img.getAttribute("title");
            var df = document.createDocumentFragment();
            var div = document.createElement("div");
            div.style.textAlign = "right";

            var tb = document.createElement("input")
            tb.setAttribute("type",  "textbox");
            tb.setAttribute("value", BASE + src);
            div.appendChild(document.createTextNode("Direct URL:"));
            div.appendChild(tb);

            tb = document.createElement("input")
            tb.setAttribute("type",  "textbox");
            tb.setAttribute("value", PREFIX + src + SUFFIX);
            div.appendChild(document.createElement("br"));
            div.appendChild(document.createTextNode("image:"));
            div.appendChild(tb);

            tb = document.createElement("input")
            tb.setAttribute("type",  "textbox");
            tb.setAttribute("value", "<a href=" + location.href
                                   + ">" + PREFIX + src + SUFFIX
                                   + "</a>");
            div.appendChild(document.createElement("br"));
            div.appendChild(document.createTextNode("Embed:"));
            div.appendChild(tb);

            df.appendChild(div);
            nodes[0].appendChild(df);
            
        }
    }

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0, j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

})();

備考

IE系のエンジンで動作を確認したら画像のURLが相対パスではなくフルパスで取得されてしまうのでこのままでは使えませんねp、だったらgetElementsByClassNameとかごちゃごちゃやらずにXPathですっきり書けばよかった