Hatena Bookmark: Sort comments

    @@ -13,17 +13,22 @@ var bookmarks = Array.prototype.slice.call(currentList.querySelectorAll("[id^=bookmark-user-]")); var sorted = bookmarks.sort(function(a, b){ function extract(bookmark){ - return [bookmark.querySelectorAll(".hatena-star-star-container a").length, - bookmark.querySelector(".timestamp").textContent]; + var starCount; + var starInnerCount = bookmark.querySelector(".hatena-star-star-container .hatena-star-inner-count"); + if(starInnerCount) + starCount = parseInt(starInnerCount.textContent, 10); + else + starCount = bookmark.querySelectorAll(".hatena-star-star").length; + return [starCount, bookmark.querySelector(".timestamp").textContent]; } + a = extract(a); b = extract(b); - if(a > b) - return 1; - else if(a < b) - return -1; - else - return 0; + if(a[0] > b[0]) return 1; + if(a[0] < b[0]) return -1; + if(a[1] > b[1]) return 1; + if(a[1] < b[1]) return -1; + return 0; }).reverse(); sorted.forEach(function(bm){
  • /*
     * @title Hatena Bookmark: Sort comments
     * @description はてブのコメントを(スターの数, 投稿日時)でソートする。
     * @include http://b.hatena.ne.jp/entry/*
     * @license Public Domain
     */
    
    (function(){
        var currentList = Array.prototype.slice.call(document.querySelectorAll(".bookmark-list")).filter(function(l){
            return l.parentNode.style.display != "none";
        })[0];
    
        var bookmarks = Array.prototype.slice.call(currentList.querySelectorAll("[id^=bookmark-user-]"));
        var sorted = bookmarks.sort(function(a, b){
            function extract(bookmark){
                var starCount;
                var starInnerCount = bookmark.querySelector(".hatena-star-star-container .hatena-star-inner-count");
                if(starInnerCount)
                    starCount = parseInt(starInnerCount.textContent, 10);
                else
                    starCount = bookmark.querySelectorAll(".hatena-star-star").length;
                return [starCount, bookmark.querySelector(".timestamp").textContent];
            }
    
            a = extract(a);
            b = extract(b);
            if(a[0] > b[0]) return 1;
            if(a[0] < b[0]) return -1;
            if(a[1] > b[1]) return 1;
            if(a[1] < b[1]) return -1;
            return 0;
        }).reverse();
    
        sorted.forEach(function(bm){
            currentList.appendChild(bm);
        });
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2013/10/04 22:44:11 - 2013-10-04
  2. 2013/06/12 01:33:38 - 2013-06-12
  3. 2013/06/12 00:35:01 - 2013-06-12