| 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');
|
| +};
|
|
|