del.icio.us の IME まわりをましに

December 20th, 2006

del.icio.us の "edit in place" な編集機能には、日本語入力の「確定」で IME にわたした enter を編集終了の enter と勘違いするという、いかにも ASCII 圏らしいバグがある。

わりと困るので delicious-ime.user.js というのを書いてみた。

del.icio.us の JavaScript は難読化されていないので普通に読める。ファイルは http://del.icio.us/ui/static/lib.js, http://del.icio.us/ui/static/delicious.js のふたつ。lib.js にある create という関数が DOM の要素生成に使われていて、要素の属性は niceExtend という関数で設定している。個人的には関数名に nice とか good とかつけるのは良くないと思う。

JavaScript でキーイベントをうけとるには onkeypress, onkeydown, onkeyup と3つあって、それぞれ

  • onkeypress: IME の enter に反応しない
  • onkeyup: 反応する
  • onkeydown: Firefox は反応して Safari だとしない

という違いがある。ここでは niceExtend に細工をしかけて、onkeydown には enter をすべて無視させつつ、onkeypress にきた enter は onkeydown に投げるようにした。

関係ないけど http://del.icio.us/ui/static/delicious.js の先頭には

document.onclick = function(e){
    e = e||window.event
    var t = e.target||e.srcElement
    if (t.onclick) return;
    var r = true
    if(t.className){
        t.className.splitrim(' ').each(function(c){
            if(onclicks[c]) {
                onclicks[c].call(t, e)
                r = false
    }})}
    return r
}

なんて記述があって LDR の元ネタっぽいと思う。あと

obj.func(x);

var f = obj.func;
f.call(obj, x);

が等価であることをいまさら知った。JavaScript のこういうところが好き。

2 Responses to “del.icio.us の IME まわりをましに”

  1. tomomi Says:

    具体的にはどうすればいいんでしょう? パソコン初心者のわたしにはその先がよく分からないです。。 よろしければ教えてください。

  2. カトウ Says:

    お使いのブラウザはなんでしょうか?もし Firefox なら、以下のページがわかりやすいと思います。

    はてなグリースモンキー - グリースモンキーの使い方