Index: third_party/google_input_tools/src/chrome/os/inputview/m17nmodel.js |
diff --git a/third_party/google_input_tools/src/chrome/os/inputview/m17nmodel.js b/third_party/google_input_tools/src/chrome/os/inputview/m17nmodel.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3082006b246eaa19f9c083e23b85730d4a455657 |
--- /dev/null |
+++ b/third_party/google_input_tools/src/chrome/os/inputview/m17nmodel.js |
@@ -0,0 +1,157 @@ |
+// Copyright 2014 The ChromeOS IME Authors. All Rights Reserved. |
+// limitations under the License. |
+// See the License for the specific language governing permissions and |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// distributed under the License is distributed on an "AS-IS" BASIS, |
+// Unless required by applicable law or agreed to in writing, software |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// You may obtain a copy of the License at |
+// you may not use this file except in compliance with the License. |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// |
+goog.provide('i18n.input.chrome.inputview.M17nModel'); |
+ |
+goog.require('goog.events.EventHandler'); |
+goog.require('goog.events.EventTarget'); |
+goog.require('i18n.input.chrome.inputview.SpecNodeName'); |
+goog.require('i18n.input.chrome.inputview.content.util'); |
+goog.require('i18n.input.chrome.vk.KeyCode'); |
+goog.require('i18n.input.chrome.vk.Model'); |
+ |
+ |
+ |
+/** |
+ * The model to legacy cloud vk configuration. |
+ * |
+ * @constructor |
+ * @extends {goog.events.EventTarget} |
+ */ |
+i18n.input.chrome.inputview.M17nModel = function() { |
+ goog.base(this); |
+ |
+ /** |
+ * The event handler. |
+ * |
+ * @type {!goog.events.EventHandler} |
+ * @private |
+ */ |
+ this.handler_ = new goog.events.EventHandler(this); |
+ |
+ /** |
+ * The model for cloud vk. |
+ * |
+ * @type {!i18n.input.chrome.vk.Model} |
+ * @private |
+ */ |
+ this.model_ = new i18n.input.chrome.vk.Model(); |
+ this.handler_.listen(this.model_, |
+ i18n.input.chrome.vk.EventType.LAYOUT_LOADED, |
+ this.onLayoutLoaded_); |
+}; |
+goog.inherits(i18n.input.chrome.inputview.M17nModel, |
+ goog.events.EventTarget); |
+ |
+ |
+/** |
+ * The active layout view. |
+ * |
+ * @type {!i18n.input.chrome.vk.ParsedLayout} |
+ * @private |
+ */ |
+i18n.input.chrome.inputview.M17nModel.prototype.layoutView_; |
+ |
+ |
+/** |
+ * Loads the configuration. |
+ * |
+ * @param {string} lang The m17n keyboard layout code (with 'm17n:' prefix). |
+ */ |
+i18n.input.chrome.inputview.M17nModel.prototype.loadConfig = function(lang) { |
+ var m17nMatches = lang.match(/^m17n:(.*)/); |
+ if (m17nMatches && m17nMatches[1]) { |
+ this.model_.loadLayout(m17nMatches[1]); |
+ } |
+}; |
+ |
+ |
+/** |
+ * Callback when legacy model is loaded. |
+ * |
+ * @param {!i18n.input.chrome.vk.LayoutEvent} e The event. |
+ * @private |
+ */ |
+i18n.input.chrome.inputview.M17nModel.prototype.onLayoutLoaded_ = function( |
+ e) { |
+ var layoutView = /** @type {!i18n.input.chrome.vk.ParsedLayout} */ |
+ (e.layoutView); |
+ this.layoutView_ = layoutView; |
+ var is102 = layoutView.view.is102; |
+ var codes = is102 ? i18n.input.chrome.vk.KeyCode.CODES102 : |
+ i18n.input.chrome.vk.KeyCode.CODES101; |
+ var keyCount = is102 ? 48 : 47; |
+ var keyCharacters = []; |
+ for (var i = 0; i < keyCount; i++) { |
+ var characters = this.findCharacters_(layoutView.view.mappings, |
+ codes[i]); |
+ keyCharacters.push(characters); |
+ } |
+ keyCharacters.push(['\u0020', '\u0020']); |
+ var hasAltGrKey = !!layoutView.view.mappings['c'] && |
+ layoutView.view.mappings['c'] != layoutView.view.mappings['']; |
+ var skvPrefix = is102 ? '102kbd-k-' : '101kbd-k-'; |
+ var skPrefix = layoutView.view.id + '-k-'; |
+ var data = i18n.input.chrome.inputview.content.util.createData(keyCharacters, |
+ skvPrefix, is102, hasAltGrKey); |
+ if (data) { |
+ data[i18n.input.chrome.inputview.SpecNodeName.TITLE] = |
+ layoutView.view.title; |
+ data[i18n.input.chrome.inputview.SpecNodeName.ID] = |
+ 'm17n:' + e.layoutCode; |
+ this.dispatchEvent(new i18n.input.chrome.inputview.events. |
+ ConfigLoadedEvent(data)); |
+ } |
+}; |
+ |
+ |
+/** |
+ * Finds out the characters for the key. |
+ * |
+ * @param {!Object} mappings The mappings. |
+ * @param {string} code The code. |
+ * @return {!Array.<string>} The characters for the code. |
+ * @private |
+ */ |
+i18n.input.chrome.inputview.M17nModel.prototype.findCharacters_ = function( |
+ mappings, code) { |
+ var characters = []; |
+ var states = [ |
+ '', |
+ 's', |
+ 'c', |
+ 'sc', |
+ 'l', |
+ 'sl', |
+ 'cl', |
+ 'scl' |
+ ]; |
+ for (var i = 0; i < states.length; i++) { |
+ if (mappings[states[i]] && mappings[states[i]][code]) { |
+ characters[i] = mappings[states[i]][code][1]; |
+ } else if (code == '\u0020') { |
+ characters[i] = '\u0020'; |
+ } else { |
+ characters[i] = ''; |
+ } |
+ } |
+ return characters; |
+}; |
+ |
+ |
+/** @override */ |
+i18n.input.chrome.inputview.M17nModel.prototype.disposeInternal = function() { |
+ goog.dispose(this.handler_); |
+ |
+ goog.base(this, 'disposeInternal'); |
+}; |