// ==UserScript==
// @name Hatena Black Star for Haiku
// @namespace http://d.hatena.ne.jp/Constellation/
// @description add black star to Hatena Haiku
// @include http://h.hatena.ne.jp/*
// @include http://h.hatena.com/*
// @author Constellation
// @version 0.0.2
// ==/UserScript==
//
// inspired from http://d.hatena.ne.jp/Monar/20080705/1215248357
// http://d.hatena.ne.jp/Hamachiya2/20080705/HatenaBlackStar
//
GM_addStyle(<><![CDATA[
.BlackStarContainer {
margin-left: 4px;
font-weight: normal !important;
}
.BlackStarContainer .hatena-star-add-button {
border: 1px solid #777 ! important;
background-color: #999 ! important;
}
.BlackStarContainer a {
text-decoration: none ! important;
color: #444 ! important;
font-size: 10px;
position: relative;
}
.BlackStarContainer a:before {
content: '★';
}
.BlackStarContainer a .hatena-star-star {
filter: alpha(opacity=00);
-moz-opacity:0.00;
opacity:0.00;
position: absolute;
top: 0;
left: 0;
}
.BlackStarContainer .hatena-star-inner-count {
color: #555 ! important;
}
]]></>);
location.href = 'javascript:(' + function() { (function (w) {
wait(
function(){
return Hatena.Star.EntryLoader.loaded;
},
function(){
apllyBlackStar(document);
});
Hatena.Haiku.Pager.addEventListener('loadedEntries', function(div) {
wait(
function(){
return Hatena.Star.EntryLoader.loaded;
},
function(){
apllyBlackStar(div);
}
);
});
function apllyBlackStar (node){
Hatena.Star.EntryLoader.loaded = false;
var entries = [];
var entries_org = Hatena.Star.EntryLoader.entries;
Hatena.Star.EntryLoader.entries = null;
entries = loadEntries(node);
Hatena.Star.EntryLoader.entries = [];
if (entries && typeof(entries.length) == 'number'){
entries.forEach(function(i){
var e = new Hatena.Star.Entry(i);
e.showButtons();
Hatena.Star.EntryLoader.entries.push(e);
});
}
Hatena.Star.EntryLoader.getStarEntries();
if (entries_org) {
Hatena.Star.EntryLoader.entries.push(entries_org);
Hatena.Star.EntryLoader.entries = Ten.Array.flatten(Hatena.Star.EntryLoader.entries);
}
Hatena.Star.EntryLoader.finishLoad();
}
function loadEntries (node){
var config = Hatena.Star.SiteConfig.entryNodes;
var entries = [];
if (Hatena.Star.EntryLoader.entries) return Hatena.Star.EntryLoader.entries;
if (!config) return;
for (var eselector in config) {
var enodes = Ten.Selector.getElementsBySelector(eselector,node);
if (!enodes) continue;
var sels = config[eselector];
if (!Ten.Array.isArray(sels)) sels = [sels];
sels.forEach(function(sel){
enodes.forEach(function(enode){
var e = HatenaBlackStar(enode, sel);
if(e) entries.push(e);
});
});
}
Hatena.Star.EntryLoader.entries = entries;
return entries;
}
function HatenaBlackStar (enode, sel) {
var e = {entryNode: enode};
var a = Hatena.Star.EntryLoader.getElementByConfigSelector(sel.uri, enode);
if (!a) return;
if (a.href.indexOf('#') == -1) {
e.uri = a.href + '#_HatenaBlackStar';
} else {
e.uri = a.href + '_HatenaBlackStar';
}
if (!e.uri) return;
var title = Hatena.Star.EntryLoader.getElementByConfigSelector(sel.title, enode);
if (typeof(title) == 'string') {
e.title = title;
} else {
e.title = Hatena.Star.EntryLoader.scrapeTitle(title) || title.title || title.alt || '';
}
var cont = Hatena.Star.EntryLoader.getElementByConfigSelector(sel.container, enode);
if (!cont) return;
e.comment_container = Hatena.Star.EntryLoader.createCommentContainer();
cont.appendChild(e.comment_container);
e.star_container = Hatena.Star.EntryLoader.createStarContainer();
e.star_container.className = 'hatena-star-star-container BlackStarContainer';
cont.appendChild(e.star_container);
return e;
}
function wait (case_fun, fun) {
var id = setTimeout(function(t){
if(case_fun()){
clearTimeout(id);
fun();
}else{
id = setTimeout(arguments.callee, 100)
}
}, 0);
}
})(window); }.toString() + ')()';