これはオイラのtumblrのページ表示

{block:Photo}
    <div class="photo">
        {LinkOpenTag}<img src="{PhotoURL-400}" alt="{PhotoAlt}"/>{LinkCloseTag}
        {block:Caption}
            <div class="caption">{Caption}</div>
        {/block:Caption}
    </div>
{/block:Photo}

dashboardからは普通に見えて欲しい。
表側からは、リンクだけ見せる。いやキャプション(賛辞)で誠意大将軍を見せておく。
tomblooとか、bookmarkletはimgへのlinkを付与するように改造。そんでもって

しかたがないから僕は画像へのリンクのURLをimgタグに展開するGreaseMonkeyを作

http://d.hatena.ne.jp/ku0522/20071229/1198869546

ってもらう。うーん、わからん、そんなんで良いのか?やっぱ違う気がする。

いや、仕事はしたんさ。今日は火曜日なので社内のゴミ回収をしつつ、分別収集を社内に啓蒙するという、地球にやさしい事業活動です。

どこでもスターグリースモンキーをautopagerize対応したいっす。

どこでもスターグリースモンキーautopagerize対応したいっす。
twitterとかで、2ページ目にいくと使えないから。

// ==UserScript==
// @name           Hatena Star Everywhere
// @namespace      http://s.hatena.ne.jp/
// @include        *
// ==/UserScript==
// version: 20070927
// merged with http://rails2u.com/misc/greasemonkey/hatenastareverywhere_for_fub.user.js

var VERSION        = '20070927';

var SITECONFIG_URL = 'http://s.hatena.ne.jp/siteconfig.json';
var SCRIPT_URL     = 'http://s.hatena.ne.jp/js/HatenaStar.js';
var CACHE_EXPIRE   = 24 * 60 * 60 * 1000;

var localConfig = { };
/*
var localConfig = {
    '*.g.hatena.ne.jp': [
        {
            path: '^/bbs/\\d+',
            entryNodes: {
                'div.day': {
                    uri: 'h2 a:nth-child(1)',
                    title: 'h2',
                    container: 'h2'
                }
            }
        }
    ]
};
*/

var isFirefox = navigator.userAgent.indexOf('Firefox') != -1;

if (isFirefox) {
    var documentLoaded = false;
    window.addEventListener('load', function() { documentLoaded = true }, true);
}

function ensure(object, prop, value) {
    if (typeof object[prop] == 'undefined')
        object[prop] = value || { };
}

function loadHatenaStar(siteConfig) {
    var host = location.hostname;
    var config = siteConfig[host];
    if (!config && host.match(/^[\w-]+(\..+)$/))
        config = siteConfig['*' + RegExp.$1];
    if (config) {
        for (var i = 0; i < config.length; i++) {
            if (location.pathname.match(new RegExp(config[i].path))) {
                ensure(unsafeWindow, 'Hatena');
                ensure(unsafeWindow.Hatena, 'Star');
                unsafeWindow.Hatena.Star.SiteConfig = config[i];
                var script = document.createElement('script');
                script.charset = 'utf-8';
                script.src = SCRIPT_URL;
                if (isFirefox) {
                    if (documentLoaded)
                        script.addEventListener('load', loadEntryLoader, true);
                } else {
                    loadEntryLoader();
                }
                document.getElementsByTagName('head')[0].appendChild(script);
                break;
            }
        }
    }
}

function loadEntryLoader() {
    var EntryLoader = unsafeWindow.Hatena.Star.EntryLoader;
    if (typeof EntryLoader == 'undefined')
        return setTimeout(loadEntryLoader, 200);

    if (EntryLoader && !EntryLoader.entries)
        new EntryLoader();
}

function configLoaded(siteConfig) {
    siteConfig = siteConfig || { };
    for (var h in localConfig)
        siteConfig[h] = localConfig[h];
    if (isFirefox)
        window.Hatena.Star.SiteConfig = siteConfig;
    loadHatenaStar(siteConfig);
}

