bootstrap-modal.js 3.51 KiB
(function( $ ){
  /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
   * ======================================================= */
  $.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
  })()
 /* SHARED VARS
  * =========== */
  var $window = $(window)
    , transitionEnd
  // 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 ( options ) {
    this.settings = $.extend({}, $.fn.modal.defaults)
    if ( typeof options == 'string' ) {
      this.settings.content = options
    } else if ( options ) {
      $.extend( this.settings, options )
    return this
  Modal.prototype = {
    toggle: function () {
      return this[!this.isOpen ? 'open' : 'close']()
  , open: function () {
      var that = this
      this.isOpen = true
      _.escape.call(this)
      _.backdrop.call(this)
      this.$element = $(this.settings.content)
        .delegate('.close', 'click', function (e) { e.preventDefault(); that.close() })
        .appendTo(document.body)
        .show()
      setTimeout(function () {
        that.$element.addClass('show')
        that.$backdrop && that.$backdrop.addClass('show')
      }, 1)
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
return this } , close: function () { var that = this this.isOpen = false _.escape.call(this) _.backdrop.call(this) this.$element.removeClass('show') function removeElement () { that.$element.remove() that.$element = null } $.support.transition ? this.$element.bind(transitionEnd, removeElement) : removeElement() return this } } /* MODAL PRIVATE METHODS * ===================== */ var _ = { backdrop: function () { var that = this if ( this.isOpen && this.settings.backdrop ) { this.$backdrop = $('<div class="modal-backdrop" />') .click(function () { that.close() }) .appendTo(document.body) } else if ( !this.isOpen && this.$backdrop ) { this.$backdrop.removeClass('show') function removeElement() { that.$backdrop.remove() that.$backdrop = null } $.support.transition ? this.$backdrop.bind(transitionEnd, removeElement) : removeElement() } } , escape: function () { var that = this if ( this.isOpen && this.settings.closeOnEscape ) { $window.bind('keyup.modal.escape', function ( e ) { if ( e.which == 27 ) { that.close() } }) } else if ( !this.isOpen ) { $window.unbind('keyup.modal.escape') } } } /* MODAL PLUGIN DEFINITION
141142143144145146147148149150151152153154155
* ======================= */ $.fn.modal = function ( options ) { options = options || {} options.content = this return new Modal(options) } $.fn.modal.defaults = { backdrop: false , closeOnEscape: false , content: false } })( jQuery || ender )