| Index: third_party/google_input_tools/src/chrome/os/inputview/elements/content/charactermodel.js
|
| diff --git a/third_party/google_input_tools/src/chrome/os/inputview/elements/content/charactermodel.js b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/charactermodel.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76402c1179b09b36e4f7014f239b604fa865b547
|
| --- /dev/null
|
| +++ b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/charactermodel.js
|
| @@ -0,0 +1,254 @@
|
| +// 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.CharacterModel');
|
| +
|
| +goog.require('i18n.input.chrome.inputview.StateType');
|
| +
|
| +
|
| +
|
| +goog.scope(function() {
|
| +
|
| +
|
| +
|
| +/**
|
| + * The character model.
|
| + *
|
| + * @param {string} character The character.
|
| + * @param {boolean} belongToLetterKey True if this characters belongs to a
|
| + * letter key.
|
| + * @param {boolean} hasAltGrCharacterInTheKeyset True if this kind of key has
|
| + * altgr character.
|
| + * @param {boolean} alwaysRenderAltGrCharacter True if always renders the altgr
|
| + * character.
|
| + * @param {number} stateType The state type for this character.
|
| + * @param {!i18n.input.chrome.inputview.StateManager} stateManager The state
|
| + * manager.
|
| + * @param {string=} opt_capslockCharacter .
|
| + * @constructor
|
| + */
|
| +i18n.input.chrome.inputview.elements.content.CharacterModel = function(
|
| + character, belongToLetterKey, hasAltGrCharacterInTheKeyset,
|
| + alwaysRenderAltGrCharacter, stateType, stateManager,
|
| + opt_capslockCharacter) {
|
| +
|
| + /**
|
| + * The character.
|
| + *
|
| + * @type {string}
|
| + * @private
|
| + */
|
| + this.character_ = character;
|
| +
|
| + /**
|
| + * The character for the capslock state.
|
| + *
|
| + * @private {string}
|
| + */
|
| + this.capslockCharacter_ = opt_capslockCharacter || '';
|
| +
|
| + /**
|
| + * Whether this character is belong to a letter key.
|
| + *
|
| + * @type {boolean}
|
| + * @private
|
| + */
|
| + this.belongToLetterKey_ = belongToLetterKey;
|
| +
|
| + /**
|
| + * The state.
|
| + *
|
| + * @type {number}
|
| + * @private
|
| + */
|
| + this.stateType_ = stateType;
|
| +
|
| + /**
|
| + * The state manager.
|
| + *
|
| + * @type {!i18n.input.chrome.inputview.StateManager}
|
| + * @private
|
| + */
|
| + this.stateManager_ = stateManager;
|
| +
|
| + /**
|
| + * Whether to always renders the altgr character..
|
| + *
|
| + * @type {boolean}
|
| + * @private
|
| + */
|
| + this.alwaysRenderAltGrCharacter_ = alwaysRenderAltGrCharacter;
|
| +
|
| + /**
|
| + * True if this key set has altgr character.
|
| + *
|
| + * @type {boolean}
|
| + * @private
|
| + */
|
| + this.hasAltGrCharacterInTheKeyset_ = hasAltGrCharacterInTheKeyset;
|
| +};
|
| +var CharacterModel = i18n.input.chrome.inputview.elements.content.
|
| + CharacterModel;
|
| +
|
| +
|
| +/**
|
| + * The alignment type.
|
| + *
|
| + * @enum {number}
|
| + */
|
| +CharacterModel.AlignType = {
|
| + CENTER: 0,
|
| + CORNER: 1
|
| +};
|
| +
|
| +
|
| +/**
|
| + * The position attributes.
|
| + *
|
| + * @type {!Array.<!Array.<string>>}
|
| + * @private
|
| + */
|
| +CharacterModel.CORNERS_ = [
|
| + ['bottom', 'left'],
|
| + ['top', 'left'],
|
| + ['bottom', 'right'],
|
| + ['top', 'right']
|
| +];
|
| +
|
| +
|
| +/**
|
| + * True if this character is highlighed.
|
| + *
|
| + * @return {boolean} True if the character is highlighted.
|
| + */
|
| +CharacterModel.prototype.isHighlighted = function() {
|
| + var state = this.stateManager_.getState();
|
| + state = state & (i18n.input.chrome.inputview.StateType.SHIFT |
|
| + i18n.input.chrome.inputview.StateType.ALTGR);
|
| + return this.stateType_ == state;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * True if this character is visible.
|
| + *
|
| + * @return {boolean} True if the character is visible.
|
| + */
|
| +CharacterModel.prototype.isVisible = function() {
|
| + if (this.stateType_ == i18n.input.chrome.inputview.StateType.DEFAULT) {
|
| + return !this.stateManager_.hasState(
|
| + i18n.input.chrome.inputview.StateType.ALTGR) && (
|
| + !this.belongToLetterKey_ || !this.stateManager_.hasState(
|
| + i18n.input.chrome.inputview.StateType.SHIFT));
|
| + }
|
| + if (this.stateType_ == i18n.input.chrome.inputview.StateType.SHIFT) {
|
| + return !this.stateManager_.hasState(
|
| + i18n.input.chrome.inputview.StateType.ALTGR) && (
|
| + !this.belongToLetterKey_ || this.stateManager_.hasState(
|
| + i18n.input.chrome.inputview.StateType.SHIFT));
|
| + }
|
| + if ((this.stateType_ & i18n.input.chrome.inputview.StateType.ALTGR) != 0) {
|
| + // AltGr or AltGr+Shift character.
|
| + return this.alwaysRenderAltGrCharacter_ || this.stateManager_.
|
| + hasState(i18n.input.chrome.inputview.StateType.ALTGR);
|
| + }
|
| + return false;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the reversed case character.
|
| + *
|
| + * @return {string} The reversed character
|
| + * @private
|
| + */
|
| +CharacterModel.prototype.toReversedCase_ = function() {
|
| + var reversed;
|
| + if (this.character_.toUpperCase() == this.character_) {
|
| + reversed = this.character_.toLowerCase();
|
| + } else {
|
| + reversed = this.character_.toUpperCase();
|
| + }
|
| + return reversed;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the content of this character..
|
| + *
|
| + * @return {string} The content.
|
| + */
|
| +CharacterModel.prototype.getContent = function() {
|
| + if (this.stateManager_.hasState(
|
| + i18n.input.chrome.inputview.StateType.CAPSLOCK)) {
|
| + return this.capslockCharacter_ ? this.capslockCharacter_ :
|
| + this.toReversedCase_();
|
| + }
|
| +
|
| + return this.character_;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * True if align the character in the center horizontally.
|
| + *
|
| + * @return {boolean} True to align in the center.
|
| + */
|
| +CharacterModel.prototype.isHorizontalAlignCenter = function() {
|
| + if (this.stateType_ == i18n.input.chrome.inputview.StateType.DEFAULT ||
|
| + this.stateType_ == i18n.input.chrome.inputview.StateType.SHIFT) {
|
| + return !this.alwaysRenderAltGrCharacter_ ||
|
| + !this.hasAltGrCharacterInTheKeyset_;
|
| + }
|
| +
|
| + return false;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * True to align the character in the center vertically.
|
| + *
|
| + * @return {boolean} True to be in the center.
|
| + */
|
| +CharacterModel.prototype.isVerticalAlignCenter = function() {
|
| + if (this.stateType_ == i18n.input.chrome.inputview.StateType.DEFAULT ||
|
| + this.stateType_ == i18n.input.chrome.inputview.StateType.SHIFT) {
|
| + return this.belongToLetterKey_;
|
| + }
|
| +
|
| + return false;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the attribute for position.
|
| + *
|
| + * @return {!Array.<string>} The attributes.
|
| + */
|
| +CharacterModel.prototype.getPositionAttribute = function() {
|
| + var index;
|
| + switch (this.stateType_) {
|
| + case i18n.input.chrome.inputview.StateType.DEFAULT:
|
| + return CharacterModel.CORNERS_[0];
|
| + case i18n.input.chrome.inputview.StateType.SHIFT:
|
| + return CharacterModel.CORNERS_[1];
|
| + case i18n.input.chrome.inputview.StateType.ALTGR:
|
| + return CharacterModel.CORNERS_[2];
|
| + default:
|
| + return CharacterModel.CORNERS_[3];
|
| + }
|
| +};
|
| +
|
| +
|
| +}); // goog.scope
|
| +
|
|
|