Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js

Issue 2931893002: More precise use of multiline state (Closed)
Patch Set: Rebase Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698