Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4270)

Unified Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js

Issue 730053004: Add speech output rules for most of the remaining native views for ChromeVox Next. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@space_command
Patch Set: Rebase Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ba670fbcd8fc2c1bd8114368964a43e8227c7c06..4b1ef2fe82f206670db4c9b1912a307c335bc1da 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
@@ -44,11 +44,20 @@ var Dir = AutomationUtil.Dir;
* @constructor
*/
Output = function(range, prevRange, type) {
- // TODO(dtseng): Include brailleBuffer once we add rules for braille.
+ // TODO(dtseng): Include braille specific rules.
/** @type {!cvox.Spannable} */
this.buffer_ = new cvox.Spannable();
+ /** @type {!cvox.Spannable} */
+ this.brailleBuffer_ = new cvox.Spannable();
+ /** @type {!Array.<Object>} */
this.locations_ = [];
+ /**
+ * Current global options.
+ * @type {{speech: boolean, braille: boolean, location: boolean}}
+ */
+ this.formatOptions_ = {speech: true, braille: false, location: true};
+
this.render_(range, prevRange, type);
this.handleSpeech();
this.handleBraille();
@@ -71,6 +80,9 @@ Output.RULES = {
speak: '$name $role $value',
braille: ''
},
+ alert: {
+ speak: '@aria_role_alert $name @earcon(ALERT_NONMODAL)'
+ },
button: {
speak: '$name $earcon(BUTTON, @tag_button)'
},
@@ -99,22 +111,44 @@ Output.RULES = {
listItem: {
enter: '$role'
},
+ menuItem: {
+ speak: '$or($haspopup, @describe_menu_item_with_submenu($name), ' +
+ '@describe_menu_item($name))'
+ },
+ menuListOption: {
+ speak: '$name $value @aria_role_menuitem ' +
+ '@describe_index($indexInParent, $parentChildCount)'
+ },
paragraph: {
speak: '$value'
},
+ popUpButton: {
+ speak: '$value $name @tag_button @aria_has_popup $earcon(LISTBOX)'
+ },
+ radioButton: {
+ speak: '$or($checked, @describe_radio_selected($name), ' +
+ '@describe_radio_unselected($name)) ' +
+ '$or($checked, ' +
+ '$earcon(CHECK_ON, @input_type_radio), ' +
+ '$earcon(CHECK_OFF, @input_type_radio))'
+ },
+ slider: {
+ speak: '@describe_slider($value, $name)'
+ },
staticText: {
speak: '$value'
},
textBox: {
speak: '$name $value $earcon(EDITABLE_TEXT, @input_type_text)'
},
+ tab: {
+ speak: '@describe_tab($name)'
+ },
textField: {
speak: '$name $value $earcon(EDITABLE_TEXT, @input_type_text)'
},
window: {
- enter: '$name $role= $earcon(OBJECT_OPEN)'
- // TODO(dtseng): A leave event is not reliable because views does not fire
- // focus events after closing windows.
+ speak: '@describe_window($name) $earcon(OBJECT_OPEN)'
}
},
menuStart: {
@@ -195,7 +229,7 @@ Output.prototype = {
*/
handleBraille: function() {
cvox.ChromeVox.braille.write(
- cvox.NavBraille.fromText(this.buffer_.toString()));
+ cvox.NavBraille.fromText(this.brailleBuffer_.toString()));
},
/**
@@ -215,12 +249,21 @@ Output.prototype = {
*/
render_: function(range, prevRange, type) {
var buff = new cvox.Spannable();
+ var brailleBuff = new cvox.Spannable();
if (range.isSubNode())
this.subNode_(range, prevRange, type, buff);
else
this.range_(range, prevRange, type, buff);
+ this.formatOptions_.braille = true;
+ this.formatOptions_.location = false;
+ if (range.isSubNode())
+ this.subNode_(range, prevRange, type, brailleBuff);
+ else
+ this.range_(range, prevRange, type, brailleBuff);
+
this.buffer_ = buff;
+ this.brailleBuffer_ = brailleBuff;
},
/**
@@ -278,6 +321,11 @@ Output.prototype = {
if (token == 'role') {
// Non-localized role and state obtained by default.
this.addToSpannable_(buff, node.role, options);
+ } else if (token == 'indexInParent') {
+ this.addToSpannable_(buff, node.indexInParent + 1);
+ } else if (token == 'parentChildCount') {
+ if (node.parent())
+ this.addToSpannable_(buff, node.parent().children().length);
} else if (token == 'state') {
Object.getOwnPropertyNames(node.state).forEach(function(s) {
this.addToSpannable_(buff, s, options);
@@ -317,15 +365,17 @@ Output.prototype = {
console.error('Unexpected value: ' + arg);
return;
}
- arg = arg.slice(1);
- if (!node.attributes[arg])
- msgArgs.push('');
- else
- msgArgs.push(node.attributes[arg]);
+ var msgBuff = new cvox.Spannable();
+ this.format_(node, arg, msgBuff);
+ msgArgs.push(msgBuff.toString());
curMsg = curMsg.nextSibling;
}
+ var msg = cvox.ChromeVox.msgs.getMsg(msgId, msgArgs);
+ try {
+ if (this.formatOptions_.braille)
+ msg = cvox.ChromeVox.msgs.getMsg(msgId + '_brl', msgArgs) || msg;
+ } catch(e) {}
- var msg = cvox.ChromeVox.msgs.getMsg(msgId, msgArgs);
if (msg) {
this.addToSpannable_(buff, msg, options);
}
@@ -351,7 +401,8 @@ Output.prototype = {
var buff = new cvox.Spannable();
this.ancestry_(node, prevNode, type, buff);
this.node_(node, prevNode, type, buff);
- this.locations_.push(node.location);
+ if (this.formatOptions_.location)
+ this.locations_.push(node.location);
return buff;
}.bind(this);
« no previous file with comments | « chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698