diff --git a/src/modal/modal.js b/src/modal/modal.js index 2aa3988..2f87ee7 100644 --- a/src/modal/modal.js +++ b/src/modal/modal.js @@ -253,18 +253,29 @@ angular.module('mm.foundation.modal', ['mm.foundation.transition']) }; $modalStack.close = function (modalInstance, result) { - var modalWindow = openedWindows.get(modalInstance).value; - if (modalWindow) { + var modalWindow = openedWindows.get(modalInstance).value, + scope = modalWindow.modalScope, + evt = scope.$broadcast('close:modal:fndtn', modalWindow); + + if (modalWindow && !evt.defaultPrevented) { modalWindow.deferred.resolve(result); removeModalWindow(modalInstance); + + scope.$broadcast('closed:modal:fndtn', modalWindow); } }; $modalStack.dismiss = function (modalInstance, reason) { - var modalWindow = openedWindows.get(modalInstance).value; - if (modalWindow) { + + var modalWindow = openedWindows.get(modalInstance).value, + scope = modalWindow.modalScope, + evt = scope.$broadcast('dismiss:modal:fndtn', modalWindow); + + if (modalWindow && !evt.defaultPrevented) { modalWindow.deferred.reject(reason); removeModalWindow(modalInstance); + + scope.$broadcast('dismissed:modal:fndtn', modalWindow); } }; diff --git a/src/modal/test/modal.spec.js b/src/modal/test/modal.spec.js index 8473b86..b4aa9db 100644 --- a/src/modal/test/modal.spec.js +++ b/src/modal/test/modal.spec.js @@ -511,4 +511,33 @@ describe('$modal', function () { expect(body).not.toHaveClass('modal-open'); }); }); + + describe('events', function () { + it('should not close modal if defaultPrevented', function () { + var TestCtrl = function($scope, $modalInstance) { + $scope.$on('close:modal:fndtn', function (event) { + event.preventDefault(); + }); + }; + + var modal = open({template: '