b+s.hatena on world

  • /*
     * @title b+s.hatena on world
     * @description append HatenaBookmark and HatenaStar images to links
     * @include http://*
     * @contributor taizooo http://let.hatelabo.jp/taizooo/let/hLHU1vmoqpsi (Fork of)
     * @orig-license Unknown (as-is)
     * @license TBD (as-is)
     * @javascript_url
     */
    
    // e.g. http://ssig33.com/text
    //      http://f.hatena.ne.jp/noromanba/20141008032606
    
    // XXX  - main content detection
    //      - limit try; exec -> 10loop -> stop -> exec -> 10loop -> stop -> ...
    //      - insecure on secureing secret site
    (function () {
      var each = Array.prototype.forEach;
      var blacklist = [
        '[href^="http://b.hatena.ne.jp/entry/"]',
        '[data-let-hatena-parts]'
      ].map(function (sel) { return ':not(' + sel + ')'; }).join('');
    
      each.call(document.querySelectorAll('a' + blacklist), function (anc, idx) {
        setTimeout(function () {
          // c.f. http://wayback.archive.org/web/20090510113506/http://blog.webcreativepark.net/2007/06/10-234711.html
          //      http://d.hatena.ne.jp/Hamachiya2/20090910/bookmarklet
          var banc = document.createElement('a');
          banc.href = 'http://b.hatena.ne.jp/entry/' + anc.href.replace(/#/g, '\u002523').replace(/^http(s{0,1}):\/\//, function (_, b) { return b ? 's/' : ''; });
    
          var bimg = document.createElement('img');
          bimg.src = 'http://b.hatena.ne.jp/entry/image/' + anc.href.replace(/#/g, '\u002523');
          banc.appendChild(bimg);
          anc.parentNode.insertBefore(banc, anc.nextSibling);
    
          // c.f. http://let.hatelabo.jp/taizooo/let/gYC-yv6JlpXGeA
          var simg = document.createElement('img');
          simg.src = 'http://s.st-hatena.com/entry.count.image?uri=' + encodeURIComponent(anc);
          banc.parentNode.insertBefore(simg, banc.nextSibling);
    
          anc.dataset.letHatenaParts = 'added';
        }, 500 * (idx + 1));
      });
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/10/17 03:03:40 - 2014-10-17
  2. 2014/10/17 03:03:02 - 2014-10-17
  3. 2014/10/08 03:40:04 - 2014-10-08
  4. 2014/10/08 03:39:52 - 2014-10-08