b+s.hatena on world

    @@ -1,44 +1,53 @@ /* - * @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) + * @title uso reader + * @description replace Userscripts.org to readonly-mirror + * @inclide http://* + * @inclide https://* + * @license MIT http://opensource.org/licenses/MIT * @javascript_url */ -// e.g. http://ssig33.com/text -// http://f.hatena.ne.jp/noromanba/20141008032606 +// c.f. smilar script +// https://greasyfork.org/scripts/2222-uso-mirror/code -// XXX - main content detection -// - limit try; exec -> 10loop -> stop -> exec -> 10loop -> stop -> ... -// - insecure on secureing secret site +// for readonly use; script install are unsafe (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)); - }); + 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); + }; })();
  • /*
     * @title uso reader
     * @description replace Userscripts.org to readonly-mirror
     * @inclide http://*
     * @inclide https://*
     * @license MIT http://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // c.f. smilar script
    // https://greasyfork.org/scripts/2222-uso-mirror/code
    
    // for readonly use; script install are unsafe
    (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);
        };
    })();
    
  • 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