From a0bf44567ea1e5a3c6eabf3ea3b4facb7bb25a31 Mon Sep 17 00:00:00 2001 From: Rafael Rubem Rossi Souza Guerreiro Date: Tue, 11 Feb 2014 11:13:12 -0200 Subject: [PATCH 1/2] Adding and refactoring methods that concern Loading feature. 'removeLoading' method can be called multiple times on ModalManager. There's no need to verify if modal is actually open or if loading is active. --- js/bootstrap-modalmanager.js | 75 ++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/js/bootstrap-modalmanager.js b/js/bootstrap-modalmanager.js index 94f327b..847b9fa 100644 --- a/js/bootstrap-modalmanager.js +++ b/js/bootstrap-modalmanager.js @@ -298,57 +298,64 @@ this.isLoading = false; }, - removeLoading: function () { - this.$backdropHandle && this.$backdropHandle.remove(); - this.$backdropHandle = null; - this.removeSpinner(); - }, - - loading: function (callback) { + createLoading: function (callback) { callback = callback || function () { }; this.$element - .toggleClass('modal-open', !this.isLoading || this.hasOpenModal()) + .toggleClass('modal-open', this.hasOpenModal()) .toggleClass('page-overflow', $(window).height() < this.$element.height()); - if (!this.isLoading) { - - this.$backdropHandle = this.createBackdrop('fade', this.options.backdropTemplate); + this.$backdropHandle = this.createBackdrop('fade'); - this.$backdropHandle[0].offsetWidth; // force reflow + this.$backdropHandle[0].offsetWidth; // force reflow - var openModals = this.getOpenModals(); + this.$backdropHandle + .css('z-index', getzIndex('backdrop', this.stack.length)) + .addClass('in'); - this.$backdropHandle - .css('z-index', getzIndex('backdrop', openModals.length + 1)) - .addClass('in'); + var $spinner = $(this.options.spinner) + .css('z-index', getzIndex('modal', this.stack.length)) + .appendTo(this.$element) + .addClass('in'); - var $spinner = $(this.options.spinner) - .css('z-index', getzIndex('modal', openModals.length + 1)) - .appendTo(this.$element) - .addClass('in'); + this.$spinner = $(this.createContainer()) + .append($spinner) + .on('click.modalmanager', $.proxy(this.loading, this)); - this.$spinner = $(this.createContainer()) - .append($spinner) - .on('click.modalmanager', $.proxy(this.loading, this)); + this.isLoading = true; - this.isLoading = true; + $.support.transition ? + this.$backdropHandle.one($.support.transition.end, callback) : + callback(); + }, - $.support.transition ? - this.$backdropHandle.one($.support.transition.end, callback) : - callback(); + removeLoading: function () { + this.$element + .removeClass('modal-open') + .toggleClass('page-overflow', $(window).height() < this.$element.height()); - } else if (this.isLoading && this.$backdropHandle) { + if (this.$backdropHandle) this.$backdropHandle.removeClass('in'); - var that = this; - $.support.transition ? - this.$backdropHandle.one($.support.transition.end, function () { that.removeLoading() }) : - that.removeLoading(); + function remove() { + this.$backdropHandle && this.$backdropHandle.remove(); + this.$backdropHandle = null; + this.removeSpinner(); + } + $.support.transition && this.$backdropHandle ? + this.$backdropHandle.one($.support.transition.end, function () { remove.call(this); }) : + remove.call(this); + }, - } else if (callback) { + loading: function (callback) { + callback = callback || function () {}; + + if (!this.isLoading) + this.createLoading(callback); + else if (this.isLoading && this.$backdropHandle) + this.removeLoading(callback); + else if (callback) callback(this.isLoading); - } } }; From 22d46c131db97b356452a4b42c6ba9ce76e95073 Mon Sep 17 00:00:00 2001 From: Rafael Rubem Rossi Souza Guerreiro Date: Tue, 11 Feb 2014 16:02:00 -0200 Subject: [PATCH 2/2] bugfix: setting 'this' in var 'that' to avoid error. --- js/bootstrap-modalmanager.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/bootstrap-modalmanager.js b/js/bootstrap-modalmanager.js index 847b9fa..cec2a91 100644 --- a/js/bootstrap-modalmanager.js +++ b/js/bootstrap-modalmanager.js @@ -342,9 +342,10 @@ this.$backdropHandle = null; this.removeSpinner(); } + var that = this; $.support.transition && this.$backdropHandle ? - this.$backdropHandle.one($.support.transition.end, function () { remove.call(this); }) : - remove.call(this); + this.$backdropHandle.one($.support.transition.end, function () { remove.call(that); }) : + remove.call(that); }, loading: function (callback) {