261 行
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			261 行
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /* ========================================================= | ||
|  |  * bootstrap-modal.js v1.4.0 | ||
|  |  * http://twitter.github.com/bootstrap/javascript.html#modal
 | ||
|  |  * ========================================================= | ||
|  |  * Copyright 2011 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 | ||
|  |  * | ||
|  |  * http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  |  * | ||
|  |  * Unless required by applicable law or agreed to in writing, software | ||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
|  |  * See the License for the specific language governing permissions and | ||
|  |  * limitations under the License. | ||
|  |  * ========================================================= */ | ||
|  | 
 | ||
|  | 
 | ||
|  | !function( $ ){ | ||
|  | 
 | ||
|  |   "use strict" | ||
|  | 
 | ||
|  |  /* 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" | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |   }) | ||
|  | 
 | ||
|  | 
 | ||
|  |  /* MODAL PUBLIC CLASS DEFINITION | ||
|  |   * ============================= */ | ||
|  | 
 | ||
|  |   var Modal = function ( content, options ) { | ||
|  |     this.settings = $.extend({}, $.fn.modal.defaults, options) | ||
|  |     this.$element = $(content) | ||
|  |       .delegate('.close', 'click.modal', $.proxy(this.hide, this)) | ||
|  | 
 | ||
|  |     if ( this.settings.show ) { | ||
|  |       this.show() | ||
|  |     } | ||
|  | 
 | ||
|  |     return this | ||
|  |   } | ||
|  | 
 | ||
|  |   Modal.prototype = { | ||
|  | 
 | ||
|  |       toggle: function () { | ||
|  |         return this[!this.isShown ? 'show' : 'hide']() | ||
|  |       } | ||
|  | 
 | ||
|  |     , show: function () { | ||
|  |         var that = this | ||
|  |         this.isShown = true | ||
|  |         this.$element.trigger('show') | ||
|  | 
 | ||
|  |         escape.call(this) | ||
|  |         backdrop.call(this, function () { | ||
|  |           var transition = $.support.transition && that.$element.hasClass('fade') | ||
|  | 
 | ||
|  |           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.trigger('shown') | ||
|  | 
 | ||
|  |         }) | ||
|  | 
 | ||
|  |         return this | ||
|  |       } | ||
|  | 
 | ||
|  |     , hide: function (e) { | ||
|  |         e && e.preventDefault() | ||
|  | 
 | ||
|  |         if ( !this.isShown ) { | ||
|  |           return this | ||
|  |         } | ||
|  | 
 | ||
|  |         var that = this | ||
|  |         this.isShown = false | ||
|  | 
 | ||
|  |         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) | ||
|  |           hideModal.call(that) | ||
|  |         }, 500) | ||
|  | 
 | ||
|  |     this.$element.one(transitionEnd, 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 ) { | ||
|  |       var doAnimate = $.support.transition && animate | ||
|  | 
 | ||
|  |       this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') | ||
|  |         .appendTo(document.body) | ||
|  | 
 | ||
|  |       if ( this.settings.backdrop != 'static' ) { | ||
|  |         this.$backdrop.click($.proxy(this.hide, this)) | ||
|  |       } | ||
|  | 
 | ||
|  |       if ( doAnimate ) { | ||
|  |         this.$backdrop[0].offsetWidth // force reflow
 | ||
|  |       } | ||
|  | 
 | ||
|  |       this.$backdrop.addClass('in') | ||
|  | 
 | ||
|  |       doAnimate ? | ||
|  |         this.$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, $.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() | ||
|  |         } | ||
|  |       }) | ||
|  |     } else if ( !this.isShown ) { | ||
|  |       $(document).unbind('keyup.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.Modal = Modal | ||
|  | 
 | ||
|  |   $.fn.modal.defaults = { | ||
|  |     backdrop: false | ||
|  |   , keyboard: false | ||
|  |   , show: false | ||
|  |   } | ||
|  | 
 | ||
|  | 
 | ||
|  |  /* MODAL DATA- IMPLEMENTATION | ||
|  |   * ========================== */ | ||
|  | 
 | ||
|  |   $(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() ) | ||
|  |     }) | ||
|  |   }) | ||
|  | 
 | ||
|  | }( window.jQuery || window.ender ); |