swdyh

Direcory Index Image Viewer で徐々に画像を開くようにする実験

2008-02-01 20:58:45

Direcory Index Image Viewer – Userscripts.org
http://userscripts.org/scripts/show/9601


Directory Indexの画像を展開してくれるyoupyさんのスクリプト。
便利だけど数が多いときにブラクラ状態になる。
徐々に開くようにして、そうならないようにするのを考えてみた。

var title = $t('title')[0];
if (!!title && title.innerHTML.match(/Index of \//)) {
    var l = Array.prototype.filter.apply($t('a'), [function(e) { return e.href.match(/png|gif|jpe?g/i) }]);
    stepEachGen(10, 10000)(l, link2img);
}

function stepEachGen(step, interval) {
    return function(list, f) {
        list.slice(0, step).forEach(f);
        if (list.length > step) {
            var c = arguments.callee;
            setTimeout(function() { c(list.slice(step), f) }, interval);
        }
    }
}

function $t(tagname) {
    return document.getElementsByTagName(tagname);
}

function link2img(e) {
    var img = document.createElement('img');
    img.src = e.href;
    e.innerHTML = '';
    e.appendChild(img);
    return e;
}


それでもまあ重くなるときは重くなるし、ベンチとかしてないから本当に軽くなってるかは不明。
あと再帰が深くなるとブラウザに止められるかもしれないし、setTimeoutだからそうでもないのかもしれない。
再帰じゃなくて、setTimeoutを秒数増やしながら最初に全部やっちゃうとかのがいいのかも。
あと待つ秒と開く画像の個数を調整がむずかしい。そのへんはネットワーク回線とかCPUとかメモリ次第な気もする。
抽象化しようとしてクロージャを使ってみたら、なんだかよく分らなくなった。


今気がついたけど、ディレコリーになってるね。