// ==UserScript==
// @name Hatena Bookmark Comment Force Display
// @include http://b.hatena.ne.jp/entry/http*
// @namespace http://tt25.org/
// @version 0.5.0
// ==/UserScript==
(function(){
// load jquery,jquery-deferred
var cnt=0;
(function(src){
cnt=src.length;
for(var i=0,len=src.length; i<len; i++){
var s=document.createElement("script");
s.src=src[i];
s.onload=function(){cnt--;};
document.body.appendChild(s);
}
})([
"http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"
,"http://svn.coderepos.org/share/lang/javascript/jsdeferred/trunk/jsdeferred.jquery.js"
]);
var _timer=setInterval(function(){
if(cnt==0){
clearInterval(_timer);
var $=jQuery;
$.deferred.define();
main();
}
},900);
// load JSON,display
function main(){
var url=$("h1 a").attr("href");
var sites={
//fc2: $.getJSON("http://api.buzzurl.jp/api/posts/get/v1/json/?url="+encodeURIComponent(url)+"&cb=?"),
//ldc: $.getJSON("http://api.clip.livedoor.com/json/comments?link="+encodeURIComponent(url)+"&callback=?")
};
if(!document.evaluate('//ul[@id="bookmarked_user"]//a',document,null,9,null).singleNodeValue){
$("ul#bookmarked_user").html("loading comments...");
sites["hatena"]=$.getJSON("http://b.hatena.ne.jp/entry/json/?url="+encodeURIComponent(url)+"&callback=?");
}
next(function(){
return parallel(sites).next(function(values){
if(!values.hatena){
return values;
}
var page=Math.ceil(values.hatena.count / 25);
var base="http://b.hatena.ne.jp/bookmarklist?mode=rss&url="+encodeURIComponent(url)+"&of=";
var pages=[];
for(var i=0; i<page; i++){
pages.push($.get(base+(i*25)));
}
return next(function(){
var result=[];
return parallel(pages).next(function(bookmarklist){
$.each(bookmarklist,function(i,xml){
var item=xml.getElementsByTagName("item");
for(var i=0,len=item.length; i<len; i++){
var txt=item[i].getElementsByTagName("description")[0].text;
if(txt){
result.push({
user: item[i].getElementsByTagName("creator")[0].text
,comment: txt
,created_at: item[i].getElementsByTagName("date")[0].text.replace(/T.*$/,"")
,tags: $.map(item[i].getElementsByTagName("subject"),function(node,i){return node.text;})
});
}
}
});
values.hatena=result;
return values;
});
});
}).next(function(values){
var comments=$("ul#bookmarked_user");
var notes=[];
if(values.hatena){
comments.html("");
$.each(values.hatena,function(i,val){
notes.push([
'<li id="bookmark-user-',val.user,'">'
,'<span class="timestamp">',val.created_at,'</span>'
,'<a class="hatena-id-icon" href="/',val.user,'/">'
,'<img width="16" height="16" class="hatena-id-icon" '
,'src="http://www.hatena.ne.jp/users/',(val.user.substr(0,2)),'/',val.user,'/profile_s.gif" />'
,'</a>'
,'<a class="hatena-id" href="/',val.user,'/">',val.user,'</a>'
,'<span class="user-tag">'
,($.map(val.tags,function(tag){
return ['<a class="user-tag" href="/t/',encodeURIComponent(tag),'">',tag,'</a>'].join("");
}).join(" "))
,'</span>'
,'<span class="comment">',val.comment,'</span>'
,'</li>'
].join(""));
});
values.hatena=null;
}
if(values.fc2){
$.each(values.fc2.shift().posts,function(i,val){
notes.push([
'<li id="bookmark-user-',val.user_name,'">'
,'<span class="timestamp">',(val.date.replace(/\s.*$/,"")),'</span>'
,'<a class="hatena-id-icon" href="/',val.user_name,'/">'
,'<img width="16" height="16" class="hatena-id-icon" '
,'src="http://cdn.buzzurl.jp/user/',val.user_name,'/photo" />'
,'</a>'
,'<a class="hatena-id" href="http://buzzurl.jp/user/',val.user_name,'">',val.user_name,'</a>'
,'<span class="user-tag">'
,($.map(val.keywords.split(","),function(tag){
return ['<a class="user-tag" href="http://buzzurl.jp/tag/',encodeURIComponent(tag),'">',tag,'</a>'].join("");
}).join(" "))
,'</span>'
,'<span class="comment">',val.comment,'</span>'
,'</li>'
].join(""));
});
}
comments.html(notes.join(""));
});
});
}
})();