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 /** | 5 /** |
6 * @fileoverview Processes events related to editing text and emits the | 6 * @fileoverview Processes events related to editing text and emits the |
7 * appropriate spoken and braille feedback. | 7 * appropriate spoken and braille feedback. |
8 */ | 8 */ |
9 | 9 |
10 goog.provide('editing.TextEditHandler'); | 10 goog.provide('editing.TextEditHandler'); |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
306 return; | 306 return; |
307 } | 307 } |
308 | 308 |
309 if (cur.text == '') { | 309 if (cur.text == '') { |
310 // This line has no text content. Describe the DOM selection. | 310 // This line has no text content. Describe the DOM selection. |
311 new Output() | 311 new Output() |
312 .withRichSpeechAndBraille( | 312 .withRichSpeechAndBraille( |
313 new Range(cur.start_, cur.end_), | 313 new Range(cur.start_, cur.end_), |
314 new Range(prev.start_, prev.end_), Output.EventType.NAVIGATE) | 314 new Range(prev.start_, prev.end_), Output.EventType.NAVIGATE) |
315 .go(); | 315 .go(); |
316 } else if (!cur.hasCollapsedSelection()) { | |
317 // This is a selection. | |
318 cvox.ChromeVox.tts.speak(cur.selectedText, cvox.QueueMode.CATEGORY_FLUSH); | |
dmazzoni
2017/06/23 19:50:49
Do you want to do this if there's a lot of selecte
David Tseng
2017/06/23 20:06:09
I think this is ok since |cur| will be at most a l
| |
319 cvox.ChromeVox.tts.speak(Msgs.getMsg('selected'), cvox.QueueMode.QUEUE); | |
320 this.brailleCurrentRichLine_(); | |
316 } else { | 321 } else { |
317 // Describe the current line. This accounts for previous/current | 322 // Describe the current line. This accounts for previous/current |
318 // selections and picking the line edge boundary that changed (as computed | 323 // selections and picking the line edge boundary that changed (as computed |
319 // above). This is also the code path for describing paste. | 324 // above). This is also the code path for describing paste. |
320 cvox.ChromeVox.tts.speak(cur.text, cvox.QueueMode.CATEGORY_FLUSH); | 325 cvox.ChromeVox.tts.speak(cur.text, cvox.QueueMode.CATEGORY_FLUSH); |
321 this.brailleCurrentRichLine_(); | 326 this.brailleCurrentRichLine_(); |
322 } | 327 } |
323 | 328 |
324 // The state in EditableTextBase needs to get updated with the new line | 329 // The state in EditableTextBase needs to get updated with the new line |
325 // contents, so that subsequent intra-line changes get the right state | 330 // contents, so that subsequent intra-line changes get the right state |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
734 }, | 739 }, |
735 | 740 |
736 /** | 741 /** |
737 * The text content of this line. | 742 * The text content of this line. |
738 * @return {string} The text of this line. | 743 * @return {string} The text of this line. |
739 */ | 744 */ |
740 get text() { | 745 get text() { |
741 return this.value_.toString(); | 746 return this.value_.toString(); |
742 }, | 747 }, |
743 | 748 |
749 /** @return {string} */ | |
750 get selectedText() { | |
751 return this.value_.toString().substring(this.startOffset, this.endOffset); | |
752 }, | |
753 | |
754 /** @return {boolean} */ | |
755 hasCollapsedSelection: function() { | |
756 return this.start_.equals(this.end_); | |
757 }, | |
758 | |
744 /** | 759 /** |
745 * Returns true if |otherLine| surrounds the same line as |this|. Note that | 760 * Returns true if |otherLine| surrounds the same line as |this|. Note that |
746 * the contents of the line might be different. | 761 * the contents of the line might be different. |
747 * @param {editing.EditableLine} otherLine | 762 * @param {editing.EditableLine} otherLine |
748 * @return {boolean} | 763 * @return {boolean} |
749 */ | 764 */ |
750 isSameLine: function(otherLine) { | 765 isSameLine: function(otherLine) { |
751 // Equality is intentionally loose here as any of the state nodes can be | 766 // Equality is intentionally loose here as any of the state nodes can be |
752 // invalidated at any time. We rely upon the start/anchor of the line | 767 // invalidated at any time. We rely upon the start/anchor of the line |
753 // staying the same. | 768 // staying the same. |
(...skipping 12 matching lines...) Expand all Loading... | |
766 * @return {boolean} | 781 * @return {boolean} |
767 */ | 782 */ |
768 isSameLineAndSelection: function(otherLine) { | 783 isSameLineAndSelection: function(otherLine) { |
769 return this.isSameLine(otherLine) && | 784 return this.isSameLine(otherLine) && |
770 this.startOffset == otherLine.startOffset && | 785 this.startOffset == otherLine.startOffset && |
771 this.endOffset == otherLine.endOffset; | 786 this.endOffset == otherLine.endOffset; |
772 } | 787 } |
773 }; | 788 }; |
774 | 789 |
775 }); | 790 }); |
OLD | NEW |