Hatena Bookmark: Sort comments
by
vzvu3k6k
2013-10-04 [2013/10/04 22:44:11]
はてブのコメントを(スターの数, 投稿日時)でソートする。
@@ -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 です。