Anyone can be a B!KUMA Girl
@@ -7,52 +7,32 @@
* @javascript_url
*/
-// TBD observe document.images, no needed filtering. so simple
(function() {
var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png',
- forEach = Array.prototype.forEach;
+ slice = Array.prototype.slice;
- var bkumaize = function(node) {
- if (node.nodeType === document.TEXT_NODE) return;
+ var bkumaize = (function() {
+ var processed = 0; // memoize
- var changeIcon = function(img) {
+ return function changeIcon() {
+ var images = slice.apply(document.images, [processed + 1]);
// Hatena CDN c.f. http://let.hatelabo.jp/noromanba/let/gYC-yeGlqrueQQ
var hatenaAvatar = /^http:\/\/(?:cdn(?:(?:-ak)?(?:\d+)?)?\.)?(?:www\.)?st\-hatena\.com\/users\/.*\.gif$/;
- if (hatenaAvatar.test(img.src)) {
- img.src = BKUMA;
- }
- };
-
- // TODO into a observer or changeIcon
- // like a NodeFilter; c.f.
- // https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter
- if (node.nodeName === "IMG") {
- changeIcon(node);
- return;
- }
-
- forEach.call(node.querySelectorAll('img'), function(img) {
- changeIcon(img);
- });
- };
+ images.forEach(function(img) {
+ if (hatenaAvatar.test(img.src)) {
+ img.src = BKUMA;
+ }
+ });
+ processed = document.images.length - 1;
+ };
+ })();
bkumaize(document.body);
// c.f. MutationObserver
// https://developer.mozilla.org/en/docs/Web/API/MutationObserver
- // BUG Webkit*; iOS Safari 6.0-6.1 doesn't trigger childList
- // http://caniuse.com/#feat=mutationobserver
- var MutationObserver = window.MutationObserver || window.WebkitMutationObserver;
- new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- // TBD addedNodes or mutation.target
- /*/
- forEach.call(mutation.addedNodes, function(node) {
- bkumaize(node);
- });
- /*/
- bkumaize(mutation.target);
- //*/
- });
+ // http://caniuse.com/#feat=mutationobserver
+ new MutationObserver(function() {
+ bkumaize();
}).observe(document.body, {childList: true, subtree: true});
})();
/*
* @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
*/
(function() {
var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png',
slice = Array.prototype.slice;
var bkumaize = (function() {
var processed = 0; // memoize
return function changeIcon() {
var images = slice.apply(document.images, [processed + 1]);
// Hatena CDN c.f. http://let.hatelabo.jp/noromanba/let/gYC-yeGlqrueQQ
var hatenaAvatar = /^http:\/\/(?:cdn(?:(?:-ak)?(?:\d+)?)?\.)?(?:www\.)?st\-hatena\.com\/users\/.*\.gif$/;
images.forEach(function(img) {
if (hatenaAvatar.test(img.src)) {
img.src = BKUMA;
}
});
processed = document.images.length - 1;
};
})();
bkumaize(document.body);
// c.f. MutationObserver
// https://developer.mozilla.org/en/docs/Web/API/MutationObserver
// http://caniuse.com/#feat=mutationobserver
new MutationObserver(function() {
bkumaize();
}).observe(document.body, {childList: true, subtree: true});
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。