From b058c018eba059811f0c26074b813b843cfb5cb7 Mon Sep 17 00:00:00 2001 From: Chris Rebert Date: Mon, 19 May 2014 01:25:52 -0700 Subject: Hopefully a fix for #12364 * register the callback before invoking the toggling * listen for `hidden` instead of `hide` * account for the possibility of the associated `show` event being preventDefault-ed Adds relevant unit tests. --- js/tests/unit/modal.js | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'js/tests') diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js index c1dc895e3..6db29ebb2 100644 --- a/js/tests/unit/modal.js +++ b/js/tests/unit/modal.js @@ -201,4 +201,55 @@ $(function () { div.remove() }) + + test('should restore focus to toggling element when modal is hidden after having been opened via data-api', function () { + stop() + $.support.transition = false + var toggleBtn = $('').appendTo('#qunit-fixture') + var div = $('') + div + .on('hidden.bs.modal', function () { + window.setTimeout(function () { // give the focus restoration callback a chance to run + equal(document.activeElement, toggleBtn[0], 'toggling element is once again focused') + div.remove() + toggleBtn.remove() + start() + }, 0) + }) + .on('shown.bs.modal', function () { + $('#close').click() + }) + .appendTo('#qunit-fixture') + toggleBtn.click() + }) + + test('should not restore focus to toggling element if the associated show event gets prevented', function () { + stop() + $.support.transition = false + var toggleBtn = $('').appendTo('#qunit-fixture') + var otherBtn = $('').appendTo('#qunit-fixture') + var div = $('') + div + .one('show.bs.modal', function (e) { + e.preventDefault() + otherBtn.focus() + window.setTimeout(function () { // give the focus event from the previous line a chance to run + div.bootstrapModal('show') + }, 0) + }) + .on('hidden.bs.modal', function () { + window.setTimeout(function () { // give the focus restoration callback a chance to run (except it shouldn't run in this case) + equal(document.activeElement, otherBtn[0], 'show was prevented, so focus should not have been restored to toggling element') + div.remove() + toggleBtn.remove() + otherBtn.remove() + start() + }, 0) + }) + .on('shown.bs.modal', function () { + $('#close').click() + }) + .appendTo('#qunit-fixture') + toggleBtn.click() + }) }) -- cgit v1.2.3