Chromium Code Reviews| Index: chrome/browser/resources/settings/controls/controlled_radio_button.js |
| diff --git a/chrome/browser/resources/settings/controls/controlled_radio_button.js b/chrome/browser/resources/settings/controls/controlled_radio_button.js |
| index 13a021fa93deee4d72395a8993902a75b179fab4..14312aba53cff1dc671aa25cd786cf2711cee28e 100644 |
| --- a/chrome/browser/resources/settings/controls/controlled_radio_button.js |
| +++ b/chrome/browser/resources/settings/controls/controlled_radio_button.js |
| @@ -5,10 +5,23 @@ |
| Polymer({ |
| is: 'controlled-radio-button', |
| - behaviors: [PrefControlBehavior], |
| + behaviors: [ |
| + PrefControlBehavior, |
| + Polymer.IronA11yKeysBehavior, |
| + ], |
| properties: { |
| - label: String, |
| + checked: { |
| + type: Boolean, |
| + reflectToAttribute: true, |
| + observer: 'checkedChanged_', |
| + notify: true, |
| + }, |
| + |
| + label: { |
| + type: String, |
| + value: '', |
|
hcarmona
2017/04/13 01:18:37
Nit: add a comment that this is needed to avoid a
Dan Beam
2017/04/13 01:22:58
Done.
|
| + }, |
| name: { |
| type: String, |
| @@ -21,10 +34,33 @@ Polymer({ |
| computed: 'computeControlled_(pref.*)', |
| reflectToAttribute: true, |
| }, |
| + |
| + pressed_: Boolean, |
|
dpapad
2017/04/13 00:35:09
@private
Dan Beam
2017/04/13 00:59:01
Done.
|
| + }, |
| + |
| + hostAttributes: { |
| + role: 'radio', |
| + tabindex: 0, |
| }, |
| listeners: { |
| - 'focus': 'onFocus_', |
| + 'blur': 'updatePressed_', |
| + 'down': 'updatePressed_', |
| + 'focus': 'updatePressed_', |
| + 'tap': 'onTap_', |
| + 'up': 'updatePressed_', |
| + }, |
| + |
| + keyBindings: { |
| + // This is mainly for screenreaders, which can perform actions on things |
| + // that aren't focused (only focused things get synthetic click/tap events). |
| + 'enter:keyup': 'click', |
| + 'space:keyup': 'click', |
| + }, |
| + |
| + /** @private */ |
| + checkedChanged_: function() { |
| + this.setAttribute('aria-checked', this.checked ? 'true' : 'false'); |
|
dpapad
2017/04/13 00:35:09
Nit (optional): The following should be equivalent
Dan Beam
2017/04/13 00:59:01
so is !!this.checked, i just figured this is less
|
| }, |
| /** |
| @@ -56,8 +92,17 @@ Polymer({ |
| e.stopPropagation(); |
| }, |
| - /** Focuses the internal radio button when the row is selected. */ |
| - onFocus_: function() { |
| - this.$.radioButton.focus(); |
| + /** @private */ |
| + onTap_: function() { |
| + if (!this.controlled_) |
| + this.checked = true; |
| + }, |
| + |
| + /** |
| + * @param {!Event} e |
| + * @private |
| + */ |
| + updatePressed_: function(e) { |
| + this.pressed_ = ['down', 'focus'].indexOf(e.type) >= 0; |
|
dpapad
2017/04/13 00:35:09
Nit (optional): Maybe use includes() instead of in
Dan Beam
2017/04/13 01:22:58
Done.
|
| }, |
| }); |