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