b+s.hatena on world

    @@ -1,53 +1,44 @@ /* - * @title uso reader - * @description replace Userscripts.org to readonly-mirror - * @inclide http://* - * @inclide https://* - * @license MIT http://opensource.org/licenses/MIT + * @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 */ -// c.f. smilar script -// https://greasyfork.org/scripts/2222-uso-mirror/code +// e.g. http://ssig33.com/text +// http://f.hatena.ne.jp/noromanba/20141008032606 -// for readonly use; script install are unsafe +// XXX - main content detection +// - limit try; exec -> 10loop -> stop -> exec -> 10loop -> stop -> ... +// - insecure on secureing secret site (function () { - var SERVER = 'userscripts-mirror.org'; - - // c.f. - // https://gist.github.com/noromanba/4236851 - // http://ptech.g.hatena.ne.jp/noromanba/20121207/1354931086 - var debounce = function (func, threshould) { - var timer; - return function () { - var context = this, args = slice.call(arguments); - clearTimeout(timer); - timer = setTimeout(function () { - func.apply(context, args); - }, threshould || 10); - }; - }; - - var toMirror = debounce(function (link) { - link.protocol = 'http'; - link.hostname = SERVER; - delete link.port // readonly mode when uso killing; "http://userscript.org:8080/..." - }, 100); - - /* - if (/userscripts\.org$/.test(location.hostname)) { - toMirror(location); - return; - } - //*/ - - // TBD avoid cache sites; e.g. wayback, archive.today et al. - Array.prototype.forEach.call(document.querySelectorAll('a[href*="://userscripts.org"]'), function (link) { - toMirror(link); - }); - - // TBD click binding - document.addEventListner('DOMNodeInserted', function (evt) { - toMirror(evt.target); - }; -})(); + 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)); + }); +})();
  • /*
     * @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