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 A utility class for general braille functionality. | 6 * @fileoverview A utility class for general braille functionality. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 goog.provide('cvox.BrailleUtil'); | 10 goog.provide('cvox.BrailleUtil'); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 * n: replaced with braille name. | 51 * n: replaced with braille name. |
52 * r: replaced with braille role. | 52 * r: replaced with braille role. |
53 * s: replaced with braille state. | 53 * s: replaced with braille state. |
54 * c: replaced with braille container role; this potentially returns whitespace, | 54 * c: replaced with braille container role; this potentially returns whitespace, |
55 * so place at the beginning or end of templates for trimming. | 55 * so place at the beginning or end of templates for trimming. |
56 * v: replaced with braille value. | 56 * v: replaced with braille value. |
57 * @type {Object<string>} | 57 * @type {Object<string>} |
58 */ | 58 */ |
59 cvox.BrailleUtil.TEMPLATE = { | 59 cvox.BrailleUtil.TEMPLATE = { |
60 'base': 'c n v r s', | 60 'base': 'c n v r s', |
61 'aria_role_alert': 'r: n', | 61 'role_alert': 'r: n', |
62 'aria_role_button': 'n r s', | 62 'role_button': 'n r s', |
63 'aria_role_checkbox': 'n r s', | 63 'role_checkbox': 'n r s', |
64 'aria_role_menuitemcheckbox': 'n r s', | 64 'role_menuitemcheckbox': 'n r s', |
65 'aria_role_menuitemradio': 'n r s', | 65 'role_menuitemradio': 'n r s', |
66 'aria_role_radio': 'n r s', | 66 'role_radio': 'n r s', |
67 'aria_role_textbox': 'n: v r s', | 67 'role_textbox': 'n: v r s', |
68 'input_type_button': 'n r s', | |
69 'input_type_checkbox': 'n r s', | |
70 'input_type_email': 'n: v r s', | 68 'input_type_email': 'n: v r s', |
71 'input_type_number': 'n: v r s', | 69 'input_type_number': 'n: v r s', |
72 'input_type_password': 'n: v r s', | 70 'input_type_password': 'n: v r s', |
73 'input_type_radio': 'n r s', | |
74 'input_type_search': 'n: v r s', | 71 'input_type_search': 'n: v r s', |
75 'input_type_submit': 'n r s', | |
76 'input_type_text': 'n: v r s', | 72 'input_type_text': 'n: v r s', |
77 'input_type_tel': 'n: v r s', | |
78 'input_type_url': 'n: v r s', | 73 'input_type_url': 'n: v r s', |
79 'tag_button': 'n r s', | |
80 'tag_textarea': 'n: v r s' | 74 'tag_textarea': 'n: v r s' |
81 }; | 75 }; |
82 | 76 |
83 | 77 |
84 /** | 78 /** |
85 * Gets the braille name for a node. | 79 * Gets the braille name for a node. |
86 * See DomUtil for a more precise definition of 'name'. | 80 * See DomUtil for a more precise definition of 'name'. |
87 * Additionally, whitespace is trimmed. | 81 * Additionally, whitespace is trimmed. |
88 * @param {Node} node The node. | 82 * @param {Node} node The node. |
89 * @return {string} The string representation. | 83 * @return {string} The string representation. |
(...skipping 14 matching lines...) Expand all Loading... |
104 */ | 98 */ |
105 cvox.BrailleUtil.getRoleMsg = function(node) { | 99 cvox.BrailleUtil.getRoleMsg = function(node) { |
106 if (!node) { | 100 if (!node) { |
107 return ''; | 101 return ''; |
108 } | 102 } |
109 var roleMsg = cvox.DomUtil.getRoleMsg(node, cvox.VERBOSITY_VERBOSE); | 103 var roleMsg = cvox.DomUtil.getRoleMsg(node, cvox.VERBOSITY_VERBOSE); |
110 if (roleMsg) { | 104 if (roleMsg) { |
111 roleMsg = cvox.DomUtil.collapseWhitespace(roleMsg); | 105 roleMsg = cvox.DomUtil.collapseWhitespace(roleMsg); |
112 } | 106 } |
113 if (roleMsg && (roleMsg.length > 0)) { | 107 if (roleMsg && (roleMsg.length > 0)) { |
114 if (cvox.ChromeVox.msgs.getMsg(roleMsg + '_brl')) { | 108 if (Msgs.getMsg(roleMsg + '_brl')) { |
115 roleMsg += '_brl'; | 109 roleMsg += '_brl'; |
116 } | 110 } |
117 } | 111 } |
118 return roleMsg; | 112 return roleMsg; |
119 }; | 113 }; |
120 | 114 |
121 | 115 |
122 /** | 116 /** |
123 * Transforms a {@code cvox.NodeState} list of state messages to the | 117 * Transforms a {@code cvox.NodeState} list of state messages to the |
124 * corresponding messages for braille and expands them into a localized | 118 * corresponding messages for braille and expands them into a localized |
125 * string suitable for output on a braille display. | 119 * string suitable for output on a braille display. |
126 * @param {cvox.NodeState} stateMsgs The states to expand. The content of this | 120 * @param {cvox.NodeState} stateMsgs The states to expand. The content of this |
127 * array is modified. | 121 * array is modified. |
128 * @return {string} The string representation. | 122 * @return {string} The string representation. |
129 * @private | 123 * @private |
130 */ | 124 */ |
131 cvox.BrailleUtil.expandStateMsgs_ = function(stateMsgs) { | 125 cvox.BrailleUtil.expandStateMsgs_ = function(stateMsgs) { |
132 stateMsgs.forEach(function(state) { | 126 stateMsgs.forEach(function(state) { |
133 // Check to see if a variant of the message with '_brl' exists, | 127 // Check to see if a variant of the message with '_brl' exists, |
134 // and use it if so. | 128 // and use it if so. |
135 // | 129 // |
136 // Note: many messages are templatized, and if we don't pass any | 130 // Note: many messages are templatized, and if we don't pass any |
137 // argument to substitute, getMsg might throw an error if the | 131 // argument to substitute, getMsg might throw an error if the |
138 // resulting string is empty. To avoid this, we pass a dummy | 132 // resulting string is empty. To avoid this, we pass a dummy |
139 // substitution string array here. | 133 // substitution string array here. |
140 var dummySubs = ['dummy', 'dummy', 'dummy']; | 134 var dummySubs = ['dummy', 'dummy', 'dummy']; |
141 if (cvox.ChromeVox.msgs.getMsg(state[0] + '_brl', dummySubs)) { | 135 if (Msgs.getMsg(state[0] + '_brl', dummySubs)) { |
142 state[0] += '_brl'; | 136 state[0] += '_brl'; |
143 } | 137 } |
144 }); | 138 }); |
145 return cvox.NodeStateUtil.expand(stateMsgs); | 139 return cvox.NodeStateUtil.expand(stateMsgs); |
146 }; | 140 }; |
147 | 141 |
148 | 142 |
149 /** | 143 /** |
150 * Gets the braille container role of a node. | 144 * Gets the braille container role of a node. |
151 * @param {Node} prev The previous node in navigation. | 145 * @param {Node} prev The previous node in navigation. |
152 * @param {Node} node The node. | 146 * @param {Node} node The node. |
153 * @return {string} The string representation. | 147 * @return {string} The string representation. |
154 */ | 148 */ |
155 cvox.BrailleUtil.getContainer = function(prev, node) { | 149 cvox.BrailleUtil.getContainer = function(prev, node) { |
156 if (!prev || !node) { | 150 if (!prev || !node) { |
157 return ''; | 151 return ''; |
158 } | 152 } |
159 var ancestors = cvox.DomUtil.getUniqueAncestors(prev, node); | 153 var ancestors = cvox.DomUtil.getUniqueAncestors(prev, node); |
160 for (var i = 0, container; container = ancestors[i]; i++) { | 154 for (var i = 0, container; container = ancestors[i]; i++) { |
161 var msg = cvox.BrailleUtil.getRoleMsg(container); | 155 var msg = cvox.BrailleUtil.getRoleMsg(container); |
162 if (msg && cvox.BrailleUtil.CONTAINER.indexOf(msg) != -1) { | 156 if (msg && cvox.BrailleUtil.CONTAINER.indexOf(msg) != -1) { |
163 return cvox.ChromeVox.msgs.getMsg(msg); | 157 return Msgs.getMsg(msg); |
164 } | 158 } |
165 } | 159 } |
166 return ''; | 160 return ''; |
167 }; | 161 }; |
168 | 162 |
169 | 163 |
170 /** | 164 /** |
171 * Gets the braille value of a node. A {@code cvox.ValueSpan} will be | 165 * Gets the braille value of a node. A {@code cvox.ValueSpan} will be |
172 * attached, along with (possibly) a {@code cvox.ValueSelectionSpan}. | 166 * attached, along with (possibly) a {@code cvox.ValueSelectionSpan}. |
173 * @param {Node} node The node. | 167 * @param {Node} node The node. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 if (!state) { | 237 if (!state) { |
244 if (node) { | 238 if (node) { |
245 state = cvox.BrailleUtil.expandStateMsgs_( | 239 state = cvox.BrailleUtil.expandStateMsgs_( |
246 cvox.DomUtil.getStateMsgs(node, true)); | 240 cvox.DomUtil.getStateMsgs(node, true)); |
247 } else { | 241 } else { |
248 state = ''; | 242 state = ''; |
249 } | 243 } |
250 } | 244 } |
251 var role = opt_override.role || ''; | 245 var role = opt_override.role || ''; |
252 if (!role && roleMsg) { | 246 if (!role && roleMsg) { |
253 role = cvox.ChromeVox.msgs.getMsg(roleMsg + '_brl') || | 247 role = Msgs.getMsg(roleMsg + '_brl') || |
254 cvox.ChromeVox.msgs.getMsg(roleMsg); | 248 Msgs.getMsg(roleMsg); |
255 } | 249 } |
256 | 250 |
257 var templated = new cvox.Spannable(); | 251 var templated = new cvox.Spannable(); |
258 var mapChar = function(c) { | 252 var mapChar = function(c) { |
259 switch (c) { | 253 switch (c) { |
260 case 'n': | 254 case 'n': |
261 return opt_override.name || cvox.BrailleUtil.getName(node); | 255 return opt_override.name || cvox.BrailleUtil.getName(node); |
262 case 'r': | 256 case 'r': |
263 return role; | 257 return role; |
264 case 's': | 258 case 's': |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 * @param {number} number The number to clamp. | 365 * @param {number} number The number to clamp. |
372 * @param {number} min The minimum value to return. | 366 * @param {number} min The minimum value to return. |
373 * @param {number} max The maximum value to return. | 367 * @param {number} max The maximum value to return. |
374 * @return {number} {@code number} if it is within the bounds, or the nearest | 368 * @return {number} {@code number} if it is within the bounds, or the nearest |
375 * number within the bounds otherwise. | 369 * number within the bounds otherwise. |
376 * @private | 370 * @private |
377 */ | 371 */ |
378 cvox.BrailleUtil.clamp_ = function(number, min, max) { | 372 cvox.BrailleUtil.clamp_ = function(number, min, max) { |
379 return Math.min(Math.max(number, min), max); | 373 return Math.min(Math.max(number, min), max); |
380 }; | 374 }; |
OLD | NEW |