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

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

Issue 637223006: Initial support for Ranges over automation nodes (used to track ChromeVox focus). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reintroduce test. 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 c8b65e50d1d17e82be781b78f637347c875ec219..a379b665d9bee9b412be7bd719909947cdcaffe4 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
@@ -72,16 +72,35 @@ cursors.Cursor = function(node, index) {
this.index = index;
};
+/**
+ * Convenience method to construct a Cursor from a node.
+ * @param {!AutomationNode} node
+ * @return {!cursors.Cursor}
+ */
+cursors.Cursor.fromNode = function(node) {
+ return new cursors.Cursor(node, cursors.NODE_INDEX);
+};
+
cursors.Cursor.prototype = {
/**
* Returns a copy of this cursor.
- * @return {cursors.Cursor}
+ * @return {!cursors.Cursor}
*/
clone: function() {
return new cursors.Cursor(this.node, this.index);
},
/**
+ * Returns true if |rhs| is equal to this cursor.
+ * @param {!cursors.Cursor} rhs
+ * @return {boolean}
+ */
+ equals: function(rhs) {
+ return this.node === rhs.node &&
+ this.index === rhs.index;
+ },
+
+ /**
* Gets the accessible text of the node associated with this cursor.
*
* Note that only one of |name| or |value| attribute is ever nonempty on an
@@ -214,4 +233,100 @@ cursors.Cursor.prototype = {
}
};
+/**
+ * Represents a range in the automation tree. There is no visible selection on
+ * the page caused by usage of this object.
+ * @param {!cursors.Cursor} start
+ * @param {!cursors.Cursor} end
+ * @constructor
+ */
+cursors.Range = function(start, end) {
+ this.start = start;
+ this.end = end;
Peter Lundblad 2014/10/23 13:35:07 Are these members meant to be public?
+ this.normalize();
+};
+
+/**
+ * Convenience method to construct a Range surrounding one node.
+ * @param {!AutomationNode} node
+ * @return {!cursors.Range}
+ */
+cursors.Range.fromNode = function(node) {
+ return new cursors.Range(cursors.Cursor.fromNode(node),
+ cursors.Cursor.fromNode(node));
+};
+
+cursors.Range.prototype = {
+ /** @return {!cursors.Range} */
+ clone: function() {
+ return new cursors.Range(this.start.clone(), this.end.clone());
+ },
+
+ /**
+ * Returns true if |rhs| is equal to this range.
+ * @param {!cursors.Range} rhs
+ * @return {boolean}
+ */
+ equals: function(rhs) {
+ return this.start.equals(rhs.start) &&
+ this.end.equals(rhs.end);
+ },
+
+ /**
+ * Gets a cursor bounding this range.
+ * @param {Dir} dir Which endpoint cursor to return; Dir.FORWARD for end,
+ * Dir.BACKWARD for start.
+ * @return {cursors.Cursor}
+ */
+ getBound: function(dir) {
+ return dir == Dir.FORWARD ? this.end : this.start;
+ },
+
+ /**
+ * Collapses this range to an endpoint.
+ * @param {Dir} dir Dir.FORWARD collapses to end; Dir.BACKWARD collapses to
+ * start.
+ * @return {cursors.Range}
+ */
+ collapse: function(dir) {
+ this.start = this.getBound(dir);
+ this.end = this.start;
+ return this;
+ },
+
+ /**
+ * Moves this Range by the unit in the given direction.
+ * @param {Unit} unit
+ * @param {Dir} dir
+ */
+ move: function(unit, dir) {
+ var newStart = this.getBound(dir);
+ var newEnd = newStart.clone();
+ switch (unit) {
+ case Unit.CHARACTER:
+ newStart.move(unit, Movement.BOUND, dir);
+ this.normalize();
+ break;
+ case Unit.WORD:
+ case Unit.LINE:
+ case Unit.NODE:
+ newEnd.move(unit, Movement.DIRECTIONAL, dir);
+ newStart = newEnd.clone();
+ newEnd.move(unit, Movement.BOUND, Dir.FORWARD);
+ break;
+ }
+ this.start = newStart;
+ this.end = newEnd;
+ },
+
+ /**
+ * Normalizes this range to point forward.
dmazzoni 2014/10/17 16:46:08 I'm confused - the description makes it sound like
+ */
+ normalize: function() {
+ if (this.start.node == this.end.node)
dmazzoni 2014/10/17 16:46:08 nit: ===?
Peter Lundblad 2014/10/23 13:35:07 Do we want to be consistent and use === when compa
+ return this.start.index <= this.end.index;
+ return AutomationUtil.isBefore(this.start.node, this.end.node);
+ }
Peter Lundblad 2014/10/23 13:35:07 Is this the right implementation for this function
+};
+
}); // goog.scope

Powered by Google App Engine
This is Rietveld 408576698