Anyone can be a B!KUMA Girl

    @@ -7,32 +7,41 @@ * @javascript_url */ +// document.images ver. +// http://let.hatelabo.jp/noromanba/let/hLHWtfnH1_9B + (function() { var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png', - slice = Array.prototype.slice; + forEach = Array.prototype.forEach; - var bkumaize = (function() { - var processed = 0; // memoize + var bkumaize = function(node) { + if (node.nodeType === document.TEXT_NODE) return; - return function changeIcon() { - var images = slice.apply(document.images, [processed + 1]); + var changeIcon = function(img) { // 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; + if (hatenaAvatar.test(img.src)) { + img.src = BKUMA; + } }; - })(); + + if (node.nodeName === 'IMG') { + changeIcon(node); + return; + } + + forEach.call(node.querySelectorAll('img'), function(img) { + changeIcon(img); + }); + }; bkumaize(document.body); // c.f. MutationObserver // https://developer.mozilla.org/en/docs/Web/API/MutationObserver // http://caniuse.com/#feat=mutationobserver - new MutationObserver(function() { - bkumaize(); + new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + bkumaize(mutation.target); + }); }).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
     */
    
    // document.images ver.
    // http://let.hatelabo.jp/noromanba/let/hLHWtfnH1_9B
    
    (function() {
      var BKUMA = 'http://f.st-hatena.com/images/fotolife/h/hatenapr/20111228/20111228162520.png',
          forEach = Array.prototype.forEach;
    
      var bkumaize = function(node) {
        if (node.nodeType === document.TEXT_NODE) return;
    
        var changeIcon = function(img) {
          // 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;
          }
        };
    
        if (node.nodeName === 'IMG') {
            changeIcon(node);
            return;
        }
    
        forEach.call(node.querySelectorAll('img'), function(img) {
          changeIcon(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 です。

History

  1. 2014/11/18 04:50:35 - 2014-11-18
  2. 2014/11/15 05:49:30 - 2014-11-15
  3. 2014/11/15 05:16:58 - 2014-11-15
  4. 2014/11/15 04:18:02 - 2014-11-15
  5. 2014/11/15 02:45:48 - 2014-11-15
  6. 2014/11/14 03:47:59 - 2014-11-14
  7. 2014/11/14 03:42:55 - 2014-11-14