| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 Classes related to cursors that point to and select parts of | 6 * @fileoverview Classes related to cursors that point to and select parts of |
| 7 * the automation tree. | 7 * the automation tree. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 goog.provide('cursors.Cursor'); | 10 goog.provide('cursors.Cursor'); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 newNode, dir, pred) || this.node_; | 229 newNode, dir, pred) || this.node_; |
| 230 newIndex = cursors.NODE_INDEX; | 230 newIndex = cursors.NODE_INDEX; |
| 231 break; | 231 break; |
| 232 } | 232 } |
| 233 break; | 233 break; |
| 234 case Unit.LINE: | 234 case Unit.LINE: |
| 235 newIndex = 0; | 235 newIndex = 0; |
| 236 switch (movement) { | 236 switch (movement) { |
| 237 case Movement.BOUND: | 237 case Movement.BOUND: |
| 238 newNode = AutomationUtil.findNodeUntil(newNode, dir, | 238 newNode = AutomationUtil.findNodeUntil(newNode, dir, |
| 239 AutomationPredicate.linebreak, {before: true}); | 239 AutomationPredicate.linebreak, true); |
| 240 newNode = newNode || this.node_; | 240 newNode = newNode || this.node_; |
| 241 newIndex = | 241 newIndex = |
| 242 dir == Dir.FORWARD ? this.getText(newNode).length : 0; | 242 dir == Dir.FORWARD ? this.getText(newNode).length : 0; |
| 243 break; | 243 break; |
| 244 case Movement.DIRECTIONAL: | 244 case Movement.DIRECTIONAL: |
| 245 newNode = AutomationUtil.findNodeUntil( | 245 newNode = AutomationUtil.findNodeUntil( |
| 246 newNode, dir, AutomationPredicate.linebreak); | 246 newNode, dir, AutomationPredicate.linebreak); |
| 247 break; | 247 break; |
| 248 } | 248 } |
| 249 break; | 249 break; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 | 281 |
| 282 cursors.WrappingCursor.prototype = { | 282 cursors.WrappingCursor.prototype = { |
| 283 __proto__: cursors.Cursor.prototype, | 283 __proto__: cursors.Cursor.prototype, |
| 284 | 284 |
| 285 /** @override */ | 285 /** @override */ |
| 286 move: function(unit, movement, dir) { | 286 move: function(unit, movement, dir) { |
| 287 var result = cursors.Cursor.prototype.move.call(this, unit, movement, dir); | 287 var result = cursors.Cursor.prototype.move.call(this, unit, movement, dir); |
| 288 if (movement == Movement.DIRECTIONAL && result.equals(this)) { | 288 if (movement == Movement.DIRECTIONAL && result.equals(this)) { |
| 289 var pred = unit == Unit.DOM_NODE ? | 289 var pred = unit == Unit.DOM_NODE ? |
| 290 AutomationPredicate.leafDomNode : AutomationPredicate.leaf; | 290 AutomationPredicate.leafDomNode : AutomationPredicate.leaf; |
| 291 var root = this.node; | 291 var endpoint = this.node; |
| 292 while (!AutomationUtil.isTraversalRoot(root) && root.parent) | 292 while (!AutomationUtil.isTraversalRoot(endpoint) && endpoint.parent) |
| 293 root = root.parent; | 293 endpoint = endpoint.parent; |
| 294 var wrappedNode = AutomationUtil.findNodePre(root, dir, pred); | 294 if (dir == Dir.BACKWARD) { |
| 295 while (endpoint.lastChild) |
| 296 endpoint = endpoint.lastChild; |
| 297 } |
| 298 var wrappedNode = endpoint; |
| 299 if (!pred(wrappedNode)) |
| 300 wrappedNode = AutomationUtil.findNextNode(endpoint, dir, pred); |
| 301 |
| 295 if (wrappedNode) { | 302 if (wrappedNode) { |
| 296 cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.WRAP); | 303 cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.WRAP); |
| 297 return new cursors.WrappingCursor(wrappedNode, cursors.NODE_INDEX); | 304 return new cursors.WrappingCursor(wrappedNode, cursors.NODE_INDEX); |
| 298 } | 305 } |
| 299 } | 306 } |
| 300 return new cursors.WrappingCursor(result.node, result.index); | 307 return new cursors.WrappingCursor(result.node, result.index); |
| 301 } | 308 } |
| 302 }; | 309 }; |
| 303 | 310 |
| 304 /** | 311 /** |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 * Returns true if this range has either cursor end on web content. | 453 * Returns true if this range has either cursor end on web content. |
| 447 * @return {boolean} | 454 * @return {boolean} |
| 448 */ | 455 */ |
| 449 isWebRange: function() { | 456 isWebRange: function() { |
| 450 return this.start.node.root.role != RoleType.desktop || | 457 return this.start.node.root.role != RoleType.desktop || |
| 451 this.end.node.root.role != RoleType.desktop; | 458 this.end.node.root.role != RoleType.desktop; |
| 452 } | 459 } |
| 453 }; | 460 }; |
| 454 | 461 |
| 455 }); // goog.scope | 462 }); // goog.scope |
| OLD | NEW |