はてブをスターでソートする

はてなブックマークのコメントをスター数の多い順にソートしたいなぁと思うことが偶にあるので作った。
ググると他にも同じようなことをやってる人は既に居たんだが、試したら上手く動かなかったりして面倒になってきたんで自分で作った。
車輪の再開発とは言うなかれ…。

(function(){
    function onjquery($){
        $('#bookmarked_user > li')
            .each(function(index){
                $.data(this, 'starcount', 
                    $('.hatena-star-star-container > a > img', this).length +
                    (parseInt($('.hatena-star-inner-count', this).text()) || 0) +
                    (9999 - index) / 10000
                );
            })
            .sort(function(a, b){
                return $.data(b, 'starcount') - $.data(a, 'starcount');
            })
            .each(function(){
                this.parentNode.appendChild(this);
            })
        ;
    }
    if(!window.jQuery) {
        document.body.appendChild((function(){
            var s = document.createElement('script');
            s.type = 'text/javascript';
            s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js';
            s.onload = function() {
                onjquery(window.jQuery.noConflict());
            };
            return s;
        })());
    } else {
        onjquery(jQuery);
    }
})();

こんな感じで、ChromeJavascriptコンソールでトライ&エラーで弄りながらで一応完成。
軟弱モノなので最近はjQueryが無いと何もやる気が起きませんw
後半はjQueryを使う為の記述なのでスターソートのメインは前半のonjquery部分のみです。
(追記) 初めはスター数のみでソートしてたんだが、同スター数のブクマのソート順がランダム化されてしまったので小数部に元の並び順を足して誤魔化してみたw
(追記) liにスター数を保存する際の変数名が startcount になってた。恥ずかしい(>_<)

ブックマークレット

で、これを使いたいときにサクッと動作できるようブックマークレット化したのが以下です。

javascript:(function(){function onjquery($){var index=9999;$('#bookmarked_user>li').each(function(){$.data(this,'starcount',$('.hatena-star-star-container>a>img',this).length +(parseInt($('.hatena-star-inner-count',this).text()) || 0) +(index-- / 10000))}).sort(function(a,b){return $.data(b,'starcount')-$.data(a,'starcount')}).each(function(){this.parentNode.appendChild(this)})}if(!window.jQuery){document.body.appendChild((function(){var s=document.createElement('script');s.type='text/javascript';s.src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js';s.onload=function(){onjquery(window.jQuery.noConflict())};return s})())}else{onjquery(jQuery)}})()

これを「はてブ - スターソート」等という名前を付けてブックマークすれば完成。
あえてブックマークレットなのは拡張とかユーザスクリプトにするとスターの読み込み待ちとか考えなくちゃいけないのが面倒だったからですw