| Index: third_party/google_input_tools/src/chrome/os/inputview/elements/content/keysetview.js
|
| diff --git a/third_party/google_input_tools/src/chrome/os/inputview/elements/content/keysetview.js b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/keysetview.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61d936dda7595a8e3485f49f9d3077b728502661
|
| --- /dev/null
|
| +++ b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/keysetview.js
|
| @@ -0,0 +1,727 @@
|
| +// 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.elements.content.KeysetView');
|
| +
|
| +goog.require('goog.array');
|
| +goog.require('goog.dom.classlist');
|
| +goog.require('goog.i18n.bidi');
|
| +goog.require('goog.style');
|
| +goog.require('goog.ui.Container');
|
| +goog.require('i18n.input.chrome.inputview.ConditionName');
|
| +goog.require('i18n.input.chrome.inputview.Css');
|
| +goog.require('i18n.input.chrome.inputview.SpecNodeName');
|
| +goog.require('i18n.input.chrome.inputview.elements.ElementType');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.CandidateButton');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.CanvasView');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.CharacterKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.CompactKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.EmojiKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.EnSwitcherKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.FunctionalKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.KeyboardView');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.MenuKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.ModifierKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.PageIndicator');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.SpaceKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.SwitcherKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.content.TabBarKey');
|
| +goog.require('i18n.input.chrome.inputview.elements.layout.ExtendedLayout');
|
| +goog.require('i18n.input.chrome.inputview.elements.layout.HandwritingLayout');
|
| +goog.require('i18n.input.chrome.inputview.elements.layout.LinearLayout');
|
| +goog.require('i18n.input.chrome.inputview.elements.layout.SoftKeyView');
|
| +goog.require('i18n.input.chrome.inputview.elements.layout.VerticalLayout');
|
| +goog.require('i18n.input.chrome.inputview.util');
|
| +
|
| +
|
| +
|
| +goog.scope(function() {
|
| +
|
| +var ConditionName = i18n.input.chrome.inputview.ConditionName;
|
| +var SpecNodeName = i18n.input.chrome.inputview.SpecNodeName;
|
| +var ElementType = i18n.input.chrome.inputview.elements.ElementType;
|
| +var content = i18n.input.chrome.inputview.elements.content;
|
| +var layout = i18n.input.chrome.inputview.elements.layout;
|
| +var Css = i18n.input.chrome.inputview.Css;
|
| +var util = i18n.input.chrome.inputview.util;
|
| +
|
| +
|
| +
|
| +/**
|
| + * The keyboard.
|
| + *
|
| + * @param {!Object} keyData The data includes soft key definition and key
|
| + * mapping.
|
| + * @param {!Object} layoutData The layout definition.
|
| + * @param {string} keyboardCode The keyboard code.
|
| + * @param {string} languageCode The language code.
|
| + * @param {!i18n.input.chrome.inputview.Model} model The model.
|
| + * @param {string} name The Input Tool name.
|
| + * @param {!goog.events.EventTarget=} opt_eventTarget .
|
| + * @param {i18n.input.chrome.inputview.Adapter=} opt_adapter .
|
| + * @constructor
|
| + * @extends {goog.ui.Container}
|
| + */
|
| +i18n.input.chrome.inputview.elements.content.KeysetView = function(keyData,
|
| + layoutData, keyboardCode, languageCode, model, name, opt_eventTarget,
|
| + opt_adapter) {
|
| + goog.base(this);
|
| + this.setParentEventTarget(opt_eventTarget || null);
|
| +
|
| + /**
|
| + * The key configuration data.
|
| + *
|
| + * @type {!Object}
|
| + * @const
|
| + * @private
|
| + */
|
| + this.keyData_ = keyData;
|
| +
|
| + /**
|
| + * The layout definition.
|
| + *
|
| + * @type {!Object}
|
| + * @const
|
| + * @private
|
| + */
|
| + this.layoutData_ = layoutData;
|
| +
|
| + /**
|
| + * The keyboard code.
|
| + *
|
| + * @type {string}
|
| + * @private
|
| + */
|
| + this.keyboardCode_ = keyboardCode;
|
| +
|
| + /**
|
| + * The language code.
|
| + *
|
| + * @protected {string}
|
| + */
|
| + this.languageCode = languageCode;
|
| +
|
| + /**
|
| + * The model, the reason use dataModel as its name because model_ will
|
| + * conflict with the one in goog.ui.Container.
|
| + *
|
| + * @type {!i18n.input.chrome.inputview.Model}
|
| + * @private
|
| + */
|
| + this.dataModel_ = model;
|
| +
|
| + /**
|
| + * The rows in this view, the reason we don't use getChild is that container
|
| + * only accepts control as its child, so we have to use
|
| + * row.render(this.getElement()) style.
|
| + *
|
| + * @type {!Array.<layout.LinearLayout>}
|
| + * @private
|
| + */
|
| + this.rows_ = [];
|
| +
|
| + /**
|
| + * The maps of all the soft key view.
|
| + *
|
| + * @type {!Object.<string, !layout.SoftKeyView>}
|
| + * @private
|
| + */
|
| + this.softKeyViewMap_ = {};
|
| +
|
| + /**
|
| + * The map from the condition to the soft key view.
|
| + *
|
| + * @type {!Object.<string, !layout.SoftKeyView>}
|
| + * @private
|
| + */
|
| + this.softKeyConditionMap_ = {};
|
| +
|
| + /**
|
| + * The on-screen keyboard title.
|
| + *
|
| + * @type {string}
|
| + * @private
|
| + */
|
| + this.title_ = name;
|
| +
|
| + /**
|
| + * The bus channel to communicate with background.
|
| + *
|
| + * @protected {i18n.input.chrome.inputview.Adapter}
|
| + */
|
| + this.adapter = opt_adapter || null;
|
| +
|
| + /**
|
| + * The conditions.
|
| + *
|
| + * @private {!Object.<string, boolean>}
|
| + */
|
| + this.conditions_ = {};
|
| +
|
| + /**
|
| + * whether to display the candidate view or not.
|
| + *
|
| + * @type {boolean}
|
| + */
|
| + this.disableCandidateView =
|
| + goog.isDef(this.layoutData_['disableCandidateView']) ?
|
| + this.layoutData_['disableCandidateView'] : false;
|
| +
|
| + /**
|
| + * The map of the child views.
|
| + * Key: The id of the child element.
|
| + * Value: The element.
|
| + *
|
| + * @private {!Object.<string, !i18n.input.chrome.inputview.elements.Element>}
|
| + */
|
| + this.childMap_ = {};
|
| +};
|
| +var KeysetView = i18n.input.chrome.inputview.elements.content.KeysetView;
|
| +goog.inherits(KeysetView, goog.ui.Container);
|
| +
|
| +
|
| +/**
|
| + * True if the keyset view has shift state.
|
| + *
|
| + * @type {boolean}
|
| + */
|
| +KeysetView.prototype.hasShift = true;
|
| +
|
| +
|
| +/**
|
| + * The keyboard.
|
| + *
|
| + * @type {!content.KeyboardView}
|
| + * @private
|
| + */
|
| +KeysetView.prototype.keyboardView_;
|
| +
|
| +
|
| +/**
|
| + * The keyset code from which jumps to this keyset view.
|
| + *
|
| + * @type {string}
|
| + */
|
| +KeysetView.prototype.fromKeyset = '';
|
| +
|
| +
|
| +/**
|
| + * The handwriting canvas view.
|
| + *
|
| + * @protected {!content.CanvasView}
|
| + */
|
| +KeysetView.prototype.canvasView;
|
| +
|
| +
|
| +/**
|
| + * The space key.
|
| + *
|
| + * @type {!content.SpaceKey}
|
| + */
|
| +KeysetView.prototype.spaceKey;
|
| +
|
| +
|
| +/**
|
| + * The outer height of the view.
|
| + *
|
| + * @type {number}
|
| + * @private
|
| + */
|
| +KeysetView.prototype.outerHeight_ = 0;
|
| +
|
| +
|
| +/**
|
| + * The outer width of the view.
|
| + *
|
| + * @type {number}
|
| + * @private
|
| + */
|
| +KeysetView.prototype.outerWidth_ = 0;
|
| +
|
| +
|
| +/** @override */
|
| +KeysetView.prototype.createDom = function() {
|
| + goog.base(this, 'createDom');
|
| +
|
| + this.hasShift = !this.keyData_[SpecNodeName.NO_SHIFT];
|
| + var elem = this.getElement();
|
| + elem.id = this.keyboardCode_.replace(/\./g, '-');
|
| + goog.dom.classlist.add(elem, i18n.input.chrome.inputview.Css.VIEW);
|
| +
|
| + var children = this.layoutData_['children'];
|
| + for (var i = 0; i < children.length; i++) {
|
| + var child = children[i];
|
| + var layoutElem = /** @type {!layout.LinearLayout} */
|
| + (this.createLayoutElement_(child[i18n.input.chrome.inputview.
|
| + SpecNodeName.SPEC], this));
|
| + // Can't use addChild here, because container only allow control as its
|
| + // child.
|
| + if (layoutElem) {
|
| + layoutElem.render(elem);
|
| + this.rows_.push(layoutElem);
|
| + }
|
| + }
|
| +
|
| + var softKeyList = [];
|
| + var keySpecs = this.keyData_[SpecNodeName.KEY_LIST];
|
| + var hasAltGrCharacterInTheKeyset = this.hasAltGrCharacterInTheKeyset_(
|
| + keySpecs);
|
| + for (var i = 0; i < keySpecs.length; i++) {
|
| + var softKey = this.createKey_(keySpecs[i][SpecNodeName.SPEC],
|
| + hasAltGrCharacterInTheKeyset);
|
| + if (softKey) {
|
| + softKeyList.push(softKey);
|
| + }
|
| + }
|
| + var mapping = this.keyData_[
|
| + SpecNodeName.MAPPING];
|
| + this.keyboardView_.setUp(softKeyList, this.softKeyViewMap_, mapping);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Updates the view.
|
| + */
|
| +KeysetView.prototype.update = function() {
|
| + this.keyboardView_.update();
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Resizes the view.
|
| + *
|
| + * @param {number} outerWidth The width of the outer space.
|
| + * @param {number} outerHeight The height of the outer space.
|
| + * @param {boolean=} opt_force Forces to resize the view.
|
| + */
|
| +KeysetView.prototype.resize = function(outerWidth, outerHeight, opt_force) {
|
| + var needResize = !!opt_force || (this.outerHeight_ != outerHeight ||
|
| + this.outerWidth_ != outerWidth);
|
| + if (this.getElement() && needResize) {
|
| + this.outerHeight_ = outerHeight;
|
| + this.outerWidth_ = outerWidth;
|
| + var elem = this.getElement();
|
| + goog.style.setSize(elem, outerWidth, outerHeight);
|
| +
|
| + var weightArray = [];
|
| + for (var i = 0; i < this.rows_.length; i++) {
|
| + var row = this.rows_[i];
|
| + weightArray.push(row.getHeightInWeight());
|
| + }
|
| +
|
| + var splitedHeight = i18n.input.chrome.inputview.util.splitValue(weightArray,
|
| + outerHeight);
|
| + for (var i = 0; i < this.rows_.length; i++) {
|
| + var row = this.rows_[i];
|
| + row.resize(outerWidth, splitedHeight[i]);
|
| + }
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the total height in weight.
|
| + *
|
| + * @return {number} The total height in weight.
|
| + */
|
| +KeysetView.prototype.getHeightInWeight = function() {
|
| + var heightInWeight = 0;
|
| + for (var i = 0; i < this.rows_.length; i++) {
|
| + var row = this.rows_[i];
|
| + heightInWeight += row.getHeightInWeight();
|
| + }
|
| + return heightInWeight;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Apply conditions.
|
| + *
|
| + * @param {!Object.<string, boolean>} conditions The conditions.
|
| + */
|
| +KeysetView.prototype.applyConditions = function(conditions) {
|
| + this.conditions_ = conditions;
|
| + for (var condition in conditions) {
|
| + var softKeyView = this.softKeyConditionMap_[condition];
|
| + var isConditionEnabled = conditions[condition];
|
| + if (softKeyView) {
|
| + softKeyView.setVisible(isConditionEnabled);
|
| + var softKeyViewGetWeight = this.softKeyViewMap_[softKeyView.
|
| + giveWeightTo];
|
| + if (softKeyViewGetWeight) {
|
| + // Only supports horizontal weight transfer now.
|
| + softKeyViewGetWeight.dynamicaGrantedWeight += isConditionEnabled ?
|
| + 0 : softKeyView.widthInWeight;
|
| + }
|
| + }
|
| + }
|
| +
|
| + // Adjusts the width of globe key and menu key according to the mock when they
|
| + // both show up.
|
| + // TODO: This is hacky. Remove the hack once figure out a better way.
|
| + var showGlobeKey = conditions[ConditionName.SHOW_GLOBE_OR_SYMBOL];
|
| + var showMenuKey = conditions[ConditionName.SHOW_MENU];
|
| + var menuKeyView = this.softKeyConditionMap_[ConditionName.SHOW_MENU];
|
| + var globeKeyView =
|
| + this.softKeyConditionMap_[ConditionName.SHOW_GLOBE_OR_SYMBOL];
|
| + if (menuKeyView && globeKeyView) {
|
| + var softKeyViewGetWeight =
|
| + this.softKeyViewMap_[menuKeyView.giveWeightTo];
|
| + if (softKeyViewGetWeight) {
|
| + if (showGlobeKey && showMenuKey) {
|
| + globeKeyView.dynamicaGrantedWeight = -0.1;
|
| + menuKeyView.dynamicaGrantedWeight = -0.4;
|
| + softKeyViewGetWeight.dynamicaGrantedWeight += 0.5;
|
| + }
|
| + }
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Updates the condition.
|
| + *
|
| + * @param {string} name .
|
| + * @param {boolean} value .
|
| + */
|
| +KeysetView.prototype.updateCondition = function(name, value) {
|
| + for (var id in this.softKeyViewMap_) {
|
| + var skv = this.softKeyViewMap_[id];
|
| + skv.dynamicaGrantedWeight = 0;
|
| + }
|
| + this.conditions_[name] = value;
|
| + this.applyConditions(this.conditions_);
|
| + this.resize(this.outerWidth_, this.outerHeight_, true);
|
| + this.update();
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Creates the element according to its type.
|
| + *
|
| + * @param {!Object} spec The specification.
|
| + * @param {!goog.events.EventTarget=} opt_eventTarget The event target.
|
| + * @return {i18n.input.chrome.inputview.elements.Element} The element.
|
| + * @private
|
| + */
|
| +KeysetView.prototype.createElement_ = function(spec, opt_eventTarget) {
|
| + var type = spec[SpecNodeName.TYPE];
|
| + var id = spec[SpecNodeName.ID];
|
| + var widthInWeight = spec[
|
| + SpecNodeName.WIDTH_IN_WEIGHT];
|
| + var heightInWeight = spec[
|
| + SpecNodeName.HEIGHT_IN_WEIGHT];
|
| + var width = spec[SpecNodeName.WIDTH];
|
| + var height = spec[SpecNodeName.HEIGHT];
|
| + var padding = spec[SpecNodeName.PADDING];
|
| + var widthPercent = spec[SpecNodeName.WIDTH_PERCENT];
|
| + var heightPercent = spec[SpecNodeName.HEIGHT_PERCENT];
|
| + var elem = null;
|
| + switch (type) {
|
| + case ElementType.SOFT_KEY_VIEW:
|
| + var condition = spec[SpecNodeName.CONDITION];
|
| + var giveWeightTo = spec[SpecNodeName.GIVE_WEIGHT_TO];
|
| + elem = new layout.SoftKeyView(id, widthInWeight,
|
| + heightInWeight, condition, giveWeightTo, opt_eventTarget);
|
| + this.softKeyConditionMap_[condition] = elem;
|
| + break;
|
| + case ElementType.LINEAR_LAYOUT:
|
| + var opt_iconCssClass = spec[SpecNodeName.ICON_CSS_CLASS];
|
| + elem = new layout.LinearLayout(id, opt_eventTarget, opt_iconCssClass);
|
| + break;
|
| + case ElementType.EXTENDED_LAYOUT:
|
| + elem = new layout.ExtendedLayout(id, opt_eventTarget);
|
| + break;
|
| + case ElementType.VERTICAL_LAYOUT:
|
| + elem = new layout.VerticalLayout(id, opt_eventTarget);
|
| + break;
|
| + case ElementType.LAYOUT_VIEW:
|
| + this.keyboardView_ = new content.KeyboardView(id, opt_eventTarget);
|
| + elem = this.keyboardView_;
|
| + break;
|
| + case ElementType.CANVAS_VIEW:
|
| + this.canvasView = new content.CanvasView(id, widthInWeight,
|
| + heightInWeight, opt_eventTarget, this.adapter);
|
| + elem = this.canvasView;
|
| + break;
|
| + case ElementType.HANDWRITING_LAYOUT:
|
| + elem = new layout.HandwritingLayout(id, opt_eventTarget);
|
| + break;
|
| + }
|
| + if (elem) {
|
| + this.childMap_[id] = elem;
|
| + }
|
| + return elem;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Creates the layout element.
|
| + *
|
| + * @param {!Object} spec The specification for the element.
|
| + * @param {!goog.events.EventTarget=} opt_parentEventTarget The parent event
|
| + * target.
|
| + * @return {i18n.input.chrome.inputview.elements.Element} The element.
|
| + * @private
|
| + */
|
| +KeysetView.prototype.createLayoutElement_ = function(spec,
|
| + opt_parentEventTarget) {
|
| + var element = this.createElement_(spec, opt_parentEventTarget);
|
| + if (!element) {
|
| + return null;
|
| + }
|
| +
|
| + var children = spec[SpecNodeName.CHILDREN];
|
| + if (children) {
|
| + children = goog.array.flatten(children);
|
| + for (var i = 0; i < children.length; i++) {
|
| + var child = children[i];
|
| + var childElem = this.createLayoutElement_(
|
| + child[SpecNodeName.SPEC], element);
|
| + if (childElem) {
|
| + element.addChild(childElem, true);
|
| + }
|
| + }
|
| + }
|
| + if (element.type == ElementType.SOFT_KEY_VIEW) {
|
| + this.softKeyViewMap_[element.id] =
|
| + /** @type {!layout.SoftKeyView} */ (element);
|
| + }
|
| + return element;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Checks if there is altgr character.
|
| + *
|
| + * @param {!Array.<!Object>} keySpecs The list of key specs.
|
| + * @return {[boolean, boolean]} A list with two boolean values, the first is
|
| + * for whether there is altgr character of letter keys, the second is for
|
| + * symbol keys.
|
| + * @private
|
| + */
|
| +KeysetView.prototype.hasAltGrCharacterInTheKeyset_ = function(keySpecs) {
|
| + var result = [false, false];
|
| + for (var i = 0; i < keySpecs.length; i++) {
|
| + var spec = keySpecs[i];
|
| + var characters = spec[SpecNodeName.CHARACTERS];
|
| + if (characters && (!!characters[2] || !!characters[3])) {
|
| + var index = i18n.input.chrome.inputview.util.isLetterKey(
|
| + characters) ? 0 : 1;
|
| + result[index] = true;
|
| + }
|
| + }
|
| + return result;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Creates a soft key.
|
| + *
|
| + * @param {Object} spec The specification.
|
| + * @param {!Array.<boolean, boolean>} hasAltGrCharacterInTheKeyset The list
|
| + * of results for whether there is altgr character, the first for letter
|
| + * key, the second for symbol key.
|
| + * @return {i18n.input.chrome.inputview.elements.Element} The soft key.
|
| + * @private
|
| + */
|
| +KeysetView.prototype.createKey_ = function(spec, hasAltGrCharacterInTheKeyset) {
|
| + var type = spec[SpecNodeName.TYPE];
|
| + var id = spec[SpecNodeName.ID];
|
| + var keyCode = spec[SpecNodeName.KEY_CODE]; // Could be undefined.
|
| + var name = spec[SpecNodeName.NAME];
|
| + var characters = spec[SpecNodeName.CHARACTERS];
|
| + var iconCssClass = spec[SpecNodeName.ICON_CSS_CLASS];
|
| + var textCssClass = spec[SpecNodeName.TEXT_CSS_CLASS];
|
| + var toKeyset = spec[SpecNodeName.TO_KEYSET];
|
| + var toKeysetName = spec[SpecNodeName.
|
| + TO_KEYSET_NAME];
|
| + var elem = null;
|
| + switch (type) {
|
| + case ElementType.MODIFIER_KEY:
|
| + var toState = spec[SpecNodeName.TO_STATE];
|
| + var supportSticky = spec[SpecNodeName.SUPPORT_STICKY];
|
| + elem = new content.ModifierKey(id, name, iconCssClass, toState,
|
| + this.dataModel_.stateManager, supportSticky);
|
| + break;
|
| + case ElementType.SPACE_KEY:
|
| + this.spaceKey = new content.SpaceKey(id, this.dataModel_.stateManager,
|
| + this.title_, characters, undefined, iconCssClass);
|
| + elem = this.spaceKey;
|
| + break;
|
| + case ElementType.EN_SWITCHER:
|
| + elem = new content.EnSwitcherKey(id, type, name, iconCssClass,
|
| + this.dataModel_.stateManager, Css.EN_SWITCHER_DEFAULT,
|
| + Css.EN_SWITCHER_ENGLISH);
|
| + break;
|
| + case ElementType.BACKSPACE_KEY:
|
| + case ElementType.ENTER_KEY:
|
| + case ElementType.TAB_KEY:
|
| + case ElementType.ARROW_UP:
|
| + case ElementType.ARROW_DOWN:
|
| + case ElementType.ARROW_LEFT:
|
| + case ElementType.ARROW_RIGHT:
|
| + case ElementType.HIDE_KEYBOARD_KEY:
|
| + case ElementType.GLOBE_KEY:
|
| + elem = new content.FunctionalKey(id, type, name, iconCssClass);
|
| + break;
|
| + case ElementType.TAB_BAR_KEY:
|
| + elem = new content.TabBarKey(id, type, name, iconCssClass,
|
| + toKeyset, this.dataModel_.stateManager);
|
| + break;
|
| + case ElementType.EMOJI_KEY:
|
| + var text = spec[SpecNodeName.TEXT];
|
| + var isEmoticon = spec[SpecNodeName.IS_EMOTICON];
|
| + elem = new content.EmojiKey(id, type, text, iconCssClass, isEmoticon);
|
| + break;
|
| + case ElementType.PAGE_INDICATOR:
|
| + elem = new content.PageIndicator(id, type);
|
| + break;
|
| + case ElementType.IME_SWITCH:
|
| + elem = new content.FunctionalKey(id, type, name, iconCssClass, undefined,
|
| + textCssClass);
|
| + break;
|
| + case ElementType.MENU_KEY:
|
| + elem = new content.MenuKey(id, type, name, iconCssClass, toKeyset);
|
| + break;
|
| + case ElementType.SWITCHER_KEY:
|
| + var record = spec[SpecNodeName.RECORD];
|
| + elem = new content.SwitcherKey(id, type, name, iconCssClass, toKeyset,
|
| + toKeysetName, record);
|
| + break;
|
| + case ElementType.COMPACT_KEY:
|
| + var hintText = spec[SpecNodeName.HINT_TEXT];
|
| + var text = spec[SpecNodeName.TEXT];
|
| + var marginLeftPercent = spec[SpecNodeName.MARGIN_LEFT_PERCENT];
|
| + var marginRightPercent = spec[SpecNodeName.MARGIN_RIGHT_PERCENT];
|
| + var isGrey = spec[SpecNodeName.IS_GREY];
|
| + var moreKeys = spec[SpecNodeName.MORE_KEYS];
|
| + elem = new content.CompactKey(
|
| + id, text, hintText, this.dataModel_.stateManager, this.hasShift,
|
| + marginLeftPercent, marginRightPercent, isGrey, moreKeys);
|
| + break;
|
| + case ElementType.CHARACTER_KEY:
|
| + var isLetterKey = i18n.input.chrome.inputview.util.isLetterKey(
|
| + characters);
|
| + elem = new content.CharacterKey(id, keyCode || 0,
|
| + characters, isLetterKey, hasAltGrCharacterInTheKeyset[isLetterKey],
|
| + this.dataModel_.settings.alwaysRenderAltGrCharacter,
|
| + this.dataModel_.stateManager,
|
| + goog.i18n.bidi.isRtlLanguage(this.languageCode));
|
| + break;
|
| +
|
| + case ElementType.BACK_BUTTON:
|
| + elem = new content.CandidateButton(
|
| + id, ElementType.BACK_BUTTON, iconCssClass,
|
| + chrome.i18n.getMessage('HANDWRITING_BACK'), this);
|
| + break;
|
| + }
|
| + if (elem) {
|
| + this.childMap_[id] = elem;
|
| + }
|
| + return elem;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the view for the key.
|
| + *
|
| + * @param {string} code The code of the key.
|
| + * @return {i18n.input.chrome.inputview.elements.content.SoftKey} The soft key.
|
| + */
|
| +KeysetView.prototype.getViewForKey = function(code) {
|
| + return this.keyboardView_.getViewForKey(code);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the width in weight for a entire row.
|
| + *
|
| + * @return {number} .
|
| + */
|
| +KeysetView.prototype.getWidthInWeight = function() {
|
| + if (this.rows_.length > 0) {
|
| + return this.rows_[0].getWidthInWeight();
|
| + }
|
| +
|
| + return 0;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Whether there are strokes on canvas.
|
| + *
|
| + * @return {boolean} Whether there are strokes on canvas.
|
| + */
|
| +KeysetView.prototype.hasStrokesOnCanvas = function() {
|
| + if (this.canvasView) {
|
| + return this.canvasView.hasStrokesOnCanvas();
|
| + } else {
|
| + return false;
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Cleans the stokes.
|
| + */
|
| +KeysetView.prototype.cleanStroke = function() {
|
| + if (this.canvasView) {
|
| + this.canvasView.reset();
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Checks the view whether is handwriting panel.
|
| + *
|
| + * @return {boolean} Whether is handwriting panel.
|
| + */
|
| +KeysetView.prototype.isHandwriting = function() {
|
| + return this.keyboardCode_ == 'hwt';
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Get the subview of the keysetview according to the id.
|
| + *
|
| + * @param {string} id The id.
|
| + * @return {i18n.input.chrome.inputview.elements.Element}
|
| + */
|
| +KeysetView.prototype.getChildViewById = function(id) {
|
| + return this.childMap_[id];
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Activate the current keyset view instance.
|
| + *
|
| + * @param {string} rawKeyset The raw keyset.
|
| + */
|
| +KeysetView.prototype.activate = function(rawKeyset) {
|
| + if (goog.array.contains(util.KEYSETS_HAVE_EN_SWTICHER, rawKeyset)) {
|
| + this.updateCondition(ConditionName.SHOW_EN_SWITCHER_KEY, true);
|
| + var elem = this.getElement();
|
| + var name = rawKeyset.replace(/\-.*$/, '').toUpperCase();
|
| + goog.dom.classlist.add(elem, Css[name]);
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Deactivate the current keyset view instance.
|
| + *
|
| + * @param {string} rawKeyset The raw keyset id map to the instance keyset id.
|
| + */
|
| +KeysetView.prototype.deactivate = goog.nullFunction;
|
| +}); // goog.scope
|
|
|