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 です。