diff options
author | Jacob Thornton <jacobthornton@gmail.com> | 2012-05-17 06:10:49 +0400 |
---|---|---|
committer | Jacob Thornton <jacobthornton@gmail.com> | 2012-05-17 06:10:49 +0400 |
commit | 4b53778150c37bf9b45798b3c54330b2403ac915 (patch) | |
tree | 9a565ef1435db033eb22d19f0a468af763e313d1 /js | |
parent | 5ecab6112cb3a53b3222f90c44b0938929e71ac9 (diff) | |
parent | a404ac33bb9e78323b84d0840735445579634b9e (diff) |
Merge branch 'master' into 2.0.4-wip
Diffstat (limited to 'js')
-rw-r--r-- | js/bootstrap-modal.js | 143 |
1 files changed, 79 insertions, 64 deletions
diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js index c831de6b64..f7ae39652b 100644 --- a/js/bootstrap-modal.js +++ b/js/bootstrap-modal.js @@ -52,8 +52,9 @@ this.isShown = true - escape.call(this) - backdrop.call(this, function () { + this.escape() + + this.backdrop(function () { var transition = $.support.transition && that.$element.hasClass('fade') if (!that.$element.parent().length) { @@ -69,6 +70,8 @@ that.$element.addClass('in') + that.enforceFocus() + transition ? that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : that.$element.trigger('shown') @@ -91,90 +94,102 @@ $('body').removeClass('modal-open') - escape.call(this) + this.escape() + this.relaxFocus() this.$element.removeClass('in') $.support.transition && this.$element.hasClass('fade') ? - hideWithTransition.call(this) : - hideModal.call(this) + this.hideWithTransition() : + this.hideModal() } - } - - - /* MODAL PRIVATE METHODS - * ===================== */ + , enforceFocus: function () { + var that = this + var console = window.console + console.log('attach'); + $(document).on('focusin.modal', function (e) { + console.log('triggered'); + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } - function hideWithTransition() { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - hideModal.call(that) - }, 500) + , relaxFocus: function () { + $(document).off('focus.modal') + } - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - hideModal.call(that) - }) - } + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + $(document).on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + $(document).off('keyup.dismiss.modal') + } + } - function hideModal(that) { - this.$element - .hide() - .trigger('hidden') + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } - backdrop.call(this) - } + , hideModal: function (that) { + this.$element + .hide() + .trigger('hidden') - function backdrop(callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' + this.backdrop() + } - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate + , removeBackdrop: function () { + this.$backdrop.remove() + this.$backdrop = null + } - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' - if (this.options.backdrop != 'static') { - this.$backdrop.click($.proxy(this.hide, this)) - } + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .appendTo(document.body) - this.$backdrop.addClass('in') + if (this.options.backdrop != 'static') { + this.$backdrop.click($.proxy(this.hide, this)) + } - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') + this.$backdrop.addClass('in') - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) : - removeBackdrop.call(this) + doAnimate ? + this.$backdrop.one($.support.transition.end, callback) : + callback() - } else if (callback) { - callback() - } - } + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') - function removeBackdrop() { - this.$backdrop.remove() - this.$backdrop = null - } + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) : + this.removeBackdrop() - function escape() { - var that = this - if (this.isShown && this.options.keyboard) { - $(document).on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - $(document).off('keyup.dismiss.modal') - } + } else if (callback) { + callback() + } + } } |