| Index: chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js b/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js
|
| index e240f52929a393157380b399ce28f12e146e6815..d4e79a7042176c9b070918f6f6bfea6daca88bdd 100644
|
| --- a/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js
|
| +++ b/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js
|
| @@ -275,8 +275,7 @@ cvox.ChromeVoxEditableTextBase.prototype.isWordBreakChar = function(ch) {
|
| * should trigger description.
|
| */
|
| cvox.ChromeVoxEditableTextBase.prototype.shouldDescribeChange = function(evt) {
|
| - if (evt.value == this.value &&
|
| - evt.start == this.start &&
|
| + if (evt.value == this.value && evt.start == this.start &&
|
| evt.end == this.end) {
|
| return false;
|
| }
|
| @@ -291,8 +290,8 @@ cvox.ChromeVoxEditableTextBase.prototype.shouldDescribeChange = function(evt) {
|
| * user action.
|
| * @param {Object=} opt_personality Personality used to speak text.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.speak =
|
| - function(str, opt_triggeredByUser, opt_personality) {
|
| +cvox.ChromeVoxEditableTextBase.prototype.speak = function(
|
| + str, opt_triggeredByUser, opt_personality) {
|
| if (!str) {
|
| return;
|
| }
|
| @@ -336,15 +335,18 @@ cvox.ChromeVoxEditableTextBase.prototype.changed = function(evt) {
|
| * stays the same.
|
| * @param {cvox.TextChangeEvent} evt The text change event.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.describeSelectionChanged =
|
| - function(evt) {
|
| +cvox.ChromeVoxEditableTextBase.prototype.describeSelectionChanged = function(
|
| + evt) {
|
| // TODO(deboer): Factor this into two function:
|
| // - one to determine the selection event
|
| // - one to speak
|
|
|
| if (this.isPassword) {
|
| - this.speak((new goog.i18n.MessageFormat(Msgs.getMsg('bullet'))
|
| - .format({'COUNT': 1})), evt.triggeredByUser);
|
| + this.speak(
|
| + (new goog.i18n.MessageFormat(Msgs.getMsg('bullet')).format({
|
| + 'COUNT': 1
|
| + })),
|
| + evt.triggeredByUser);
|
| return;
|
| }
|
| if (evt.start == evt.end) {
|
| @@ -352,8 +354,7 @@ cvox.ChromeVoxEditableTextBase.prototype.describeSelectionChanged =
|
| if (this.start != this.end) {
|
| // It was previously a selection, so just announce 'unselected'.
|
| this.speak(Msgs.getMsg('Unselected'), evt.triggeredByUser);
|
| - } else if (this.getLineIndex(this.start) !=
|
| - this.getLineIndex(evt.start)) {
|
| + } else if (this.getLineIndex(this.start) != this.getLineIndex(evt.start)) {
|
| // Moved to a different line; read it.
|
| var lineValue = this.getLine(this.getLineIndex(evt.start));
|
| if (lineValue == '') {
|
| @@ -364,67 +365,70 @@ cvox.ChromeVoxEditableTextBase.prototype.describeSelectionChanged =
|
| lineValue = Msgs.getMsg('text_box_whitespace');
|
| }
|
| this.speak(lineValue, evt.triggeredByUser);
|
| - } else if (this.start == evt.start + 1 ||
|
| - this.start == evt.start - 1) {
|
| + } else if (this.start == evt.start + 1 || this.start == evt.start - 1) {
|
| // Moved by one character; read it.
|
| if (!cvox.ChromeVoxEditableTextBase.useIBeamCursor) {
|
| if (evt.start == this.value.length) {
|
| if (cvox.ChromeVox.verbosity == cvox.VERBOSITY_VERBOSE) {
|
| - this.speak(Msgs.getMsg('end_of_text_verbose'),
|
| - evt.triggeredByUser);
|
| + this.speak(Msgs.getMsg('end_of_text_verbose'), evt.triggeredByUser);
|
| } else {
|
| - this.speak(Msgs.getMsg('end_of_text_brief'),
|
| - evt.triggeredByUser);
|
| + this.speak(Msgs.getMsg('end_of_text_brief'), evt.triggeredByUser);
|
| }
|
| } else {
|
| - this.speak(this.value.substr(evt.start, 1),
|
| - evt.triggeredByUser,
|
| - {'phoneticCharacters': evt.triggeredByUser});
|
| + this.speak(
|
| + this.value.substr(evt.start, 1), evt.triggeredByUser,
|
| + {'phoneticCharacters': evt.triggeredByUser});
|
| }
|
| } else {
|
| - this.speak(this.value.substr(Math.min(this.start, evt.start), 1),
|
| - evt.triggeredByUser,
|
| - {'phoneticCharacters': evt.triggeredByUser});
|
| + this.speak(
|
| + this.value.substr(Math.min(this.start, evt.start), 1),
|
| + evt.triggeredByUser, {'phoneticCharacters': evt.triggeredByUser});
|
| }
|
| } else {
|
| // Moved by more than one character. Read all characters crossed.
|
| - this.speak(this.value.substr(Math.min(this.start, evt.start),
|
| - Math.abs(this.start - evt.start)), evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(
|
| + Math.min(this.start, evt.start),
|
| + Math.abs(this.start - evt.start)),
|
| + evt.triggeredByUser);
|
| }
|
| } else {
|
| // It's currently a selection.
|
| - if (this.start + 1 == evt.start &&
|
| - this.end == this.value.length &&
|
| + if (this.start + 1 == evt.start && this.end == this.value.length &&
|
| evt.end == this.value.length) {
|
| // Autocomplete: the user typed one character of autocompleted text.
|
| this.speak(this.value.substr(this.start, 1), evt.triggeredByUser);
|
| this.speak(this.value.substr(evt.start));
|
| } else if (this.start == this.end) {
|
| // It was previously a cursor.
|
| - this.speak(this.value.substr(evt.start, evt.end - evt.start),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(evt.start, evt.end - evt.start),
|
| + evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('selected'));
|
| } else if (this.start == evt.start && this.end < evt.end) {
|
| - this.speak(this.value.substr(this.end, evt.end - this.end),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(this.end, evt.end - this.end), evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('added_to_selection'));
|
| } else if (this.start == evt.start && this.end > evt.end) {
|
| - this.speak(this.value.substr(evt.end, this.end - evt.end),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(evt.end, this.end - evt.end), evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('removed_from_selection'));
|
| } else if (this.end == evt.end && this.start > evt.start) {
|
| - this.speak(this.value.substr(evt.start, this.start - evt.start),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(evt.start, this.start - evt.start),
|
| + evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('added_to_selection'));
|
| } else if (this.end == evt.end && this.start < evt.start) {
|
| - this.speak(this.value.substr(this.start, evt.start - this.start),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(this.start, evt.start - this.start),
|
| + evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('removed_from_selection'));
|
| } else {
|
| // The selection changed but it wasn't an obvious extension of
|
| // a previous selection. Just read the new selection.
|
| - this.speak(this.value.substr(evt.start, evt.end - evt.start),
|
| - evt.triggeredByUser);
|
| + this.speak(
|
| + this.value.substr(evt.start, evt.end - evt.start),
|
| + evt.triggeredByUser);
|
| this.speak(Msgs.getMsg('selected'));
|
| }
|
| }
|
| @@ -441,8 +445,11 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| personality = cvox.AbstractTts.PERSONALITY_DELETED;
|
| }
|
| if (this.isPassword) {
|
| - this.speak((new goog.i18n.MessageFormat(Msgs.getMsg('bullet'))
|
| - .format({'COUNT': 1})), evt.triggeredByUser, personality);
|
| + this.speak(
|
| + (new goog.i18n.MessageFormat(Msgs.getMsg('bullet')).format({
|
| + 'COUNT': 1
|
| + })),
|
| + evt.triggeredByUser, personality);
|
| return;
|
| }
|
|
|
| @@ -478,9 +485,8 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| // breakers).
|
| // TODO(dtseng): Think about a more reliable way to do this.
|
| if (!(cvox.ChromeVoxEditableContentEditable &&
|
| - this instanceof cvox.ChromeVoxEditableContentEditable) ||
|
| - newLen < len ||
|
| - this.isWordBreakChar(evt.value[newLen - 1] || '')) {
|
| + this instanceof cvox.ChromeVoxEditableContentEditable) ||
|
| + newLen < len || this.isWordBreakChar(evt.value[newLen - 1] || '')) {
|
| this.describeTextChangedHelper(
|
| evt, prefixLen, suffixLen, autocompleteSuffix, personality);
|
| }
|
| @@ -493,16 +499,13 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| // a word or line.
|
| prefixLen = evt.start;
|
| suffixLen = newLen - evtEnd;
|
| - if (this.start == this.end &&
|
| - evt.start == evtEnd &&
|
| + if (this.start == this.end && evt.start == evtEnd &&
|
| evtValue.substr(0, prefixLen) == value.substr(0, prefixLen) &&
|
| - evtValue.substr(newLen - suffixLen) ==
|
| - value.substr(len - suffixLen)) {
|
| + evtValue.substr(newLen - suffixLen) == value.substr(len - suffixLen)) {
|
| // Forward deletions causes reading of the character immediately to the
|
| // right of the caret or the deleted text depending on the iBeam cursor
|
| // setting.
|
| - if (this.start == evt.start &&
|
| - this.end == evt.end &&
|
| + if (this.start == evt.start && this.end == evt.end &&
|
| !cvox.ChromeVoxEditableTextBase.useIBeamCursor) {
|
| this.speak(evt.value[evt.start], evt.triggeredByUser);
|
| } else {
|
| @@ -525,8 +528,8 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| // The user added text either to the beginning or the end.
|
| if (evtValue.length > value.length) {
|
| if (evtValue.startsWith(value)) {
|
| - this.speak(evtValue[evtValue.length - 1], evt.triggeredByUser,
|
| - personality);
|
| + this.speak(
|
| + evtValue[evtValue.length - 1], evt.triggeredByUser, personality);
|
| return;
|
| } else if (evtValue.indexOf(value) == 1) {
|
| this.speak(evtValue[0], evt.triggeredByUser, personality);
|
| @@ -548,8 +551,7 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| if (this.multiline) {
|
| // Fall back to announce deleted but omit the text that was deleted.
|
| if (evt.value.length < this.value.length) {
|
| - this.speak(Msgs.getMsg('text_deleted'),
|
| - evt.triggeredByUser, personality);
|
| + this.speak(Msgs.getMsg('text_deleted'), evt.triggeredByUser, personality);
|
| }
|
| // The below is a somewhat loose way to deal with non-standard
|
| // insertions/deletions. Intentionally skip for multiline since deletion
|
| @@ -570,8 +572,7 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| // Otherwise, look for the common prefix and suffix, but back up so
|
| // that we can speak complete words, to be minimally confusing.
|
| prefixLen = 0;
|
| - while (prefixLen < len &&
|
| - prefixLen < newLen &&
|
| + while (prefixLen < len && prefixLen < newLen &&
|
| value[prefixLen] == evtValue[prefixLen]) {
|
| prefixLen++;
|
| }
|
| @@ -580,8 +581,7 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) {
|
| }
|
|
|
| suffixLen = 0;
|
| - while (suffixLen < (len - prefixLen) &&
|
| - suffixLen < (newLen - prefixLen) &&
|
| + while (suffixLen < (len - prefixLen) && suffixLen < (newLen - prefixLen) &&
|
| value[len - suffixLen - 1] == evtValue[newLen - suffixLen - 1]) {
|
| suffixLen++;
|
| }
|
| @@ -622,9 +622,8 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChangedHelper = function(
|
| utterance = inserted;
|
| } else if (insertedLen == 1) {
|
| if ((cvox.ChromeVox.typingEcho == cvox.TypingEcho.WORD ||
|
| - cvox.ChromeVox.typingEcho == cvox.TypingEcho.CHARACTER_AND_WORD) &&
|
| - this.isWordBreakChar(inserted) &&
|
| - prefixLen > 0 &&
|
| + cvox.ChromeVox.typingEcho == cvox.TypingEcho.CHARACTER_AND_WORD) &&
|
| + this.isWordBreakChar(inserted) && prefixLen > 0 &&
|
| !this.isWordBreakChar(evt.value.substr(prefixLen - 1, 1))) {
|
| // Speak previous word.
|
| var index = prefixLen;
|
| @@ -635,14 +634,15 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChangedHelper = function(
|
| utterance = evt.value.substr(index, prefixLen + 1 - index);
|
| } else {
|
| utterance = inserted;
|
| - triggeredByUser = false; // Implies QUEUE_MODE_QUEUE.
|
| + triggeredByUser = false; // Implies QUEUE_MODE_QUEUE.
|
| }
|
| - } else if (cvox.ChromeVox.typingEcho == cvox.TypingEcho.CHARACTER ||
|
| + } else if (
|
| + cvox.ChromeVox.typingEcho == cvox.TypingEcho.CHARACTER ||
|
| cvox.ChromeVox.typingEcho == cvox.TypingEcho.CHARACTER_AND_WORD) {
|
| // This particular case is handled in event watcher. See the key press
|
| // handler for more details.
|
| - utterance = cvox.ChromeVoxEditableTextBase.eventTypingEcho ? '' :
|
| - inserted;
|
| + utterance =
|
| + cvox.ChromeVoxEditableTextBase.eventTypingEcho ? '' : inserted;
|
| }
|
| } else if (deletedLen > 1 && !autocompleteSuffix) {
|
| utterance = deleted + ', deleted';
|
| @@ -667,7 +667,9 @@ cvox.ChromeVoxEditableTextBase.prototype.describeTextChangedHelper = function(
|
| * @return {boolean} True if the action was handled.
|
| */
|
| cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextCharacter =
|
| - function() { return false; };
|
| + function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| @@ -675,39 +677,45 @@ cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextCharacter =
|
| * @return {boolean} True if the action was handled.
|
| */
|
| cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousCharacter =
|
| - function() { return false; };
|
| + function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| * Moves the cursor forward by one word.
|
| * @return {boolean} True if the action was handled.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextWord =
|
| - function() { return false; };
|
| +cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextWord = function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| * Moves the cursor backward by one word.
|
| * @return {boolean} True if the action was handled.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousWord =
|
| - function() { return false; };
|
| +cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousWord = function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| * Moves the cursor forward by one line.
|
| * @return {boolean} True if the action was handled.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextLine =
|
| - function() { return false; };
|
| +cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextLine = function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| * Moves the cursor backward by one line.
|
| * @return {boolean} True if the action was handled.
|
| */
|
| -cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousLine =
|
| - function() { return false; };
|
| +cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousLine = function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| @@ -715,7 +723,9 @@ cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousLine =
|
| * @return {boolean} True if the action was handled.
|
| */
|
| cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextParagraph =
|
| - function() { return false; };
|
| + function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /**
|
| @@ -723,7 +733,9 @@ cvox.ChromeVoxEditableTextBase.prototype.moveCursorToNextParagraph =
|
| * @return {boolean} True if the action was handled.
|
| */
|
| cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousParagraph =
|
| - function() { return false; };
|
| + function() {
|
| + return false;
|
| +};
|
|
|
|
|
| /******************************************/
|
|
|