Skip to content

Commit

Permalink
focus the desired elemnt on modal dismissal
Browse files Browse the repository at this point in the history
  • Loading branch information
sarbbottam committed Apr 4, 2016
1 parent 515cf77 commit c008f44
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
3 changes: 2 additions & 1 deletion example/common.js
Expand Up @@ -17,7 +17,8 @@ modal = new Modal({
primaryButton: primaryButton,
secondaryButton: secondaryButton,
closeButton: closeButton,
focusableNodeList: focusableNodeList
focusableNodeList: focusableNodeList,
itemToBeFocusedOnModalDismissal: showButton
});

modal.init();
Expand Down
5 changes: 5 additions & 0 deletions src/modal.js
Expand Up @@ -17,6 +17,8 @@ function Modal(config) {
this.focusableNodeList = config.focusableNodeList || null;
this.focusableIndex = -1;

this.itemToBeFocusedOnModalDismissal = config.itemToBeFocusedOnModalDismissal;

css = config.css;

/* istanbul ignore next */
Expand Down Expand Up @@ -71,6 +73,9 @@ Modal.prototype.hide = function() {
this.modalContainer.setAttribute('aria-hidden', 'true');

this.mainContainer.setAttribute('aria-hidden', 'false');
if (this.itemToBeFocusedOnModalDismissal) {
this.itemToBeFocusedOnModalDismissal.focus();
}
};

Modal.prototype.init = function() {
Expand Down
15 changes: 13 additions & 2 deletions test/modal.js
Expand Up @@ -2,7 +2,9 @@

describe('Modal', function() {
var markup = '\
<div id="main"></div> \
<div id="main"> \
<button id="to-be-focused" tabindex="-1">To be focused</button> \
</div> \
<div id="modal" class="modal hide" aria-labelledby="modal-heading" aria-describedby="modal-description" role="dialog"> \
<div class="modal-content v-a-m"> \
<input id="button-close" class="button button-close js-button-close js-focusable" type="button" value="X" aria-label="close modal"> \
Expand Down Expand Up @@ -30,6 +32,7 @@ describe('Modal', function() {
/* containers */
var mainContainer;
var modalContainer;
var itemToBeFocusedOnModalDismissal;
/* buttons */
var primaryButton;
var secondaryButton;
Expand All @@ -47,6 +50,7 @@ describe('Modal', function() {
/* containers */
mainContainer = document.getElementById('main');
modalContainer = document.getElementById('modal');
itemToBeFocusedOnModalDismissal = document.getElementById('to-be-focused');
/* buttons */
primaryButton = modalContainer.querySelector('.js-button-primary');
secondaryButton = modalContainer.querySelector('.js-button-secondary');
Expand All @@ -63,7 +67,8 @@ describe('Modal', function() {
secondaryButton: secondaryButton,
closeButton: closeButton,
primaryFunction: primaryFunction,
secondaryFunction: secondaryFunction
secondaryFunction: secondaryFunction,
itemToBeFocusedOnModalDismissal: itemToBeFocusedOnModalDismissal
});

modal.init();
Expand Down Expand Up @@ -105,6 +110,12 @@ describe('Modal', function() {
assert.isTrue(modalContainer.classList.contains('hide'));
});

it('should focus the itemToBeFocusedOnModalDismissal on modal dismisaal', function() {
modal.show();
event.triggerKeydownEvent(document.body, 27);
assert.equal(document.activeElement, itemToBeFocusedOnModalDismissal);
});

});

describe('primary button', function() {
Expand Down

0 comments on commit c008f44

Please sign in to comment.