Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Thornton <jacobthornton@gmail.com>2011-09-12 07:08:43 +0400
committerJacob Thornton <jacobthornton@gmail.com>2011-09-12 07:08:43 +0400
commit173be3f1e87a83f8e85bef8ddb979a921ccee9d1 (patch)
treed224c15b41174227a0e0c1fd5beffd7c1131d5fb /js/bootstrap-modal.js
parentd9cbcfc20ded5f1cd1af4e304415b3405631f0bc (diff)
change hella js... broke all the tests. i <3 wip
Diffstat (limited to 'js/bootstrap-modal.js')
-rw-r--r--js/bootstrap-modal.js210
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