uso reader
by
noromanba
2014-11-04 [2014/11/04 07:15:15]
replace Userscripts.org to readonly-mirror
@@ -22,36 +22,27 @@
'www.webextender.net'
].shift();
- // TODO debouncing w/ queue
+ // c.f. debouncing w/ queue
// https://gist.github.com/noromanba/2669793
- // https://gist.github.com/noromanba/4236851
- /*
- var debounce = function (func, threshould) {
- var timer,
- slice = Array.prototype.slice;
- return function () {
- var context = this, args = slice.call(arguments);
- clearTimeout(timer);
+ var forEach = Array.prototype.forEach,
+ timer, queue = [], interval = 100;
+ var toMirror = function (context) {
+ // TBD avoid cache sites; e.g. wayback, archive.today et al.
+ forEach.call(context.querySelectorAll('a[href*="://userscripts.org"]'), function debounce(link, idx) {
timer = setTimeout(function () {
- func.apply(context, args);
- }, threshould || 10);
- };
- };
- //*/
+ queue.shift();
- var toMirror = function (link) {
- link.protocol = 'http';
- link.hostname = HOST;
- link.port = 80; // readonly mode when uso killing; "http://userscript.org:8080/..."
+ link.protocol = 'http';
+ link.hostname = HOST;
+ link.port = 80; // readonly mode when uso killing; "http://userscript.org:8080/..."
+ }, idx * interval);
+ queue.push(timer);
+ });
};
+ toMirror(document);
- // 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 debounce or click binding
+ // TBD MutationObserver or click binding
document.body.addEventListener('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
*/
// e.g. show my uso
// http://noromanba.flavors.me
// https://userscripts.org/users/436459/scripts
// http://userscripts.org:8080/users/436459/scripts
// c.f. smilar script
// https://greasyfork.org/scripts/2222-uso-mirror/code
// for readonly use; script install are unsafe
(function () {
var HOST = [
'userscripts-mirror.org',
'www.webextender.net'
].shift();
// c.f. debouncing w/ queue
// https://gist.github.com/noromanba/2669793
var forEach = Array.prototype.forEach,
timer, queue = [], interval = 100;
var toMirror = function (context) {
// TBD avoid cache sites; e.g. wayback, archive.today et al.
forEach.call(context.querySelectorAll('a[href*="://userscripts.org"]'), function debounce(link, idx) {
timer = setTimeout(function () {
queue.shift();
link.protocol = 'http';
link.hostname = HOST;
link.port = 80; // readonly mode when uso killing; "http://userscript.org:8080/..."
}, idx * interval);
queue.push(timer);
});
};
toMirror(document);
// TBD MutationObserver or click binding
document.body.addEventListener('DOMNodeInserted', function (evt) {
toMirror(evt.target);
});
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。