LDR の CodeRepos のフィードにユーザのアイコンを挿入するグリモン

こんな感じにアイコンが挿入される。
(ちょうど僕の前のコミットだったので id:tokuhirom さんのフィードを例に使わせて頂きました!)



インストールする場合はこちらからどうぞ。

// ==UserScript==
// @name        LDR add profile icon for CodeRepos
// @namespace   http://d.hatena.ne.jp/gan2/
// @include     http://reader.livedoor.com/reader/
// @version     0.1
// ==/UserScript==

(function () {
  var w              = unsafeWindow;
  var feed_pattern   = new RegExp("^http://coderepos.org/share/$");

  w.register_hook('before_printfeed', function(feed) {
    if (feed_pattern.test(feed.channel.link)) {
      if (feed.is_added_icon) return;
      feed.items.forEach(function(item) {
        var author = item.author;
        item.body = [
          '<img width="16" height="16" alt="" style="margin-right: 0.5em; vertical-align: middle;"',
          ' src="http://www.hatena.ne.jp/users/', author.slice(0, 2), '/', author, '/profile_s.gif"/>',
          '<a style="border: medium none; background-image: none ! important; padding-left: 0pt;"',
          ' href="http://coderepos.org/share/wiki/Committers/', author, '"',
          ' title="', author, ' in Committer">', author, '</a>',
          item.body,
          '<br clear="both">'
        ].join("");
      });
      feed.is_added_icon = true;
    }
  });
})();

余談

今回は画像のアップロードに、いつもの Flickr じゃなくてフォトライフを使ってみた。
これを機会にこれからはフォトライフを使うようになるかもしれない。

追記

バグ発見!
CodeRepos のフィードを開くたびにアイコン画像が追加される。
register_hook に 'before_printfeed' を渡して呼び出してるのがいけないみたい。
でも何を渡すのが正しいのか分からず。
修正した。でも確認はまだしてない。だけどコミットはした。
register_hook はそのままでフラグで対処した。


さらにバグが見つかった。
前回追加したフラグの使い方がまずかったみたい。
コメントで指摘して頂きました。ありがとうございます。
ということで、上記のコード、CodeRepos にアップしているコードの両方を修正。