Anyone can be a B!KUMA Girl
@@ -10,6 +10,15 @@
// document.images ver.
// http://let.hatelabo.jp/noromanba/let/hLHWtfnH1_9B
+// Hatena CDN c.f.
+// http://let.hatelabo.jp/noromanba/let/gYC-yeGlqrueQQ
+// http://let.hatelabo.jp/noromanba/let/hJmetae5l6sv/rev/hLHWtafen-12
+
+// avatar syntax c.f.
+// http://subtech.g.hatena.ne.jp/h2u/20110405/1302002459
+// sometimes .search timespamping e.g.
+// http://cdn1.www.st-hatena.com/users/fu/furutaseika/profile.gif?1365414170
+
(function() {
var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png',
slice = Array.prototype.slice;
@@ -24,12 +33,10 @@
// https://developer.mozilla.org/en-US/docs/Web/API/URL
// https://developer.mozilla.org/en-US/docs/Web/API/URL.URL
var src = new URL(img.src);
- // Hatena CDN c.f.
- // http://let.hatelabo.jp/noromanba/let/gYC-yeGlqrueQQ
- // http://let.hatelabo.jp/noromanba/let/hJmetae5l6sv/rev/hLHWtafen-12
- // avatar syntax c.f.
- // http://subtech.g.hatena.ne.jp/h2u/20110405/1302002459
- if (/(?:st\-hatena\.com|www\.hatena\.ne\.jp)\/users\//.test(src.hostname + src.pathname) &&
+
+ // c.f. Hatena CDN, avatar syntax
+ if (/(?:st\-hatena\.com$|hatena\.ne\.jp$)/.test(src.hostname) &&
+ /^\/users\//.test(src.pathname) &&
/^profile[\w]{0,2}\.gif$/.test(src.pathname.split('/').pop())) {
img.src = BKUMA;
}
@@ -49,7 +56,7 @@
};
changeIcon(filterNode(node, 'img'));
- };
+ };
bkumaize(document.body);
// c.f. MutationObserver
/*
* @title Anyone can be a B!KUMA Girl
* @description B!KUMAize everyone's icon on Hatena or Other
* @include http://*
* @contributor yuta25 http://let.hatelabo.jp/yuta25/let/hJmetPek3eZM (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// document.images ver.
// http://let.hatelabo.jp/noromanba/let/hLHWtfnH1_9B
// Hatena CDN c.f.
// http://let.hatelabo.jp/noromanba/let/gYC-yeGlqrueQQ
// http://let.hatelabo.jp/noromanba/let/hJmetae5l6sv/rev/hLHWtafen-12
// avatar syntax c.f.
// http://subtech.g.hatena.ne.jp/h2u/20110405/1302002459
// sometimes .search timespamping e.g.
// http://cdn1.www.st-hatena.com/users/fu/furutaseika/profile.gif?1365414170
(function() {
var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png',
slice = Array.prototype.slice;
var bkumaize = function(node) {
var changeIcon = function(imgs) {
imgs.forEach(function(img) {
if (!img.src || !/^http/.test(img.src)) return;
// URL object c.f.
// https://developer.mozilla.org/en-US/docs/Web/API/URL
// https://developer.mozilla.org/en-US/docs/Web/API/URL.URL
var src = new URL(img.src);
// c.f. Hatena CDN, avatar syntax
if (/(?:st\-hatena\.com$|hatena\.ne\.jp$)/.test(src.hostname) &&
/^\/users\//.test(src.pathname) &&
/^profile[\w]{0,2}\.gif$/.test(src.pathname.split('/').pop())) {
img.src = BKUMA;
}
});
};
// like a NodeFilter; c.f.
// https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter
var filterNode = function(node, typeName) {
if (node.nodeType === document.TEXT_NODE) {
return [];
}
if (node.nodeName === typeName.toUpperCase()) {
return [node];
}
return slice.call(node.querySelectorAll(typeName));
};
changeIcon(filterNode(node, 'img'));
};
bkumaize(document.body);
// c.f. MutationObserver
// https://developer.mozilla.org/en/docs/Web/API/MutationObserver
// http://caniuse.com/#feat=mutationobserver
new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
bkumaize(mutation.target);
});
}).observe(document.body, {childList: true, subtree: true});
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。