structural_line_walker.js revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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 A JavaScript class for walking lines.
7 */
8
9
10goog.provide('cvox.StructuralLineWalker');
11
12goog.require('cvox.AbstractSelectionWalker');
13goog.require('cvox.TraverseContent');
14
15/**
16 * @constructor
17 * @extends {cvox.AbstractSelectionWalker}
18 */
19cvox.StructuralLineWalker = function() {
20  goog.base(this);
21  this.grain = cvox.TraverseContent.kLine;
22};
23goog.inherits(cvox.StructuralLineWalker, cvox.AbstractSelectionWalker);
24
25
26/**
27 * @override
28 */
29cvox.StructuralLineWalker.prototype.getGranularityMsg = function() {
30  return cvox.ChromeVox.msgs.getMsg('structural_line');
31};
32
33
34/**
35 * @override
36 */
37cvox.StructuralLineWalker.prototype.getDescription = function(prevSel, sel) {
38  var desc = goog.base(this, 'getDescription', prevSel, sel);
39  desc[0].text = cvox.DomUtil.getPrefixText(
40      sel.absStart().node, sel.absStart().index) + desc[0].text;
41  return desc;
42};
43
44
45/**
46 * @override
47 */
48cvox.StructuralLineWalker.prototype.getBraille = function(prevSel, sel) {
49  var braille = goog.base(this, 'getBraille', prevSel, sel);
50
51  var objNode = this.objWalker_.sync(sel).absStart().node;
52  var node = sel.absStart().node;
53  var prevNode = prevSel.absEnd().node;
54
55  // Show only the visible line in braille for DOM ranges. This overrides any
56  // labels computed for the node.
57  //
58  // <textarea> needs to be treated specially. It may have TextNode children,
59  // but these reflect the initial value of the node only, and are not updated
60  // as content changes.
61  var name = undefined;
62  if (!sel.start.equals(sel.end) &&
63      !cvox.DomPredicates.editTextPredicate([objNode])) {
64    var prefix =
65        cvox.DomUtil.getPrefixText(sel.absStart().node, sel.absStart().index);
66    name = prefix + sel.getText();
67  }
68  var spannable =
69      cvox.BrailleUtil.getTemplated(prevNode, objNode, {name: name});
70  spannable.setSpan(objNode, 0, spannable.getLength());
71  braille.text = spannable;
72
73  // Remove any selections.
74  braille.startIndex = 0;
75  braille.endIndex = 0;
76  return braille;
77};
78