Chromium Code Reviews| Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
| diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
| index 45720681c6992464733303b54d62854abd3e0f93..5f6ba2a565e858969d8dc66f5dd57572d47440c3 100644 |
| --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
| +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
| @@ -723,6 +723,21 @@ Output.forceModeForNextSpeechUtterance = function(mode) { |
| Output.forceModeForNextSpeechUtterance_ = mode; |
| }; |
| +/** |
| + * For a given automation property, return true if the the value |
| + * represents something 'truthy', e.g.: for checked: |
|
dmazzoni
2017/03/09 19:33:41
As defined by Colbert? :)
aleventhal
2017/03/09 21:40:49
Actually yeah this is popular in the JS community,
|
| + * 'true'|'mixed' -> true |
| + * 'false'|undefined -> false |
| + */ |
| +Output.isTruthy = function(node, attrib) { |
| + switch(attrib) { |
|
dmazzoni
2017/03/09 19:33:41
nit: just 2 space indent here
aleventhal
2017/03/09 21:40:49
Done.
|
| + case 'checked': |
| + return node.checked && node.checked !== 'false'; |
| + default: |
| + return node[attrib] !== undefined || node.state[attrib]; |
| + } |
| +}; |
| + |
| Output.prototype = { |
| /** |
| * @return {boolean} True if there's any speech that will be output. |
| @@ -1155,20 +1170,16 @@ Output.prototype = { |
| } |
| } else if (token == 'checked') { |
| var msg; |
| - var ariaChecked = node.htmlAttributes['aria-checked']; |
| - switch (ariaChecked) { |
| + switch (node.checked) { |
| case 'mixed': |
| - msg = 'aria_checked_mixed'; |
| + msg = 'checked_mixed'; |
| break; |
| case 'true': |
| - msg = 'aria_checked_true'; |
| - break; |
| - case 'false': |
| - msg = 'aria_checked_false'; |
| + msg = 'checked_true'; |
| break; |
| default: |
| - msg = node.state[StateType.CHECKED] ? |
| - 'aria_checked_true' : 'aria_checked_false'; |
| + msg = 'checked_false'; |
| + break; |
| } |
| this.format_(node, '@' + msg, buff); |
| } else if (token == 'state') { |
| @@ -1300,7 +1311,7 @@ Output.prototype = { |
| if (token == 'if') { |
| var cond = tree.firstChild; |
| var attrib = cond.value.slice(1); |
| - if (node[attrib] !== undefined || node.state[attrib]) |
| + if (Output.isTruthy(node, attrib)) |
| this.format_(node, cond.nextSibling, buff); |
| else |
| this.format_(node, cond.nextSibling.nextSibling, buff); |