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

Unified Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js

Issue 674263003: Add remaining text/caret navigation commands to ChromeVox Next. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@integrate_cursor
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
index 5339a636ed7c2911b81e209022ffddac726c0f0d..f7bb07fc9e8998f11ced0030d1bca3b4abdb7f52 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
@@ -130,38 +130,38 @@ cursors.Cursor.prototype = {
* @return {!cursors.Cursor} The moved cursor.
*/
move: function(unit, movement, dir) {
- var newNode, newIndex;
+ var newNode = this.node_;
+ var newIndex = this.index_;
+
+ if (unit != Unit.NODE && newIndex === cursors.NODE_INDEX)
+ newIndex = 0;
+
switch (unit) {
case Unit.CHARACTER:
// BOUND and DIRECTIONAL are the same for characters.
- var node = this.node_;
- var nextIndex = dir == Dir.FORWARD ? this.index_ + 1 : this.index_ - 1;
- if (nextIndex < 0 || nextIndex >= this.getText().length) {
- node = AutomationUtil.findNextNode(
- node, dir, AutomationPredicate.leaf);
- if (node) {
- nextIndex =
- dir == Dir.FORWARD ? 0 : this.getText(node).length - 1;
+ newIndex = dir == Dir.FORWARD ? newIndex + 1 : newIndex - 1;
+ if (newIndex < 0 || newIndex >= this.getText().length) {
+ newNode = AutomationUtil.findNextNode(
+ newNode, dir, AutomationPredicate.leaf);
+ if (newNode) {
+ newIndex =
+ dir == Dir.FORWARD ? 0 : this.getText(newNode).length - 1;
+ newIndex = newIndex == -1 ? 0 : newIndex;
} else {
- node = this.node_;
- nextIndex = this.index_;
+ newIndex = this.index_;
}
}
- newNode = node;
- newIndex = nextIndex;
break;
case Unit.WORD:
switch (movement) {
case Movement.BOUND:
- if (this.node_.role == Role.inlineTextBox) {
+ if (newNode.role == Role.inlineTextBox) {
var start, end;
- for (var i = 0;
- i < this.node_.attributes.wordStarts.length;
- i++) {
- if (this.index_ >= this.node_.attributes.wordStarts[i] &&
- this.index_ <= this.node_.attributes.wordEnds[i]) {
- start = this.node_.attributes.wordStarts[i];
- end = this.node_.attributes.wordEnds[i];
+ for (var i = 0; i < newNode.attributes.wordStarts.length; i++) {
+ if (newIndex >= newNode.attributes.wordStarts[i] &&
+ newIndex <= newNode.attributes.wordEnds[i]) {
+ start = newNode.attributes.wordStarts[i];
+ end = newNode.attributes.wordEnds[i];
break;
}
}
@@ -172,16 +172,14 @@ cursors.Cursor.prototype = {
}
break;
case Movement.DIRECTIONAL:
- if (this.node_.role == Role.inlineTextBox) {
+ if (newNode.role == Role.inlineTextBox) {
var start, end;
- for (var i = 0;
- i < this.node_.attributes.wordStarts.length;
- i++) {
- if (this.index_ >= this.node_.attributes.wordStarts[i] &&
- this.index_ <= this.node_.attributes.wordEnds[i]) {
+ for (var i = 0; i < newNode.attributes.wordStarts.length; i++) {
+ if (newIndex >= newNode.attributes.wordStarts[i] &&
+ newIndex <= newNode.attributes.wordEnds[i]) {
var nextIndex = dir == Dir.FORWARD ? i + 1 : i - 1;
- start = this.node_.attributes.wordStarts[nextIndex];
- end = this.node_.attributes.wordEnds[nextIndex];
+ start = newNode.attributes.wordStarts[nextIndex];
+ end = newNode.attributes.wordEnds[nextIndex];
break;
}
}
@@ -189,17 +187,16 @@ cursors.Cursor.prototype = {
newIndex = start;
} else {
// The backward case is special at the beginning of nodes.
- if (dir == Dir.BACKWARD && this.index_ != 0) {
- this.index_ = 0;
+ if (dir == Dir.BACKWARD && newIndex != 0) {
+ newIndex = 0;
} else {
- var node = AutomationUtil.findNextNode(this.node_, dir,
+ newNode = AutomationUtil.findNextNode(newNode, dir,
AutomationPredicate.leaf);
- if (node) {
- newNode = node;
+ if (newNode) {
newIndex = 0;
if (dir == Dir.BACKWARD &&
- node.role == Role.inlineTextBox) {
- var starts = node.attributes.wordStarts;
+ newNode.role == Role.inlineTextBox) {
+ var starts = newNode.attributes.wordStarts;
newIndex = starts[starts.length - 1] || 0;
} else {
// TODO(dtseng): Figure out what to do for general nodes.
@@ -219,7 +216,7 @@ cursors.Cursor.prototype = {
break;
case Movement.DIRECTIONAL:
newNode = AutomationUtil.findNextNode(
- this.node_, dir, AutomationPredicate.leaf) || this.node_;
+ newNode, dir, AutomationPredicate.leaf) || this.node_;
newIndex = cursors.NODE_INDEX;
break;
}
@@ -228,21 +225,16 @@ cursors.Cursor.prototype = {
newIndex = 0;
switch (movement) {
case Movement.BOUND:
- newNode = AutomationUtil.findNodeUntil(this.node_, dir,
+ newNode = AutomationUtil.findNodeUntil(newNode, dir,
AutomationPredicate.linebreak, {before: true});
newNode = newNode || this.node_;
newIndex =
dir == Dir.FORWARD ? this.getText(newNode).length - 1 : 0;
+ newIndex = newIndex == -1 ? 0 : newIndex;
break;
case Movement.DIRECTIONAL:
newNode = AutomationUtil.findNodeUntil(
- this.node_, dir, AutomationPredicate.linebreak);
-
- // We stick to the beginning of lines out of convention.
- if (newNode && dir == Dir.BACKWARD) {
- newNode = AutomationUtil.findNodeUntil(newNode, dir,
- AutomationPredicate.linebreak, {before: true}) || node;
- }
+ newNode, dir, AutomationPredicate.linebreak);
break;
}
break;
@@ -335,10 +327,13 @@ cursors.Range.prototype = {
break;
case Unit.WORD:
case Unit.LINE:
+ newStart = newStart.move(unit, Movement.DIRECTIONAL, dir);
+ newStart = newStart.move(unit, Movement.BOUND, Dir.BACKWARD);
+ newEnd = newStart.move(unit, Movement.BOUND, Dir.FORWARD);
+ break;
case Unit.NODE:
- newEnd = newEnd.move(unit, Movement.DIRECTIONAL, dir);
- newStart = newEnd;
- newEnd = newEnd.move(unit, Movement.BOUND, Dir.FORWARD);
+ newStart = newStart.move(unit, Movement.DIRECTIONAL, dir);
+ newEnd = newStart;
break;
}
return new cursors.Range(newStart, newEnd);

Powered by Google App Engine
This is Rietveld 408576698