|
1 |
| -angular.module('ui.bootstrap.modal', []) |
| 1 | +angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) |
2 | 2 |
|
3 | 3 | /**
|
4 | 4 | * A helper, internal data structure that acts as a map but also allows getting / removing
|
@@ -106,8 +106,8 @@ angular.module('ui.bootstrap.modal', [])
|
106 | 106 | };
|
107 | 107 | }])
|
108 | 108 |
|
109 |
| - .factory('$modalStack', ['$document', '$compile', '$rootScope', '$$stackedMap', |
110 |
| - function ($document, $compile, $rootScope, $$stackedMap) { |
| 109 | + .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap', |
| 110 | + function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) { |
111 | 111 |
|
112 | 112 | var OPENED_MODAL_CLASS = 'modal-open';
|
113 | 113 |
|
@@ -140,17 +140,36 @@ angular.module('ui.bootstrap.modal', [])
|
140 | 140 | openedWindows.remove(modalInstance);
|
141 | 141 |
|
142 | 142 | //remove window DOM element
|
143 |
| - modalWindow.modalDomEl.remove(); |
| 143 | + removeAfterAnimating(modalWindow.modalDomEl, modalWindow.modalScope); |
144 | 144 | body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
|
145 | 145 |
|
146 | 146 | //remove backdrop if no longer needed
|
147 | 147 | if (backdropDomEl && backdropIndex() == -1) {
|
148 |
| - backdropDomEl.remove(); |
| 148 | + removeAfterAnimating(backdropDomEl, backdropScope); |
149 | 149 | backdropDomEl = undefined;
|
150 | 150 | }
|
| 151 | + } |
151 | 152 |
|
152 |
| - //destroy scope |
153 |
| - modalWindow.modalScope.$destroy(); |
| 153 | + function removeAfterAnimating(domEl, scope) { |
| 154 | + // Closing animation |
| 155 | + $timeout(function () { |
| 156 | + scope.animate = false; |
| 157 | + }); |
| 158 | + |
| 159 | + var transitionEndEventName = $transition.transitionEndEventName; |
| 160 | + if (transitionEndEventName) { |
| 161 | + // transition out |
| 162 | + var timeout = $timeout(function () { |
| 163 | + domEl.remove(); |
| 164 | + }, 500); |
| 165 | + |
| 166 | + domEl.bind(transitionEndEventName, function () { |
| 167 | + $timeout.cancel(timeout); |
| 168 | + domEl.remove(); |
| 169 | + }); |
| 170 | + } else { |
| 171 | + domEl.remove(); |
| 172 | + } |
154 | 173 | }
|
155 | 174 |
|
156 | 175 | $document.bind('keydown', function (evt) {
|
|
0 commit comments