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 27 matching lines...) Expand all Loading... | |
38 */ | 38 */ |
39 editing.TextEditHandler = function(node) { | 39 editing.TextEditHandler = function(node) { |
40 /** @const {!AutomationNode} @private */ | 40 /** @const {!AutomationNode} @private */ |
41 this.node_ = node; | 41 this.node_ = node; |
42 }; | 42 }; |
43 | 43 |
44 /** | 44 /** |
45 * Flag set to indicate whether ChromeVox uses experimental rich text support. | 45 * Flag set to indicate whether ChromeVox uses experimental rich text support. |
46 * @type {boolean} | 46 * @type {boolean} |
47 */ | 47 */ |
48 editing.useRichText = false; | 48 editing.useRichText = true; |
49 | 49 |
50 editing.TextEditHandler.prototype = { | 50 editing.TextEditHandler.prototype = { |
51 /** @return {!AutomationNode} */ | 51 /** @return {!AutomationNode} */ |
52 get node() { | 52 get node() { |
53 return this.node_; | 53 return this.node_; |
54 }, | 54 }, |
55 | 55 |
56 /** | 56 /** |
57 * Receives the following kinds of events when the node provided to the | 57 * Receives the following kinds of events when the node provided to the |
58 * constructor is focuse: |focus|, |textChanged|, |textSelectionChanged| and | 58 * constructor is focuse: |focus|, |textChanged|, |textSelectionChanged| and |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
378 } | 378 } |
379 }, | 379 }, |
380 | 380 |
381 /** @private */ | 381 /** @private */ |
382 brailleCurrentRichLine_: function() { | 382 brailleCurrentRichLine_: function() { |
383 var cur = this.line_; | 383 var cur = this.line_; |
384 var value = cur.value_; | 384 var value = cur.value_; |
385 value.setSpan(new cvox.ValueSpan(0), 0, cur.value_.length); | 385 value.setSpan(new cvox.ValueSpan(0), 0, cur.value_.length); |
386 value.setSpan( | 386 value.setSpan( |
387 new cvox.ValueSelectionSpan(), cur.startOffset, cur.endOffset); | 387 new cvox.ValueSelectionSpan(), cur.startOffset, cur.endOffset); |
388 | |
389 // We might have to append labels for this text field if |cur| is the first | |
390 // line. | |
391 if (cur.localLineStartContainerOffset_ == 0 && | |
392 cur.lineStartContainer_ == | |
393 this.node_.find({role: RoleType.STATIC_TEXT})) { | |
dmazzoni
2017/06/23 18:36:01
I think this assumes that the first static text is
David Tseng
2017/06/23 18:44:28
To be internally consistent with EditableLine, we
| |
394 value = new Spannable(value); | |
395 var labelComponents = [' ']; | |
396 if (this.node_.name) | |
397 labelComponents.push(this.node_.name); | |
398 labelComponents.push(Msgs.getMsg('tag_textarea_brl')); | |
399 var label = labelComponents.join(' '); | |
400 value.append(label); | |
401 } | |
402 | |
388 cvox.ChromeVox.braille.write(new cvox.NavBraille( | 403 cvox.ChromeVox.braille.write(new cvox.NavBraille( |
389 {text: value, startIndex: cur.startOffset, endIndex: cur.endOffset})); | 404 {text: value, startIndex: cur.startOffset, endIndex: cur.endOffset})); |
390 }, | 405 }, |
391 | 406 |
392 /** @override */ | 407 /** @override */ |
393 describeSelectionChanged: function(evt) { | 408 describeSelectionChanged: function(evt) { |
394 // Note that since Chrome allows for selection to be placed immediately at | 409 // Note that since Chrome allows for selection to be placed immediately at |
395 // the end of a line (i.e. end == value.length) and since we try to describe | 410 // the end of a line (i.e. end == value.length) and since we try to describe |
396 // the character to the right, this state has very little meaning in most | 411 // the character to the right, this state has very little meaning in most |
397 // cases. Describe it as a new line. In braille, we simply show the cursor | 412 // cases. Describe it as a new line. In braille, we simply show the cursor |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
751 * @return {boolean} | 766 * @return {boolean} |
752 */ | 767 */ |
753 isSameLineAndSelection: function(otherLine) { | 768 isSameLineAndSelection: function(otherLine) { |
754 return this.isSameLine(otherLine) && | 769 return this.isSameLine(otherLine) && |
755 this.startOffset == otherLine.startOffset && | 770 this.startOffset == otherLine.startOffset && |
756 this.endOffset == otherLine.endOffset; | 771 this.endOffset == otherLine.endOffset; |
757 } | 772 } |
758 }; | 773 }; |
759 | 774 |
760 }); | 775 }); |
OLD | NEW |