Chromium Code Reviews| 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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 113 throw Error('Node must have editable state set to true.'); | 113 throw Error('Node must have editable state set to true.'); |
| 114 var start = node.textSelStart; | 114 var start = node.textSelStart; |
| 115 var end = node.textSelEnd; | 115 var end = node.textSelEnd; |
| 116 cvox.ChromeVoxEditableTextBase.call( | 116 cvox.ChromeVoxEditableTextBase.call( |
| 117 this, node.value || '', Math.min(start, end), Math.max(start, end), | 117 this, node.value || '', Math.min(start, end), Math.max(start, end), |
| 118 node.state[StateType.PROTECTED] /**password*/, cvox.ChromeVox.tts); | 118 node.state[StateType.PROTECTED] /**password*/, cvox.ChromeVox.tts); |
| 119 /** @override */ | 119 /** @override */ |
| 120 this.multiline = node.state[StateType.MULTILINE] || false; | 120 this.multiline = node.state[StateType.MULTILINE] || false; |
| 121 /** @type {!AutomationNode} @private */ | 121 /** @type {!AutomationNode} @private */ |
| 122 this.node_ = node; | 122 this.node_ = node; |
| 123 /** @type {Array<number>} @private */ | |
| 124 this.lineBreaks_ = []; | |
| 125 } | 123 } |
| 126 | 124 |
| 127 AutomationEditableText.prototype = { | 125 AutomationEditableText.prototype = { |
| 128 __proto__: cvox.ChromeVoxEditableTextBase.prototype, | 126 __proto__: cvox.ChromeVoxEditableTextBase.prototype, |
| 129 | 127 |
| 130 /** | 128 /** |
| 131 * Called when the text field has been updated. | 129 * Called when the text field has been updated. |
| 132 */ | 130 */ |
| 133 onUpdate: function() { | 131 onUpdate: function() { |
| 134 var newValue = this.node_.value || ''; | 132 var newValue = this.node_.value || ''; |
| 135 | 133 |
| 136 if (this.value != newValue) | |
| 137 this.lineBreaks_ = []; | |
| 138 | |
| 139 var textChangeEvent = new cvox.TextChangeEvent( | 134 var textChangeEvent = new cvox.TextChangeEvent( |
| 140 newValue, this.node_.textSelStart || 0, this.node_.textSelEnd || 0, | 135 newValue, this.node_.textSelStart || 0, this.node_.textSelEnd || 0, |
| 141 true /* triggered by user */); | 136 true /* triggered by user */); |
| 142 this.changed(textChangeEvent); | 137 this.changed(textChangeEvent); |
| 143 this.outputBraille_(); | 138 this.outputBraille_(); |
| 144 }, | 139 }, |
| 145 | 140 |
| 146 /** @override */ | 141 /** @override */ |
| 147 getLineIndex: function(charIndex) { | 142 getLineIndex: function(charIndex) { |
| 148 if (!this.multiline) | 143 if (!this.multiline) |
| 149 return 0; | 144 return 0; |
| 150 var breaks = this.node_.lineBreaks || []; | 145 var breaks = this.node_.lineBreaks || []; |
| 151 var index = 0; | 146 var index = 0; |
| 152 while (index < breaks.length && breaks[index] <= charIndex) | 147 while (index < breaks.length && breaks[index] <= charIndex) |
| 153 ++index; | 148 ++index; |
| 154 return index; | 149 return index; |
| 155 }, | 150 }, |
| 156 | 151 |
| 157 /** @override */ | 152 /** @override */ |
| 158 getLineStart: function(lineIndex) { | 153 getLineStart: function(lineIndex) { |
| 159 if (!this.multiline || lineIndex == 0) | 154 if (!this.multiline || lineIndex == 0) |
| 160 return 0; | 155 return 0; |
| 161 var breaks = this.getLineBreaks_(); | 156 var breaks = this.getLineBreaks_(); |
| 157 if (breaks.length < 1) | |
|
David Tseng
2017/07/07 17:58:06
These changes should be unneeded now.
| |
| 158 return 0; | |
| 162 return breaks[lineIndex - 1] || this.node_.value.length; | 159 return breaks[lineIndex - 1] || this.node_.value.length; |
| 163 }, | 160 }, |
| 164 | 161 |
| 165 /** @override */ | 162 /** @override */ |
| 166 getLineEnd: function(lineIndex) { | 163 getLineEnd: function(lineIndex) { |
| 167 var breaks = this.getLineBreaks_(); | 164 var breaks = this.getLineBreaks_(); |
| 168 var value = this.node_.value; | 165 var value = this.node_.value; |
| 169 if (lineIndex >= breaks.length) | 166 if (lineIndex >= breaks.length) |
| 170 return value.length; | 167 return value.length; |
| 171 return breaks[lineIndex] - 1; | 168 return breaks[lineIndex] - 1; |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 812 * @return {boolean} | 809 * @return {boolean} |
| 813 */ | 810 */ |
| 814 isSameLineAndSelection: function(otherLine) { | 811 isSameLineAndSelection: function(otherLine) { |
| 815 return this.isSameLine(otherLine) && | 812 return this.isSameLine(otherLine) && |
| 816 this.startOffset == otherLine.startOffset && | 813 this.startOffset == otherLine.startOffset && |
| 817 this.endOffset == otherLine.endOffset; | 814 this.endOffset == otherLine.endOffset; |
| 818 } | 815 } |
| 819 }; | 816 }; |
| 820 | 817 |
| 821 }); | 818 }); |
| OLD | NEW |