vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js in twitter-bootstrap-rails-1.4.3 vs vendor/assets/javascripts/twitter/bootstrap/bootstrap-modal.js in twitter-bootstrap-rails-2.0rc0
- old
+ new
@@ -1,10 +1,10 @@
/* =========================================================
- * bootstrap-modal.js v1.4.0
- * http://twitter.github.com/bootstrap/javascript.html#modal
+ * bootstrap-modal.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#modals
* =========================================================
- * Copyright 2011 Twitter, Inc.
+ * Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
@@ -20,241 +20,190 @@
!function( $ ){
"use strict"
- /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
- * ======================================================= */
+ /* MODAL CLASS DEFINITION
+ * ====================== */
- var transitionEnd
-
- $(document).ready(function () {
-
- $.support.transition = (function () {
- var thisBody = document.body || document.documentElement
- , thisStyle = thisBody.style
- , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
- return support
- })()
-
- // set CSS transition event type
- if ( $.support.transition ) {
- transitionEnd = "TransitionEnd"
- if ( $.browser.webkit ) {
- transitionEnd = "webkitTransitionEnd"
- } else if ( $.browser.mozilla ) {
- transitionEnd = "transitionend"
- } else if ( $.browser.opera ) {
- transitionEnd = "oTransitionEnd"
- }
- }
-
- })
-
-
- /* MODAL PUBLIC CLASS DEFINITION
- * ============================= */
-
var Modal = function ( content, options ) {
- this.settings = $.extend({}, $.fn.modal.defaults, options)
+ this.options = $.extend({}, $.fn.modal.defaults, options)
this.$element = $(content)
- .delegate('.close', 'click.modal', $.proxy(this.hide, this))
-
- if ( this.settings.show ) {
- this.show()
- }
-
- return this
+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
}
Modal.prototype = {
- toggle: function () {
+ constructor: Modal
+
+ , toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
, show: function () {
var that = this
+
+ if (this.isShown) return
+
+ $('body').addClass('modal-open')
+
this.isShown = true
this.$element.trigger('show')
escape.call(this)
backdrop.call(this, function () {
var transition = $.support.transition && that.$element.hasClass('fade')
+ !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+
that.$element
- .appendTo(document.body)
.show()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
transition ?
- that.$element.one(transitionEnd, function () { that.$element.trigger('shown') }) :
+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown')
})
-
- return this
}
- , hide: function (e) {
+ , hide: function ( e ) {
e && e.preventDefault()
- if ( !this.isShown ) {
- return this
- }
+ if (!this.isShown) return
var that = this
this.isShown = false
+ $('body').removeClass('modal-open')
+
escape.call(this)
this.$element
.trigger('hide')
.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) :
hideModal.call(this)
-
- return this
}
}
/* MODAL PRIVATE METHODS
* ===================== */
function hideWithTransition() {
- // firefox drops transitionEnd events :{o
var that = this
, timeout = setTimeout(function () {
- that.$element.unbind(transitionEnd)
+ that.$element.off($.support.transition.end)
hideModal.call(that)
}, 500)
- this.$element.one(transitionEnd, function () {
+ this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
- function hideModal (that) {
+ function hideModal( that ) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
- function backdrop ( callback ) {
+ function backdrop( callback ) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
- if ( this.isShown && this.settings.backdrop ) {
+
+ if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
- if ( this.settings.backdrop != 'static' ) {
+ if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
- if ( doAnimate ) {
- this.$backdrop[0].offsetWidth // force reflow
- }
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
- this.$backdrop.one(transitionEnd, callback) :
+ this.$backdrop.one($.support.transition.end, callback) :
callback()
- } else if ( !this.isShown && this.$backdrop ) {
+ } else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one(transitionEnd, $.proxy(removeBackdrop, this)) :
+ this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
removeBackdrop.call(this)
- } else if ( callback ) {
- callback()
+ } else if (callback) {
+ callback()
}
}
function removeBackdrop() {
this.$backdrop.remove()
this.$backdrop = null
}
function escape() {
var that = this
- if ( this.isShown && this.settings.keyboard ) {
- $(document).bind('keyup.modal', function ( e ) {
- if ( e.which == 27 ) {
- that.hide()
- }
+ if (this.isShown && this.options.keyboard) {
+ $(document).on('keyup.dismiss.modal', function ( e ) {
+ e.which == 27 && that.hide()
})
- } else if ( !this.isShown ) {
- $(document).unbind('keyup.modal')
+ } else if (!this.isShown) {
+ $(document).off('keyup.dismiss.modal')
}
}
/* MODAL PLUGIN DEFINITION
* ======================= */
- $.fn.modal = function ( 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 = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('modal')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option]()
+ else data.show()
+ })
}
- $.fn.modal.Modal = Modal
-
$.fn.modal.defaults = {
- backdrop: false
- , keyboard: false
- , show: false
+ backdrop: true
+ , keyboard: true
}
+ $.fn.modal.Constructor = Modal
- /* MODAL DATA- IMPLEMENTATION
- * ========================== */
- $(document).ready(function () {
- $('body').delegate('[data-controls-modal]', 'click', function (e) {
+ /* MODAL DATA-API
+ * ============== */
+
+ $(function () {
+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+ var $this = $(this), href
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+
e.preventDefault()
- var $this = $(this).data('show', true)
- $('#' + $this.attr('data-controls-modal')).modal( $this.data() )
+ $target.modal(option)
})
})
-}( window.jQuery || window.ender );
+}( window.jQuery )