livedoor Readerの検索ボックスでのmigemo

あれインクリメンタルサーチが出来るのだなあ、おおローマ字検索も出来るのかあ、と思ってmigemoりたくなった。が、俺はLDR使ってないから割とどうでもいいのが困る。
user.jsからmigemo正規表現に変換可能な機能を用意して、user.jsでRomaクラスを置き換えれば出来るっぽいけど、欲しい人いますかね。
ここの購読数は3〜40あったが、これほとんどユーザーじゃないだろ。分かる。

できた

生windowをwindow.unsafeWindowで使えるようにしたらすんなり動いた。unsafeWindowという変数は別途用意してあるので、プロパティで使わないとダメだけど。けどなんでこういう変数が用意してあって、user.jsの中の「window」を「unsafeWindow」に置換して実行しているのか、理由を忘れてしまった。なんかヘンな実装方法をしている気がしてきたどうしよう。

fub.net 0.9.4.7

はっきり言ってバージョンアップするほどでもないんですけど、user.jsの自由度が低かったことに気付いたので、アップしておいたほうがいいのかなあ、と思って。

user.jsから「window.unsafeWindow」を参照することで生のwindowを触れるように変更
なんかヘンな実装ですいません。
string window.external.migemo(string) を実装
渡された文字列をmigemo正規表現に変換して返します。使い道はあまり思いつかないので誰か考えてください。

http://madchester.s54.xrea.com/archives/fub_net0947.zip

livedoor Readerの検索ボックスでmigemo

http://madchester.s54.xrea.com/archives/ldr_migemo.user.js
中身。LDRの初期処理でfinderにcallback設定してるのを、ちょっと変えたもので上書きしただけ。2文字入力でmigemo発動で、1文字の時は元々のRomaを使ってるけどあんまり意味無いかも。

// ==UserScript==
// @name        ldr_migemo
// @include     http://reader.livedoor.com/reader/*
// ==/UserScript==
(function(){
    with(window.unsafeWindow){
        finder.callback = [];
        finder.add_callback(function(q){
            if(!q){
                return subs.find("");
            }
            var query;
            try{
                query = new RegExp((1 < q.length) ? window.external.migemo(q) : roma.toRegExp(q), "i");
            }catch(e){
                query = q;
            }
            subs.find(query)
        });
    }
})();