ロシア語入力支援

ロシア語入力キーボードをJavaScriptで実装。ニーズなんて知るもんか。

概要

ロシア語(つーかキリル文字)を手軽に打てるようにしたいというニーズ(たぶん微小量)に答えるべく作ってみた代物。Shiftキーを押しながらなら大文字も打てる。CapsLock + Shiftまで面倒は見切れんが・・・。

なんでこんなもん作ったかといえば、いで庵の中の人が第二外国語でロシア語を取ってるから。期末テストが近いんで(2008年7月15日現在)、テスト対策用のプログラムでも組もうかなぁ、といった妄想を実現するための第一歩として取り組んでみた次第。つーかこれ作る時間で格変化覚えろとか言わないで。

プログラム

以下リンクからどうぞ。

文字本体をクリックするよりも、余白部分をクリックした方が反応がよいかも。

とりあえず手持ちの環境(OS:WinXP SP2 ブラウザ:Firefox2.x,IE6.x,Opera9.x,Safari3.x)ではすべて動作した。

追記(2008/7/16)

Operaだとonclickにイベントが設定されてるところにカーソルをのせてEnterキーを押すとクリックと同じ挙動を示すのでその辺注意。この機能を切る方法はないんじゃないか?ということで放置。

さらに追記(2008/7/18)

ロシア語入力と、input要素への出力とを完全に切り分け、init()関数呼び出し時に引数として関数リテラルを渡す仕様にした。汎用的に使えるようにすることを考えたらこうすべきだろうということで。

使い方

func = function( ch ){
  //chを用いた任意の処理。
}
/*
function func(ch){
  //...
}
という記述ではinit()に渡すとエラーになるので注意。
*/
russian.init( func );

ロシア語キーボードの文字が入力されたとき(マウスorEnterキー)にinit()関数に引数として渡した関数リテラルが実行される。このとき呼び出された関数リテラルには入力された文字が引数として渡される。

今の説明じゃよく分からんという場合はhtmlのソースを見ればまぁ、わかるかも。

結局何がしたかったかというとロシア語入力キーボードのモジュール化。今後ロシア語ネタでスクリプトを組むことを想定してやってみた次第。実際ロシア語シリーズを確立するかどうかはいで庵の中の人のモチベーション及び第二外国語の期末試験の出来による。モジュール化に伴ってファイル名も改めるべきかと思うがとりあえず放置。必要に迫られたらリネームする可能性があるということでご了承ください。

雑記

今回のスクリプトはrussian.jsを読み込んで、russian.init()を実行するだけで動作するようになっている。機能をまとめてパーツ化しようと考えてのことなのだが、かえって描画実装とロジックがごちゃ混ぜになってしまっている気が・・・。

ところで、onkeydown = ...て設定したらFirefoxでは反応したけどIEで反応しなくて焦った。どうやらdocument.onkeydown = ...といった感じに設定しないといけないらしい。onkeyup,onkeypressも同様。

本当は方向キーで入力する文字を選択する、といったインターフェースも持たせる気だったが今ぐらいの最低限の実装でもそこまで使いづらくはないことが判明したんでたぶん放置。私はノートPC使いなのでマウス系操作(実際にはトラックポイント)がめんどくさい→キーボードで用事を済ませようという考えで処理することが多い。上のようなインターフェースを考えてたのもそういった流れ。でもたぶん放置。

追記(2008/7/16)

方向キーによる入力を実装。あらかじめフォームの方にフォーカス当てておくとspaceなどの調整がしやすいかも。デフォルトの選択文字は左上(a)、クリックで文字を選択すると方向キーの選択文字もその文字に移る。

直接スクリプトとは関係ないが、IE以外のユーザー向けにtd:hoverにスタイル設定。IE6はこれに対応してないが放置。onmouseoverを設定するとonkeydownイベントとのかち合いでShiftキー関連が機能しないからであって、別にアンチIEの意思表示じゃないっす。・・・多分そういう意思はないんじゃぁ・・・あるかもな。