txqz memo

いまさらはてなスターをtxqzに設置したい計画

最近はてなスターが良い感じになったので、是非これをtxqzにも設置したいと思い取扱説明書を読んでみた。リリース直後に書かれた文書の中には:

ふつう,この手のブログパーツではボタンは任意の位置に配置される。ひと口にブログといっても使われ方やデザインは千差万別だからだ。なのに HatenaStar.js はタイトルにアンカーを張ることを強要し,さらにそのタイトルの横にボタンやスターを表示させることを強要する。つまり HatenaStar.js は利用者に「はてな流」を押し付ける。こんなセンスの悪いブログパーツは見たことがない。昨夜 Twitter で叫んだのもまさにこの点が癇に障ったからだ。

という批判も見られたが、今ではJavaScriptを書くことによって任意の場所にはてスタのアイコンを載せられるようになっている。とにかく、タイトルの横にアイコンが来るのはかなり恥ずかしいので、この機能を知ってやっと載せたくなった。いやあの、私のはてブのコメントにちらほらスターが着くようになって嬉しくなったのが大きいんですけどね。

取説のサンプルとにらめっこをして、記事別ページについて以下のようなスクリプトを書いた:

Hatena.Star.EntryLoader.loadEntries = function() {
    var entries = [];
    entries.push(new Hatena.Star.Entry.TxqzNetArticle());
    return entries;
}

Hatena.Star.Entry.TxqzNetArticle = new Ten.Class({
    initialize: function() {
        var heading = document.getElementsByTagName('h1')[0];
        this.title = Ten.DOM.scrapeText(heading);
        var feedback = document.getElementById("feedback");
        this.uri = feedback.getElementsByTagName("input")[0].value;
        this.comment_container = Hatena.Star.EntryLoader.createCommentContainer();
        var hatesta_label = document.createElement("dt");
        hatesta_label.setAttribute("id","hatesta_label");
        hatesta_label.appendChild(document.createTextNode("はてなスター"));
        var feedback_dl = feedback.getElementsByTagName("dl")[0];
        feedback_dl.appendChild(hatesta_label);
        var hatesta_container = document.createElement("dd");
        hatesta_container.setAttribute("id","hatesta_continer");
        feedback_dl.appendChild(hatesta_container);
        hatesta_container.appendChild(this.comment_container);
        this.star_container = Hatena.Star.EntryLoader.createStarContainer();
        hatesta_container.appendChild(this.star_container);
    }
});

記事別ページにはアンカーがない。それは、記事別ページからその記事へのアンカーを張ることが無意味だからだ。しかし、たまたま「トラックバックURL」があったのでそれを利用することにした。これがなかったらどこかにURLを追加しないといけないことに……と思ったけどlocation.hrefから取得できるじゃん。まぁいいや。