Revision 82e47ae0
Added by Amos Benari about 12 years ago
- ID 82e47ae0f86994702c3a084cc6150250a81034ee
public/javascripts/bootstrap-modal.js | ||
---|---|---|
/* =========================================================
|
||
* bootstrap-modal.js v1.3.0
|
||
* http://twitter.github.com/bootstrap/javascript.html#modal
|
||
* bootstrap-modal.js v2.0.2
|
||
* 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.
|
||
... | ... | |
|
||
!function( $ ){
|
||
|
||
/* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
|
||
* ======================================================= */
|
||
|
||
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"
|
||
}
|
||
}
|
||
|
||
})
|
||
"use strict"
|
||
|
||
|
||
/* MODAL PUBLIC CLASS DEFINITION
|
||
* ============================= */
|
||
/* MODAL CLASS DEFINITION
|
||
* ====================== */
|
||
|
||
var Modal = function ( content, options ) {
|
||
this.settings = $.extend({}, $.fn.modal.defaults, options)
|
||
this.options = 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')
|
||
|
||
... | ... | |
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')
|
||
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')
|
||
|
||
function removeElement () {
|
||
that.$element
|
||
.hide()
|
||
.trigger('hidden')
|
||
|
||
backdrop.call(that)
|
||
}
|
||
|
||
$.support.transition && this.$element.hasClass('fade') ?
|
||
this.$element.one(transitionEnd, removeElement) :
|
||
removeElement()
|
||
|
||
return this
|
||
hideWithTransition.call(this) :
|
||
hideModal.call(this)
|
||
}
|
||
|
||
}
|
||
... | ... | |
/* MODAL PRIVATE METHODS
|
||
* ===================== */
|
||
|
||
function backdrop ( callback ) {
|
||
function hideWithTransition() {
|
||
var that = this
|
||
, timeout = setTimeout(function () {
|
||
that.$element.off($.support.transition.end)
|
||
hideModal.call(that)
|
||
}, 500)
|
||
|
||
this.$element.one($.support.transition.end, function () {
|
||
clearTimeout(timeout)
|
||
hideModal.call(that)
|
||
})
|
||
}
|
||
|
||
function hideModal( that ) {
|
||
this.$element
|
||
.hide()
|
||
.trigger('hidden')
|
||
|
||
backdrop.call(this)
|
||
}
|
||
|
||
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')
|
||
|
||
function removeElement() {
|
||
that.$backdrop.remove()
|
||
that.$backdrop = null
|
||
}
|
||
|
||
$.support.transition && this.$element.hasClass('fade')?
|
||
this.$backdrop.one(transitionEnd, removeElement) :
|
||
removeElement()
|
||
} else if ( callback ) {
|
||
callback()
|
||
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
|
||
removeBackdrop.call(this)
|
||
|
||
} 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 = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
|
||
if (!data) $this.data('modal', (data = new Modal(this, options)))
|
||
if (typeof option == 'string') data[option]()
|
||
else if (options.show) data.show()
|
||
})
|
||
}
|
||
|
||
$.fn.modal.Modal = Modal
|
||
|
||
$.fn.modal.defaults = {
|
||
backdrop: false
|
||
, keyboard: false
|
||
, show: false
|
||
backdrop: true
|
||
, keyboard: true
|
||
, show: true
|
||
}
|
||
|
||
$.fn.modal.Constructor = Modal
|
||
|
||
|
||
/* MODAL DATA-API
|
||
* ============== */
|
||
|
||
/* MODAL DATA- IMPLEMENTATION
|
||
* ========================== */
|
||
$(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())
|
||
|
||
$(document).ready(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() )
|
||
$target.modal(option)
|
||
})
|
||
})
|
||
|
||
}( window.jQuery || window.ender );
|
||
}( window.jQuery );
|
Also available in: Unified diff
updates UI to bootstrap v2