Hatena Black Star for Haiku

By Constellation Last update Jul 7, 2008 — Installed 77 times. Daily Installs: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
// ==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() + ')()';