Skip to content

Commit 31baa81

Browse files
authored
issue/2950 Switch from disabled to aria-disabled for ButtonsView (#2951)
1 parent fc349b0 commit 31baa81

File tree

4 files changed

+25
-15
lines changed

4 files changed

+25
-15
lines changed

js/a11y.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,12 @@ define([
235235
}
236236
isEnabled = isEnabled === undefined ? true : isEnabled;
237237
if (!isEnabled) {
238-
$elements.attr('disabled', 'disabled').addClass('is-disabled');
238+
$elements.attr({
239+
tabindex: '-1',
240+
'aria-disabled': 'true'
241+
}).addClass('is-disabled');
239242
} else {
240-
$elements.removeAttr('disabled').removeClass('is-disabled');
243+
$elements.removeAttr('aria-disabled tabindex').removeClass('is-disabled');
241244
}
242245
return this;
243246
},

js/a11y/browserFocus.js

+14-7
Original file line numberDiff line numberDiff line change
@@ -59,22 +59,29 @@ define([
5959
/**
6060
* Force focus when clicked on a tabbable element,
6161
* making sure `document.activeElement` is updated.
62+
* Stop event handling on aria-disabled elements.
6263
*
6364
* @param {JQuery.Event} event
6465
*/
6566
_onClick: function(event) {
6667
var config = Adapt.a11y.config;
67-
if (!config._isEnabled || !config._options._isFocusOnClickEnabled) {
68+
if (!config._isEnabled) {
6869
return;
6970
}
7071
var $element = $(event.target);
71-
var $stack = $().add($element).add($element.parents());
72-
var $focusable = $stack.filter(config._options._tabbableElements);
73-
if (!$focusable.length) {
74-
return;
72+
if (config._options._isFocusOnClickEnabled) {
73+
var $stack = $().add($element).add($element.parents());
74+
var $focusable = $stack.filter(config._options._tabbableElements);
75+
if (!$focusable.length) {
76+
return;
77+
}
78+
// Force focus for screen reader enter / space press
79+
$focusable[0].focus();
80+
}
81+
if ($element.is('[aria-disabled=true]')) {
82+
event.preventDefault();
83+
event.stopImmediatePropagation();
7584
}
76-
// Force focus for screen reader enter / space press
77-
$focusable[0].focus();
7885
}
7986

8087
});

js/views/buttonsView.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ define([
5454
this.$('.js-btn-marking').removeClass('is-incorrect is-correct').addClass('u-display-none');
5555
this.$el.removeClass('is-submitted');
5656
this.model.set('feedbackMessage', undefined);
57-
Adapt.a11y.toggleAccessibleEnabled(this.$('.js-btn-feedback'), false);
57+
Adapt.a11y.toggleEnabled(this.$('.js-btn-feedback'), false);
5858
} else {
5959
this.$el.addClass('is-submitted');
6060
}
@@ -73,10 +73,10 @@ define([
7373
onFeedbackMessageChanged: function(model, changedAttribute) {
7474
if (changedAttribute && this.model.get('_canShowFeedback')) {
7575
// enable feedback button
76-
Adapt.a11y.toggleAccessibleEnabled(this.$('.js-btn-feedback'), true);
76+
Adapt.a11y.toggleEnabled(this.$('.js-btn-feedback'), true);
7777
} else {
7878
// disable feedback button
79-
Adapt.a11y.toggleAccessibleEnabled(this.$('.js-btn-feedback'), false);
79+
Adapt.a11y.toggleEnabled(this.$('.js-btn-feedback'), false);
8080
}
8181
},
8282

@@ -94,7 +94,7 @@ define([
9494
if (changedAttribute === BUTTON_STATE.CORRECT || changedAttribute === BUTTON_STATE.INCORRECT) {
9595
// Both 'correct' and 'incorrect' states have no model answer, so disable the submit button
9696

97-
Adapt.a11y.toggleAccessibleEnabled($buttonsAction, false);
97+
Adapt.a11y.toggleEnabled($buttonsAction, false);
9898

9999
} else {
100100

@@ -104,7 +104,7 @@ define([
104104

105105
// Enable the button, make accessible and update aria labels and text
106106

107-
Adapt.a11y.toggleAccessibleEnabled($buttonsAction, this.model.get('_canSubmit'));
107+
Adapt.a11y.toggleEnabled($buttonsAction, this.model.get('_canSubmit'));
108108
$buttonsAction.html(buttonText).attr('aria-label', ariaLabel);
109109

110110
// Make model answer button inaccessible (but still enabled) for visual users due to

templates/buttons.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
{{{_buttons._submit.buttonText}}}
99
</button>
1010

11-
<button class="btn-text btn__feedback js-btn-feedback" aria-label="{{_buttons._showFeedback.ariaLabel}}" disabled="true">
11+
<button class="btn-text btn__feedback js-btn-feedback is-disabled" aria-label="{{_buttons._showFeedback.ariaLabel}}" aria-disabled="true">
1212
{{{_buttons._showFeedback.buttonText}}}
1313
</button>
1414

0 commit comments

Comments
 (0)