diff options
author | Jacob Thornton <jacobthornton@gmail.com> | 2011-09-12 07:08:43 +0400 |
---|---|---|
committer | Jacob Thornton <jacobthornton@gmail.com> | 2011-09-12 07:08:43 +0400 |
commit | 173be3f1e87a83f8e85bef8ddb979a921ccee9d1 (patch) | |
tree | d224c15b41174227a0e0c1fd5beffd7c1131d5fb /js/bootstrap-modal.js | |
parent | d9cbcfc20ded5f1cd1af4e304415b3405631f0bc (diff) |
change hella js... broke all the tests. i <3 wip
Diffstat (limited to 'js/bootstrap-modal.js')
-rw-r--r-- | js/bootstrap-modal.js | 210 |
1 files changed, 121 insertions, 89 deletions
diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js index 8b21c192d1..97eeded512 100644 --- a/js/bootstrap-modal.js +++ b/js/bootstrap-modal.js @@ -54,72 +54,73 @@ var Modal = function ( content, options ) { this.settings = $.extend({}, $.fn.modal.defaults) + this.$element = $(content) + .delegate('.close', 'click.modal', $.proxy(this.hide, this)) if ( options ) { $.extend( this.settings, options ) - } - this.$element = $(content) - .bind('modal:show', $.proxy(this.show, this)) - .bind('modal:hide', $.proxy(this.hide, this)) - .bind('modal:toggle', $.proxy(this.toggle, this)) - .delegate('.close', 'click', $.proxy(this.hide, this)) + if ( options.show ) { + this.show() + } + } return this } Modal.prototype = { - toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - this.isShown = true - - _.escape.call(this) + toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } - _.backdrop.call(this, function () { - that.$element - .appendTo(document.body) - .show() + , show: function () { + var that = this + this.isShown = true + this.$element.trigger('show') - setTimeout(function () { + escape.call(this) + backdrop.call(this, function () { that.$element - .addClass('in') - .trigger('modal:shown') - }, 1) - }) - - return this - } + .appendTo(document.body) + .show() + + setTimeout(function () { + that.$element + .addClass('in') + .trigger('shown') + }, 1) + }) - , hide: function (e) { - e && e.preventDefault() + return this + } - var that = this + , hide: function (e) { + e && e.preventDefault() - this.isShown = false + var that = this + this.isShown = false - _.escape.call(this) + escape.call(this) - this.$element.removeClass('in') + this.$element + .trigger('hide') + .removeClass('in') - function removeElement () { - that.$element - .detach() - .trigger('modal:hidden') + function removeElement () { + that.$element + .hide() + .trigger('hidden') - _.backdrop.call(that) - } + backdrop.call(that) + } - $.support.transition && this.$element.hasClass('fade') ? - this.$element.one(transitionEnd, removeElement) : - removeElement() + $.support.transition && this.$element.hasClass('fade') ? + this.$element.one(transitionEnd, removeElement) : + removeElement() - return this - } + return this + } } @@ -127,51 +128,47 @@ /* MODAL PRIVATE METHODS * ===================== */ - var _ = { - - backdrop: function ( callback ) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - if ( this.isShown && this.settings.backdrop ) { - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .click($.proxy(this.hide, this)) - .appendTo(document.body) - - setTimeout(function () { - that.$backdrop && that.$backdrop.addClass('in') - $.support.transition && that.$backdrop.hasClass('fade') ? - that.$backdrop.one(transitionEnd, callback) : - callback() - }) - } else if ( !this.isShown && this.$backdrop ) { - this.$backdrop.removeClass('in') - - function removeElement() { - that.$backdrop.remove() - that.$backdrop = null - } + function backdrop ( callback ) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + if ( this.isShown && this.settings.backdrop ) { + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .click($.proxy(this.hide, this)) + .appendTo(document.body) + + setTimeout(function () { + that.$backdrop && that.$backdrop.addClass('in') + $.support.transition && that.$backdrop.hasClass('fade') ? + that.$backdrop.one(transitionEnd, callback) : + callback() + }) + } else if ( !this.isShown && this.$backdrop ) { + this.$backdrop.removeClass('in') - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one(transitionEnd, removeElement) : - removeElement() - } else { - callback() + function removeElement() { + that.$backdrop.remove() + that.$backdrop = null } - } - , escape: function () { - var that = this - if ( this.isShown && this.settings.closeOnEscape ) { - $('body').bind('keyup.modal.escape', function ( e ) { - if ( e.which == 27 ) { - that.hide() - } - }) - } else if ( !this.isShown ) { - $('body').unbind('keyup.modal.escape') - } + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one(transitionEnd, removeElement) : + removeElement() + } else if ( callback ) { + callback() } + } + function escape() { + var that = this + if ( this.isShown && this.settings.keyboard ) { + $('body').bind('keyup.modal', function ( e ) { + if ( e.which == 27 ) { + that.hide() + } + }) + } else if ( !this.isShown ) { + $('body').unbind('keyup.modal') + } } @@ -179,17 +176,52 @@ * ======================= */ $.fn.modal = function ( options ) { - options = options || {} - return this.each(function () { - return new Modal(this, options) - }) + var modal = this.data('modal') + + if (!modal) { + + if (typeof options == 'string') { + options = { + show: /show|toggle/.test(options) + } + } + + return this.each(function () { + $(this).data('modal', new Modal(this, options)) + }) + } + + if ( options === true ) { + return modal + } + + if ( typeof options == 'string' ) { + modal[options]() + } else if ( modal ) { + modal.toggle() + } + + return this } $.fn.modal.Modal = Modal $.fn.modal.defaults = { backdrop: false - , hideOnEscape: false + , keyboard: false + , show: true } + + /* MODAL DATA- IMPLEMENTATION + * ========================== */ + + $(function () { + $('body').delegate('[data-controls-modal]', 'click', function (e) { + e.preventDefault() + var $this = $(this).data('show', true) + $('#' + $this.attr('data-controls-modal')).modal( $this.data() ) + }) + }) + })( jQuery || ender )
\ No newline at end of file |