1 line
3.2 KiB
JavaScript
1 line
3.2 KiB
JavaScript
!function(n){"use strict";var s=function(t,e){this.options=e,this.$element=n(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",n.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};s.prototype={constructor:s,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var e=this,t=n.Event("show");this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var t=n.support.transition&&e.$element.hasClass("fade");e.$element.parent().length||e.$element.appendTo(document.body),e.$element.show(),t&&e.$element[0].offsetWidth,e.$element.addClass("in").attr("aria-hidden",!1),e.enforceFocus(),t?e.$element.one(n.support.transition.end,function(){e.$element.focus().trigger("shown")}):e.$element.focus().trigger("shown")}))},hide:function(t){t&&t.preventDefault();t=n.Event("hide"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),n(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),n.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},enforceFocus:function(){var e=this;n(document).on("focusin.modal",function(t){e.$element[0]===t.target||e.$element.has(t.target).length||e.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){27==t.which&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,e=setTimeout(function(){t.$element.off(n.support.transition.end),t.hideModal()},500);this.$element.one(n.support.transition.end,function(){clearTimeout(e),t.hideModal()})},hideModal:function(t){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=n.support.transition&&e;this.$backdrop=n('<div class="modal-backdrop '+e+'" />').appendTo(document.body),this.$backdrop.click("static"==this.options.backdrop?n.proxy(this.$element[0].focus,this.$element[0]):n.proxy(this.hide,this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),o?this.$backdrop.one(n.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),n.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(n.support.transition.end,n.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},n.fn.modal=function(i){return this.each(function(){var t=n(this),e=t.data("modal"),o=n.extend({},n.fn.modal.defaults,t.data(),"object"==typeof i&&i);e||t.data("modal",e=new s(this,o)),"string"==typeof i?e[i]():o.show&&e.show()})},n.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},n.fn.modal.Constructor=s,n(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var e=n(this),o=e.attr("href"),i=n(e.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":n.extend({remote:!/#/.test(o)&&o},i.data(),e.data());t.preventDefault(),i.modal(s).one("hide",function(){e.focus()})})}(window.jQuery); |