Home | History | Annotate | Download | only in common
      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
      3 // found in the LICENSE file.
      4 
      5 /**
      6  * @fileoverview Simple class to represent a cursor location in the document.
      7  */
      8 
      9 goog.provide('cvox.Cursor');
     10 
     11 /**
     12  * A class to represent a cursor location in the document,
     13  * like the start position or end position of a selection range.
     14  *
     15  * Later this may be extended to support "virtual text" for an object,
     16  * like the ALT text for an image.
     17  *
     18  * Note: we cache the text of a particular node at the time we
     19  * traverse into it. Later we should add support for dynamically
     20  * reloading it.
     21  * NOTE: Undefined behavior if node is null
     22  * @param {Node} node The DOM node.
     23  * @param {number} index The index of the character within the node.
     24  * @param {string} text The cached text contents of the node.
     25  * @constructor
     26  */
     27 cvox.Cursor = function(node, index, text) {
     28   this.node = node;
     29   this.index = index;
     30   this.text = text;
     31 };
     32 
     33 /**
     34  * @return {!cvox.Cursor} A new cursor pointing to the same location.
     35  */
     36 cvox.Cursor.prototype.clone = function() {
     37   return new cvox.Cursor(this.node, this.index, this.text);
     38 };
     39 
     40 /**
     41  * Modify this cursor to point to the location that another cursor points to.
     42  * @param {!cvox.Cursor} otherCursor The cursor to copy from.
     43  */
     44 cvox.Cursor.prototype.copyFrom = function(otherCursor) {
     45   this.node = otherCursor.node;
     46   this.index = otherCursor.index;
     47   this.text = otherCursor.text;
     48 };
     49 
     50 /**
     51  * Check for equality.
     52  * @param {!cvox.Cursor} rhs The cursor to compare against.
     53  * @return {boolean} True if equal.
     54  */
     55 cvox.Cursor.prototype.equals = function(rhs) {
     56   return this.node == rhs.node &&
     57       this.index == rhs.index &&
     58       this.text == rhs.text;
     59 };
     60