Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

feat(modal): Adds defaultContainer to $modalProvider #2942

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions src/modal/modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,16 +159,16 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])

function removeModalWindow(modalInstance) {

var body = $document.find('body').eq(0);
var modalWindow = openedWindows.get(modalInstance).value;
var container = modalWindow.container;

//clean up the stack
openedWindows.remove(modalInstance);

//remove window DOM element
removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() {
modalWindow.modalScope.$destroy();
body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
container.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
checkRemoveBackdrop();
});
}
Expand Down Expand Up @@ -238,10 +238,11 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
deferred: modal.deferred,
modalScope: modal.scope,
backdrop: modal.backdrop,
keyboard: modal.keyboard
keyboard: modal.keyboard,
container: modal.container
});

var body = $document.find('body').eq(0),
var container = modal.container,
currBackdropIndex = backdropIndex();

if (currBackdropIndex >= 0 && !backdropDomEl) {
Expand All @@ -250,7 +251,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
var angularBackgroundDomEl = angular.element('<div modal-backdrop></div>');
angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass);
backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope);
body.append(backdropDomEl);
container.append(backdropDomEl);
}

var angularDomEl = angular.element('<div modal-window></div>');
Expand All @@ -264,8 +265,8 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])

var modalDomEl = $compile(angularDomEl)(modal.scope);
openedWindows.top().value.modalDomEl = modalDomEl;
body.append(modalDomEl);
body.addClass(OPENED_MODAL_CLASS);
container.append(modalDomEl);
container.addClass(OPENED_MODAL_CLASS);
};

$modalStack.close = function (modalInstance, result) {
Expand Down Expand Up @@ -306,6 +307,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
backdrop: true, //can be also false or 'static'
keyboard: true
},
defaultContainer: angular.element(document).find('body').eq(0),
$get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack',
function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) {

Expand Down Expand Up @@ -391,6 +393,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
backdropClass: modalOptions.backdropClass,
windowClass: modalOptions.windowClass,
windowTemplateUrl: modalOptions.windowTemplateUrl,
container: $modalProvider.defaultContainer,
size: modalOptions.size
});

Expand Down
26 changes: 24 additions & 2 deletions src/modal/test/modal.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,17 @@ describe('$modal', function () {

toHaveModalsOpen: function(noOfModals) {

var modalDomEls = this.actual.find('body > div.modal');
var modalDomEls = this.actual === $document ?
this.actual.find('body > div.modal') :
angular.element(this.actual).children('div.modal');
return modalDomEls.length === noOfModals;
},

toHaveBackdrop: function() {

var backdropDomEls = this.actual.find('body > div.modal-backdrop');
var backdropDomEls = this.actual === $document ?
this.actual.find('body > div.modal-backdrop') :
angular.element(this.actual).children('div.modal-backdrop');
this.message = function() {
return 'Expected "' + angular.mock.dump(backdropDomEls) + '" to be a backdrop element".';
};
Expand Down Expand Up @@ -263,6 +267,24 @@ describe('$modal', function () {
});
});

describe('defaultContainer can be changed in a provider', function () {
it('should allow overriding default appendTo in a provider', function () {
var container = $modalProvider.defaultContainer = angular.element('<div>');

var modal = open({template: '<div>Content</div>'});
expect(container).toHaveClass('modal-open');
expect(container).toHaveModalsOpen(1);
expect(container).toHaveBackdrop();

dismiss(modal);
waitForBackdropAnimation();

expect(container).not.toHaveClass('modal-open');
expect(container).toHaveModalsOpen(0);
expect(container).not.toHaveBackdrop();
});
});

describe('option by option', function () {

describe('template and templateUrl', function () {
Expand Down