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