if (isFirefox) {
    ensure(window, 'Hatena');
    ensure(window.Hatena, 'Star');
}

if (typeof unsafeWindow.Hatena == 'undefined'
        || typeof unsafeWindow.Hatena.Star == 'undefined'
        || !unsafeWindow.Hatena.Star.loaded) {
    if (isFirefox) {
        var config = eval(GM_getValue('config')) || { };
    } else {
        var config = { };
        if (GM_getValue('configSiteConfig')) {
            config.siteConfig = eval('(' + GM_getValue('configSiteConfig') + ')');
            config.expire = eval('(' + GM_getValue('configExpire') + ')');
        }
    }

    if (!config.expire || config.expire < (new Date()).getTime()) {
        GM_xmlhttpRequest({
            method: 'GET',
            url: SITECONFIG_URL,
            onload: function(res) {
                config.siteConfig = eval('(' + res.responseText + ')');
                config.expire = (new Date()).getTime() + CACHE_EXPIRE;
                if (isFirefox) {
                    GM_setValue('config', config.toSource());
                } else {
                    GM_setValue('configSiteConfig', res.responseText);
                    GM_setValue('configExpire', config.expire + 0);
                }
                configLoaded(config.siteConfig);
            },
            onerror: function() {
                configLoaded(config.siteConfig);
            }
        });
    } else {
        configLoaded(config.siteConfig);
    }
}

if (typeof GM_registerMenuCommand != 'undefined') {
    GM_registerMenuCommand('Hatena Star Everywhere - clear cache', function() { 
        if (isFirefox) {
            GM_setValue('config', '');
        } else {
            GM_setValue('configSiteConfig', ''); 
            GM_setValue('configExpire', ''); 
        }
    });
}

グリモンのautopagerize対応の雛形?

var f = function( hoge ){
  //ここに書く
}
f();


(function(filter, i) {
  i = i || 4;
  if (window.AutoPagerize && window.AutoPagerize.addFilter){
    window.AutoPagerize.addFilter(filter);
  } else if (i > 1) {
    setTimeout(arguments.callee, 1000, filter, i - 1);
  }
})(function(e) { e.forEach(f) })

まず、ここが訳わからん。うーむ。

  i = i || 4;

追記 : 2008-01-16
これは論理和演算子(||)とのこと。

  i = i || 4;

意味は、

  • i変数が定義されている場合はi変数に格納されている値をそのまま使用する。
  • 定義されていない場合は直接記述した定数(4)を使用する。

というものらしい。論理演算子だから返り値があるんだろうけどこの場合はかならずtrueだよな。で、そのつづきはどういう意味だ?

いろいろautopagerize対応させたいんだけど、実は一番対応させたいのは、このはてなダイアリーの表側から投稿できるヤツ。どれかな?

いろいろautopagerize対応させたいんだけど、実は一番対応させたいのは、このはてなダイアリーの表側から投稿できるヤツ。どれかな?

<script type="text/javascript" src="http://d.hatena.ne.jp/js/prototype-1.4.0.js"></script>
<script type="text/javascript" src="http://d.hatena.ne.jp/js/textinput_description.js"></script>
<script type="text/javascript" src="/js/embed_movie_player.js"></script>
<script type="text/javascript">
Event.observe(window, 'load', function() {
    new TextInputDescription($('comment-username'), $('comment-form'), 'なまえ');
    }, false);
</script>



<script type="text/javascript" src="http://s.hatena.ne.jp/js/HatenaStar.js"></script>

<script type="text/javascript">
Hatena.Star.SiteConfig = {
  entryNodes: {
    'div.section': {
      uri: 'h3 a',
      title: 'h3',
      container: 'h3'
    }
  }
};
</script>




<script type="text/javascript" src="/js/edit_in_place.js"></script>

<script type="text/javascript">
Hatena.rkm = '********************';

Hatena.Diary.EditInPlace.editable = true;

</script>

<script type="text/javascript" src="/js/quick_pager.js"></script>

Hatena.rkmってなんだべ。なんか番号が入ってるから慌てて消しちまったよ。