diff --git a/src/modal/modal.js b/src/modal/modal.js index 662765d357..5a5ac32bb6 100644 --- a/src/modal/modal.js +++ b/src/modal/modal.js @@ -234,6 +234,8 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) $modalStack.open = function (modalInstance, modal) { + var modalOpener = $document[0].activeElement; + openedWindows.add(modalInstance, { deferred: modal.deferred, modalScope: modal.scope, @@ -264,6 +266,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) var modalDomEl = $compile(angularDomEl)(modal.scope); openedWindows.top().value.modalDomEl = modalDomEl; + openedWindows.top().value.modalOpener = modalOpener; body.append(modalDomEl); body.addClass(OPENED_MODAL_CLASS); }; @@ -273,6 +276,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) if (modalWindow) { modalWindow.value.deferred.resolve(result); removeModalWindow(modalInstance); + modalWindow.value.modalOpener.focus(); } }; @@ -281,6 +285,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) if (modalWindow) { modalWindow.value.deferred.reject(reason); removeModalWindow(modalInstance); + modalWindow.value.modalOpener.focus(); } }; diff --git a/src/modal/test/modal.spec.js b/src/modal/test/modal.spec.js index d3424c06ed..65dcde625f 100644 --- a/src/modal/test/modal.spec.js +++ b/src/modal/test/modal.spec.js @@ -207,6 +207,28 @@ describe('$modal', function () { expect($document).toHaveModalsOpen(0); }); + it('should return to the element which had focus before the dialog is invoked', function () { + var link = 'Link'; + var element = angular.element(link); + angular.element(document.body).append(element); + element.focus(); + expect(document.activeElement.tagName).toBe('A'); + + var modal = open({template: '