mozInputMethod WebAPI と Gaiaのキーボードアプリ by mar Firefox OS コードリーディングミートアップ #11 2014-11-15 Firefox OS の標準キーボード ● キーボードの種類 ● mozInputMethod API ● キーボードアプリの作り方 ● アプリの製作例 ● 2/18 Firefox OS の標準キーボード ● Gaia上にJavaScriptで実装。 – フォーム要素とcontentEditable属性付き要素で有効。 ● ver. 2.2現在、65言語、63種のレイアウトに対応。 ● ブラウザでも試せる。 ● – http://timdream.org/gaia-keyboard-demo/#en – http://janjongboom.com/gaia-keyboard-demo/ キーボードのUX仕様。 – Bug 983043 - (keyboard-ux-update) [meta] Keyboard UX update 3/18 キーボードの種類 ● フルキーボード、テンキー – 各フォーム要素の type 属性に応じて、適切なレイアウトに 切り替わる。 text, url, email, number, password, ... ● 手書き入力 – ● Bug 1020847 - [Keyboard][Handwriting] Support handwriting for Simplified Chinese 絵文字入力 – Bug 993899 - [Keyboard] To support Emoji in keyboard 4/18 mozInputMethod API (1) ● Geckoに実装された仮想キーボード用WebAPI – – – – – – Gecko 31 (Firefox OS 2.0) 以降で利用可能。 WebAPI/KeboardIME mozilla-central/dom/webidl/InputMethod.webidl W3CのInputMethod Editor APIとは別物。 以前の navigator.mozKeyboard。 'dom.mozInputMethod.enabled', 'true' 5/18 mozInputMethod API (2) mozIM = window.navigator.mozInputMethod ● mozIM.mgmt – ● mozIM.oninputcontextchange – ● キーボード切り替えなど、グローバルメソッドを提供 するプロパティ。 フォーカスされた入力対象の変化を通知するイベン ト。 mozIM.inputcontext – 入力を制御するためのプロパティ。重要。 6/18 mozInputMethod API (3) var mgmt = mozInputMethod.mgmt ● mgmt.showAll() – ● mgmt.next() – ● 次のキーボードに切り替える。 mgmt.supportsSwitching() – ● キーボードリストから切り替える。 切り替え可能か真偽値を返す。 mgmt.hide() – キーボードを隠す。フォームをタップすると再表示。 7/18 mozInputMethod API (4) mozInputMethod.oninputcontextchange ● inputcontextの状態変更を監視するイベント。 イベントトリガ発火時に・・・ ● アプリのウィンドウサイズ変更に追随しておく – ● window.resizeTo()でキーボードアプリの占有 サイズを更新する。 inputContextを再取得しておく – キーボード切り替えやinputContextが破棄され た場合に再取得する。 8/18 mozInputMethod API (5) var ictx = mozInputMethod.inputcontext ● ictx.type – ● ictx.inputType – ● 入力フィールドの形式を返す。(type属性) ictx.inputMode – ● 入力フィールド名を返す。(要素名、contentEditable) 入力フィールドの入力モードを返す。(inputMode属性) ictx.lang – 入力フィールドの言語コードを返す。(lang属性) 9/18 mozInputMethod API (6) ● ● ictx.sendKey(keyCode, charCode, modifiers, repeat) – フォームに直接入力するメソッド。 – keyCode: KeyEvent.DOM_VK_RETURN など。 – charCode: str.charCodeAt(0) – modifiers: 修飾キーのコード。 ictx.textBeforeCursor ictx.textAfterCursor – カーソル前後のすべての文字列を返す。 10/18 mozInputMethod API (7) ● ictx.selectionStart ictx.selectionEnd – ● ● 現在のカーソル位置を返す。 ictx.setSelectionRange(start, – 選択範囲を設定する。 – start: 文字列の選択開始位置。 – length: 選択する長さ。 length) ictx.onselectionchange – カーソル位置や選択範囲の変更を監視するイベント。 11/18 mozInputMethod API (8) ● ictx.replaceSurroundingText(text, length) – ● ● カーソル付近の文字列を置き換える。 ictx.deleteSurroundingText(offset, – offset, length) カーソル付近の文字列を削除する。 ictx.onsurroundingtextchange – カーソル前後の文字列の変更を監視する。 12/18 mozInputMethod API (9) ● ictx.setComposition(text, – 編集モードのテキストをセットする。 編集中のテキストはまだフォームに入力されない。 – 編集中のカーソル位置をcursorで指定し、フォームの カーソル位置と別に管理する必要がある。 編集中のテキストの状態(変換中、選択中の文節?)は clausesで指定する。 – ● cursor, clauses) ictx.endComposition(text) – setCompositionによる編集中のテキストを確定 し、textをフォームに入力する。 13/18 キーボードアプリの作り方 (1) ● ● Customizing the keyboard in Firefox OS 独自のキーボードアプリを作る場合 – manifest.webappに以下を追加する “type”: “privileged”, “role”: “input”, “permissions”: { “input”:{“description”:{“”}} }, “inputs”: {...} – デモアプリのLOL Keyboardを参考にしてコードを書 く。 14/18 キーボードアプリの作り方 (2) ● 標準キーボードにレイアウト追加する場合 – – キーボードレイアウト用のJSONファイルを作成す る。 ラテン語系列の場合、単語リストを作成し、辞書ファ イルに変換する。 xml2dict.py (.xml → .dict) – 前述のキーボードデモページで動作を確かめる。 15/18 アプリの製作例 (1) ● Uninput Keyboard – – – ユニコードの文字コード入力キーボード Firefox Marketplace で公開中! https://marketplace.firefox.com/app/uninput/ 次のバージョンから有料化の予定。 16/18 アプリの製作例 (2) ● 2-Touch Keyboard – – – – 2タッチ方式の日本語入力キーボード いわゆるポケベル打ち。 ひらがな、英数字、記号を入力可能。辞書なし。 カタカナ変換、半角変換、記号変換、Undo機能あり。 17/18 デモ 18/18
© Copyright 2024 ExpyDoc