| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 goog.provide('cvox.ChromeVoxEditableTextBase'); | 5 goog.provide('cvox.ChromeVoxEditableTextBase'); |
| 6 goog.provide('cvox.TextChangeEvent'); | 6 goog.provide('cvox.TextChangeEvent'); |
| 7 goog.provide('cvox.TypingEcho'); | 7 goog.provide('cvox.TypingEcho'); |
| 8 | 8 |
| 9 goog.require('cvox.AbstractTts'); | 9 goog.require('cvox.AbstractTts'); |
| 10 goog.require('cvox.ChromeVox'); | 10 goog.require('cvox.ChromeVox'); |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 .format({'COUNT': 1})), evt.triggeredByUser); | 345 .format({'COUNT': 1})), evt.triggeredByUser); |
| 346 return; | 346 return; |
| 347 } | 347 } |
| 348 if (evt.start == evt.end) { | 348 if (evt.start == evt.end) { |
| 349 // It's currently a cursor. | 349 // It's currently a cursor. |
| 350 if (this.start != this.end) { | 350 if (this.start != this.end) { |
| 351 // It was previously a selection, so just announce 'unselected'. | 351 // It was previously a selection, so just announce 'unselected'. |
| 352 this.speak(Msgs.getMsg('Unselected'), evt.triggeredByUser); | 352 this.speak(Msgs.getMsg('Unselected'), evt.triggeredByUser); |
| 353 } else if (this.getLineIndex(this.start) != | 353 } else if (this.getLineIndex(this.start) != |
| 354 this.getLineIndex(evt.start)) { | 354 this.getLineIndex(evt.start)) { |
| 355 this.describeLine(this.getLineIndex(evt.start), evt.triggeredByUser); | 355 // Moved to a different line; read it. |
| 356 var lineValue = this.getLine(this.getLineIndex(evt.start)); |
| 357 if (lineValue == '') { |
| 358 lineValue = Msgs.getMsg('text_box_blank'); |
| 359 } else if (/^\s+$/.test(lineValue)) { |
| 360 lineValue = Msgs.getMsg('text_box_whitespace'); |
| 361 } |
| 362 this.speak(lineValue, evt.triggeredByUser); |
| 356 } else if (this.start == evt.start + 1 || | 363 } else if (this.start == evt.start + 1 || |
| 357 this.start == evt.start - 1) { | 364 this.start == evt.start - 1) { |
| 358 // Moved by one character; read it. | 365 // Moved by one character; read it. |
| 359 if (!cvox.ChromeVoxEditableTextBase.useIBeamCursor) { | 366 if (!cvox.ChromeVoxEditableTextBase.useIBeamCursor) { |
| 360 if (evt.start == this.value.length) { | 367 if (evt.start == this.value.length) { |
| 361 if (cvox.ChromeVox.verbosity == cvox.VERBOSITY_VERBOSE) { | 368 if (cvox.ChromeVox.verbosity == cvox.VERBOSITY_VERBOSE) { |
| 362 this.speak(Msgs.getMsg('end_of_text_verbose'), | 369 this.speak(Msgs.getMsg('end_of_text_verbose'), |
| 363 evt.triggeredByUser); | 370 evt.triggeredByUser); |
| 364 } else { | 371 } else { |
| 365 this.speak(Msgs.getMsg('end_of_text_brief'), | 372 this.speak(Msgs.getMsg('end_of_text_brief'), |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 } else { | 419 } else { |
| 413 // The selection changed but it wasn't an obvious extension of | 420 // The selection changed but it wasn't an obvious extension of |
| 414 // a previous selection. Just read the new selection. | 421 // a previous selection. Just read the new selection. |
| 415 this.speak(this.value.substr(evt.start, evt.end - evt.start), | 422 this.speak(this.value.substr(evt.start, evt.end - evt.start), |
| 416 evt.triggeredByUser); | 423 evt.triggeredByUser); |
| 417 this.speak(Msgs.getMsg('selected')); | 424 this.speak(Msgs.getMsg('selected')); |
| 418 } | 425 } |
| 419 } | 426 } |
| 420 }; | 427 }; |
| 421 | 428 |
| 422 /** | |
| 423 * Describes a line given a line index and whether it was user triggered. | |
| 424 * @param {number} lineIndex | |
| 425 * @param {boolean} triggeredByUser | |
| 426 */ | |
| 427 cvox.ChromeVoxEditableTextBase.prototype.describeLine = | |
| 428 function(lineIndex, triggeredByUser) { | |
| 429 var lineValue = this.getLine(lineIndex); | |
| 430 if (lineValue == '') { | |
| 431 lineValue = Msgs.getMsg('text_box_blank'); | |
| 432 } else if (/^\s+$/.test(lineValue)) { | |
| 433 lineValue = Msgs.getMsg('text_box_whitespace'); | |
| 434 } | |
| 435 this.speak(lineValue, triggeredByUser); | |
| 436 }; | |
| 437 | |
| 438 | 429 |
| 439 /** | 430 /** |
| 440 * Describe a change where the text changes. | 431 * Describe a change where the text changes. |
| 441 * @param {cvox.TextChangeEvent} evt The text change event. | 432 * @param {cvox.TextChangeEvent} evt The text change event. |
| 442 */ | 433 */ |
| 443 cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) { | 434 cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) { |
| 444 var personality = {}; | 435 var personality = {}; |
| 445 if (evt.value.length < this.value.length) { | 436 if (evt.value.length < this.value.length) { |
| 446 personality = cvox.AbstractTts.PERSONALITY_DELETED; | 437 personality = cvox.AbstractTts.PERSONALITY_DELETED; |
| 447 } | 438 } |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 | 716 |
| 726 /** | 717 /** |
| 727 * Moves the cursor backward by one paragraph. | 718 * Moves the cursor backward by one paragraph. |
| 728 * @return {boolean} True if the action was handled. | 719 * @return {boolean} True if the action was handled. |
| 729 */ | 720 */ |
| 730 cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousParagraph = | 721 cvox.ChromeVoxEditableTextBase.prototype.moveCursorToPreviousParagraph = |
| 731 function() { return false; }; | 722 function() { return false; }; |
| 732 | 723 |
| 733 | 724 |
| 734 /******************************************/ | 725 /******************************************/ |
| OLD | NEW |