Sort HB Comment

By rikuo Last update Jul 29, 2009 — Installed 272 times.

There are 2 previous versions of this script.

// ==UserScript==
// @author         rikuo
// @name           Sort HB Comment
// @namespace      http://d.hatena.ne.jp/rikuo/
// @include        http://b.hatena.ne.jp/entry/*
// @include        http://b.hatena.ne.jp/entry?mode=more&url=*
// ==/UserScript==


//--- Auto sort & hide (true / false)------------------------

var ReverseHatenaBookmarkComment = true;	// 最初に並べ替えるかどうか?の設定
var HatenaBookmark_NoComment = true;		// 最初にコメントが無いものを非表示にするか?の設定

//-----------------------------------------------------------


var _doc = document;
var BUC = e('bookmarked_user');
if(!BUC) return;
if(BUC.childNodes[1].textContent.replace(/\s+/g, '')
	== 'ページ作者様の希望によりブックマークの一覧は非表示に設定されています。(この機能について)')return;
var icon_navi = e('main-counter');
var df = _doc.createDocumentFragment();

GM_addStyle(<><![CDATA[
	img.showhidebtn{
		margin: 0 1px 0 1px !important;
		cursor: pointer;
	}
	a.sort_btn{
		cursor: pointer;
		color: #fff;
	}
	span.nocommentnumber{
		font-size: 90%;
	}
]]></>);

if(ReverseHatenaBookmarkComment)SortHatenaBookmarkComment();
var NoCommentNum = xpath(BUC ,'li[contains(concat(" ",@class," "),"nocomment")]').snapshotLength;
SortCommentMessage();



function SortHatenaBookmarkComment(){
	var nodes = xpath(BUC , 'li');
	if(nodes.snapshotLength <= 1)return;
	var ul = nodes.snapshotItem(0).parentNode;
	for(var i = 1,nl = nodes.snapshotLength; i < nl; ++i) {
		ul.insertBefore(nodes.snapshotItem(i),nodes.snapshotItem(i-1));
	}
}

function ShowHideBookmarkComment(){
	if(HatenaBookmark_NoComment){
		GM_addStyle(<><![CDATA[
			li.nocomment{display: none !important}
			span.nocommentnumber{display: inline !important;}
		]]></>);
	}else{
		GM_addStyle(<><![CDATA[
			li.nocomment{display: list-item !important}
			span.nocommentnumber{display: none !important;}
		]]></>);
	}
}

function SortCommentMessage(){

	var scm = c('span');
	df.appendChild(scm);
	scm.appendChild(_doc.createTextNode('\u3000['));

	var sortbtn = c('a');
	sortbtn.className = 'sort_btn';
	scm.appendChild(sortbtn);

	sortbtn.appendChild(_doc.createTextNode(SortButtonMake()));
	sortbtn.title = '\u6607\u9806/\u964d\u9806\u306E\u5207\u308A\u63db\u3048';
	sortbtn.addEventListener('click', function(e){
		if(ReverseHatenaBookmarkComment){
			ReverseHatenaBookmarkComment = false;
		}else{
			ReverseHatenaBookmarkComment = true;
		}
		this.textContent = SortButtonMake();
		SortHatenaBookmarkComment()}, false);

	scm.appendChild(_doc.createTextNode(']['));
	var comment = c('img');

	scm.appendChild(comment);

	comment.className = 'showhidebtn';
	comment.title = '\u30b3\u30e1\u30F3\u30c8\u306e\u7121\u3044\u3082\u306e\u3092\u8868\u793a/\u975E\u8868\u793a';
	comment.width = '14';
	comment.height = '11';

	comment.src = ShowHideButtonMake();
	ShowHideBookmarkComment();
	comment.addEventListener('click', function(c){
		if(HatenaBookmark_NoComment){
			HatenaBookmark_NoComment = false;
		}else{
			HatenaBookmark_NoComment = true;
		}
		this.src = ShowHideButtonMake();
		ShowHideBookmarkComment()}, false);

	var count = c('span');
	scm.appendChild(count);
	count.appendChild(_doc.createTextNode('+' + NoCommentNum));
	count.className = 'nocommentnumber';

	scm.appendChild(_doc.createTextNode(']'));

	icon_navi.appendChild(df);

}

function SortButtonMake(){
	var button;
	if(ReverseHatenaBookmarkComment){
		button = '\u25b2';
	}else{
		button = '\u25bd';
	}
	return button;
}

function ShowHideButtonMake(){
	var ShowHideButton;
	if(HatenaBookmark_NoComment){
		ShowHideButton = [
			'data:image/gif;base64,R0lGODlhDgAMAPABAP///8DAwCH5BAEAA',
			'AEALAAAAAAOAAwAAAIeTICpduwM2pvI1IhtnK9y52WX9oHStx2J5nUnmjoFADs='
		].join("");

	}else{
		ShowHideButton = [
			'data:image/gif;base64,R0lGODlhDgAMAPABAP///8DAwCH5BAEAAAEAL',
			'AAAAAAOAAwAAAIaTICpduwM2pto0mhdzRDz43FRSHXbUpKXVQAAOw=='
		].join("");
	}
	return ShowHideButton;
}

function c(tag_name) {
	return _doc.createElement(tag_name);
}

function e(id) {
	return _doc.getElementById(id);
}

function xpath(context, query){
	return _doc.evaluate(query, context, null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null)
}