Index: third_party/google_input_tools/src/chrome/os/inputview/elements/content/compactkey.js |
diff --git a/third_party/google_input_tools/src/chrome/os/inputview/elements/content/compactkey.js b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/compactkey.js |
index aab41f220ab3f442bbad421fc443ac5f99330e50..f3e6334281da7ff998bdff232812c4e27a523c56 100644 |
--- a/third_party/google_input_tools/src/chrome/os/inputview/elements/content/compactkey.js |
+++ b/third_party/google_input_tools/src/chrome/os/inputview/elements/content/compactkey.js |
@@ -21,17 +21,23 @@ goog.require('goog.math.Coordinate'); |
goog.require('goog.style'); |
goog.require('i18n.input.chrome.inputview.Css'); |
goog.require('i18n.input.chrome.inputview.MoreKeysShiftOperation'); |
+goog.require('i18n.input.chrome.inputview.SpecNodeName'); |
goog.require('i18n.input.chrome.inputview.StateType'); |
goog.require('i18n.input.chrome.inputview.SwipeDirection'); |
goog.require('i18n.input.chrome.inputview.elements.ElementType'); |
+goog.require('i18n.input.chrome.inputview.elements.content.CompactKeyModel'); |
goog.require('i18n.input.chrome.inputview.elements.content.FunctionalKey'); |
goog.require('i18n.input.chrome.inputview.elements.content.GaussianEstimator'); |
+goog.require('i18n.input.chrome.message.ContextType'); |
goog.scope(function() { |
+var CompactKeyModel = |
+ i18n.input.chrome.inputview.elements.content.CompactKeyModel; |
+var ContextType = i18n.input.chrome.message.ContextType; |
var MoreKeysShiftOperation = i18n.input.chrome.inputview.MoreKeysShiftOperation; |
- |
+var SpecNodeName = i18n.input.chrome.inputview.SpecNodeName; |
/** |
@@ -43,22 +49,16 @@ var MoreKeysShiftOperation = i18n.input.chrome.inputview.MoreKeysShiftOperation; |
* @param {!i18n.input.chrome.inputview.StateManager} stateManager The state |
* manager. |
* @param {boolean} hasShift True if the compact key has shift.} |
- * @param {number=} opt_marginLeftPercent The percent of the left margin. |
- * @param {number=} opt_marginRightPercent The percent of the right margin. |
- * @param {boolean=} opt_isGrey True if it is grey. |
- * @param {!Array.<string>=} opt_moreKeys The more keys characters. |
- * @param {MoreKeysShiftOperation=} opt_moreKeysShiftType |
- * The type of opearation when the shift key is down. |
+ * @param {!CompactKeyModel} compactKeyModel The attributes of compact key. |
* @param {goog.events.EventTarget=} opt_eventTarget The event target. |
* @constructor |
* @extends {i18n.input.chrome.inputview.elements.content.FunctionalKey} |
*/ |
i18n.input.chrome.inputview.elements.content.CompactKey = function(id, text, |
- hintText, stateManager, hasShift, opt_marginLeftPercent, |
- opt_marginRightPercent, opt_isGrey, opt_moreKeys, |
- opt_moreKeysShiftType, opt_eventTarget) { |
+ hintText, stateManager, hasShift, compactKeyModel, opt_eventTarget) { |
+ var textCssClass = compactKeyModel.textCssClass; |
goog.base(this, id, i18n.input.chrome.inputview.elements.ElementType. |
- COMPACT_KEY, text, '', opt_eventTarget); |
+ COMPACT_KEY, text, '', opt_eventTarget, textCssClass); |
/** |
* The hint text. |
@@ -67,26 +67,10 @@ i18n.input.chrome.inputview.elements.content.CompactKey = function(id, text, |
*/ |
this.hintText = hintText; |
- /** |
- * The left margin. |
- * |
- * @type {number} |
- * @private |
- */ |
- this.marginLeftPercent_ = opt_marginLeftPercent || 0; |
- |
/** @private {boolean} */ |
this.hasShift_ = hasShift; |
/** |
- * The right margin. |
- * |
- * @type {number} |
- * @private |
- */ |
- this.marginRightPercent_ = opt_marginRightPercent || 0; |
- |
- /** |
* The state manager. |
* |
* @type {!i18n.input.chrome.inputview.StateManager} |
@@ -95,27 +79,11 @@ i18n.input.chrome.inputview.elements.content.CompactKey = function(id, text, |
this.stateManager_ = stateManager; |
/** |
- * True if it is grey. |
- * |
- * @type {boolean} |
- * @private |
- */ |
- this.isGrey_ = !!opt_isGrey; |
- |
- /** |
- * The more keys array. |
- * |
- * @type {!Array.<string>} |
- */ |
- this.moreKeys = opt_moreKeys || []; |
- |
- /** |
- * The type of shift operation of moreKeys. |
+ * The attributes of compact key. |
* |
- * @private {MoreKeysShiftOperation} |
+ * @private {CompactKeyModel} |
*/ |
- this.moreKeysShiftOperation_ = goog.isDef(opt_moreKeysShiftType) ? |
- opt_moreKeysShiftType : MoreKeysShiftOperation.TO_UPPER_CASE; |
+ this.compactKeyModel_ = compactKeyModel; |
this.pointerConfig.longPressWithPointerUp = true; |
this.pointerConfig.flickerDirection = |
@@ -141,7 +109,7 @@ CompactKey.prototype.createDom = function() { |
goog.dom.classlist.add(this.tableCell, |
i18n.input.chrome.inputview.Css.COMPACT_KEY); |
- if (!this.isGrey_) { |
+ if (!this.compactKeyModel_.isGrey) { |
goog.dom.classlist.remove(this.bgElem, |
i18n.input.chrome.inputview.Css.SPECIAL_KEY_BG); |
} |
@@ -149,13 +117,13 @@ CompactKey.prototype.createDom = function() { |
if (this.hintText) { |
var dom = this.getDomHelper(); |
dom.removeChildren(this.tableCell); |
- var inlineWrap = dom.createDom(goog.dom.TagName.DIV, |
+ this.inlineWrap = dom.createDom(goog.dom.TagName.DIV, |
i18n.input.chrome.inputview.Css.INLINE_DIV); |
- dom.appendChild(this.tableCell, inlineWrap); |
+ dom.appendChild(this.tableCell, this.inlineWrap); |
this.hintTextElem = dom.createDom(goog.dom.TagName.DIV, |
i18n.input.chrome.inputview.Css.HINT_TEXT, this.hintText); |
- dom.appendChild(inlineWrap, this.hintTextElem); |
- dom.appendChild(inlineWrap, this.textElem); |
+ dom.appendChild(this.inlineWrap, this.hintTextElem); |
+ dom.appendChild(this.inlineWrap, this.textElem); |
} |
}; |
@@ -163,12 +131,13 @@ CompactKey.prototype.createDom = function() { |
/** @override */ |
CompactKey.prototype.resize = function(width, height) { |
var elem = this.getElement(); |
- var marginLeft = Math.floor(width * this.marginLeftPercent_); |
+ var marginLeft = Math.floor(width * this.compactKeyModel_.marginLeftPercent); |
if (marginLeft > 0) { |
marginLeft -= 5; |
elem.style.marginLeft = marginLeft + 'px'; |
} |
- var marginRight = Math.floor(width * this.marginRightPercent_); |
+ var marginRight = |
+ Math.floor(width * this.compactKeyModel_.marginRightPercent); |
// TODO: Remove this ugly hack. The default margin right is 10px, we |
// need to add the default margin here to make all the keys have the same |
// look. |
@@ -191,6 +160,40 @@ CompactKey.prototype.resize = function(width, height) { |
/** |
+ * Gets the active character factoring in the current input type context. |
+ * |
+ * @private |
+ */ |
+CompactKey.prototype.getContextOptimizedText_ = function() { |
+ var context = this.stateManager_.contextType; |
+ // Remove all old css rules. |
+ for (var contextType in this.compactKeyModel_.textOnContext) { |
+ var oldCss = |
+ this.compactKeyModel_. |
+ textOnContext[contextType][SpecNodeName.TEXT_CSS_CLASS]; |
+ goog.dom.classlist.remove(this.tableCell, oldCss); |
+ } |
+ var text; |
+ if (context && this.compactKeyModel_.textOnContext[context]) { |
+ text = this.compactKeyModel_.textOnContext[context][SpecNodeName.TEXT]; |
+ var newCss = |
+ this.compactKeyModel_. |
+ textOnContext[context][SpecNodeName.TEXT_CSS_CLASS]; |
+ goog.dom.classlist.add(this.tableCell, newCss); |
+ } else if (this.hasShift_ && this.stateManager_.hasState( |
+ i18n.input.chrome.inputview.StateType.SHIFT)) { |
+ // When there is specific text to display when shift is pressed down, |
+ // the text should be set accordingly. |
+ text = this.compactKeyModel_.textOnShift ? |
+ this.compactKeyModel_.textOnShift : this.text.toUpperCase(); |
+ } else { |
+ text = this.text; |
+ } |
+ return text; |
+}; |
+ |
+ |
+/** |
* Get the active character. It may be upper case |text| when shift is pressed |
* or flickerred character when swipe. Note this should replace Compactkey.text |
* for compact keys. |
@@ -199,9 +202,7 @@ CompactKey.prototype.getActiveCharacter = function() { |
if (this.flickerredCharacter) { |
return this.flickerredCharacter; |
} else { |
- return this.hasShift_ && this.stateManager_.hasState( |
- i18n.input.chrome.inputview.StateType.SHIFT) ? this.text.toUpperCase() : |
- this.text; |
+ return this.getContextOptimizedText_(); |
} |
}; |
@@ -210,9 +211,21 @@ CompactKey.prototype.getActiveCharacter = function() { |
CompactKey.prototype.update = function() { |
goog.base(this, 'update'); |
- var text = this.hasShift_ && this.stateManager_.hasState( |
- i18n.input.chrome.inputview.StateType.SHIFT) ? this.text.toUpperCase() : |
- this.text; |
+ var text = this.getContextOptimizedText_(); |
+ var displayHintText = this.stateManager_.contextType != ContextType.PASSWORD; |
+ if (this.compactKeyModel_.textOnShift) { |
+ if (this.hasShift_ && this.stateManager_.hasState( |
+ i18n.input.chrome.inputview.StateType.SHIFT)) { |
+ // Deal with the case that when shift is pressed down, |
+ // only one character should show in the compact key. |
+ displayHintText = false; |
+ text = this.compactKeyModel_.textOnShift; |
+ } |
+ } |
+ this.hintTextElem && |
+ goog.style.setElementShown(this.hintTextElem, displayHintText); |
+ text = this.compactKeyModel_.title ? |
+ chrome.i18n.getMessage(this.compactKeyModel_.title) : text; |
goog.dom.setTextContent(this.textElem, text); |
}; |
@@ -223,13 +236,13 @@ CompactKey.prototype.update = function() { |
* @return {!Array.<string>} The characters. |
*/ |
CompactKey.prototype.getMoreCharacters = function() { |
- var moreCharacters = goog.array.clone(this.moreKeys); |
- switch (this.moreKeysShiftOperation_) { |
+ var moreCharacters = goog.array.clone(this.compactKeyModel_.moreKeys); |
+ switch (this.compactKeyModel_.moreKeysShiftOperation) { |
case MoreKeysShiftOperation.TO_UPPER_CASE: |
if (this.getActiveCharacter().toLowerCase() != |
this.getActiveCharacter()) { |
- for (var i = 0; i < this.moreKeys.length; i++) { |
- moreCharacters[i] = this.moreKeys[i].toUpperCase(); |
+ for (var i = 0; i < this.compactKeyModel_.moreKeys.length; i++) { |
+ moreCharacters[i] = this.compactKeyModel_.moreKeys[i].toUpperCase(); |
} |
goog.array.removeDuplicates(moreCharacters); |
} |
@@ -237,8 +250,8 @@ CompactKey.prototype.getMoreCharacters = function() { |
case MoreKeysShiftOperation.TO_LOWER_CASE: |
if (this.hasShift_ && this.stateManager_.hasState( |
i18n.input.chrome.inputview.StateType.SHIFT)) { |
- for (var i = 0; i < this.moreKeys.length; i++) { |
- moreCharacters[i] = this.moreKeys[i].toLowerCase(); |
+ for (var i = 0; i < this.compactKeyModel_.moreKeys.length; i++) { |
+ moreCharacters[i] = this.compactKeyModel_.moreKeys[i].toLowerCase(); |
} |
goog.array.removeDuplicates(moreCharacters); |
} |