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 f19913fb28a39a92d5448ed93be4b16be93317c1..2fc65b4568b006fd38a53339eea87d99a88792d5 100644 |
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js |
@@ -93,6 +93,9 @@ Output.ROLE_INFO_ = { |
checkBox: { |
msgId: 'input_type_checkbox' |
}, |
+ date: { |
+ msgId: 'input_type_date' |
+ }, |
dialog: { |
msgId: 'dialog' |
}, |
@@ -116,6 +119,10 @@ Output.ROLE_INFO_ = { |
radioButton: { |
msgId: 'input_type_radio' |
}, |
+ spinButton: { |
+ msgId: 'aria_role_combobox', |
+ earcon: 'LISTBOX' |
+ }, |
textBox: { |
msgId: 'input_type_text', |
earcon: 'EDITABLE_TEXT' |
@@ -124,6 +131,9 @@ Output.ROLE_INFO_ = { |
msgId: 'input_type_text', |
earcon: 'EDITABLE_TEXT' |
}, |
+ time: { |
+ msgId: 'tag_time' |
+ }, |
toolbar: { |
msgId: 'aria_role_toolbar' |
} |
@@ -156,7 +166,7 @@ Output.STATE_INFO_ = { |
Output.RULES = { |
navigate: { |
'default': { |
- speak: '$name $value $role', |
+ speak: '$name $value $description $help $role', |
braille: '' |
}, |
alert: { |
@@ -165,6 +175,10 @@ Output.RULES = { |
checkBox: { |
speak: '$name $role $checked' |
}, |
+ date: { |
+ enter: '$name $role', |
+ leave: '@exited_container($role)' |
+ }, |
dialog: { |
enter: '$name $role' |
}, |
@@ -207,7 +221,7 @@ Output.RULES = { |
'@describe_radio_unselected($name))' |
}, |
slider: { |
- speak: '@describe_slider($value, $name)' |
+ speak: '@describe_slider($value, $name) $help' |
}, |
staticText: { |
speak: '$value $name' |
@@ -215,6 +229,16 @@ Output.RULES = { |
tab: { |
speak: '@describe_tab($name)' |
}, |
+ textField: { |
+ speak: '$name $value $if(' + |
+ '$textInputType, @input_type_+$textInputType, @input_type_text) ' + |
+ '$earcon(EDITABLE_TEXT)', |
+ braille: '' |
+ }, |
+ time: { |
+ enter: '$name $role', |
+ leave: '@exited_container($role)' |
+ }, |
toolbar: { |
enter: '$name $role' |
}, |
@@ -303,13 +327,26 @@ Output.EventType = { |
Output.prototype = { |
/** |
* Gets the output buffer for speech. |
+ * @param {string=} opt_separator Used to join components of the output. |
* @return {!cvox.Spannable} |
*/ |
- toSpannable: function() { |
+ toSpannable: function(opt_separator) { |
+ opt_separator = opt_separator || ''; |
return this.buffer_.reduce(function(prev, cur) { |
+ if (prev === null) |
+ return cur; |
+ prev.append(opt_separator); |
prev.append(cur); |
return prev; |
- }, new cvox.Spannable()); |
+ }, null); |
+ }, |
+ |
+ /** |
+ * Gets the output buffer for speech with separator '|'. |
+ * @return {!cvox.Spannable} |
+ */ |
+ toSpannableForTest: function() { |
+ return this.toSpannable('|'); |
}, |
/** |
@@ -536,11 +573,11 @@ Output.prototype = { |
this.append_(buff, text, options); |
} else if (token == 'indexInParent') { |
options.annotation.push(token); |
- this.append_(buff, node.indexInParent + 1); |
+ this.append_(buff, String(node.indexInParent + 1)); |
} else if (token == 'parentChildCount') { |
options.annotation.push(token); |
if (node.parent) |
- this.append_(buff, node.parent.children.length); |
+ this.append_(buff, String(node.parent.children.length)); |
} else if (token == 'state') { |
options.annotation.push(token); |
Object.getOwnPropertyNames(node.state).forEach(function(s) { |