jquery.modal-box
Version:
The light weight modal plugin with css3 animations for jQuery
9 lines • 3.54 kB
JavaScript
/*
* jquery.modal-box - v2.1.1
* The light weight modal plugin with css3 animations for jQuery
* https://github.com/vladrub/jquery.modalBox/
*
* Made by Vladislav Rubanovich
* Under MIT License
*/
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";function b(b,e,f){switch(this.el=b,this.$el=a(this.el),this.$body=a("body"),this.options=a.extend({},d,f),this._defaults=d,this._name=c,this.init(),e){case"open":this.open(),this.options.autoClose&&setTimeout(function(){this.close()}.bind(this),this.options.autoCloseDelay);break;case"close":this.close()}}var c="modalBox",d={closeOnEscape:!0,closable:!0,autoClose:!1,autoCloseDelay:3e3};a.extend(b.prototype,{init:function(){var b=this;a(".close",this.$el).click(function(a){b.options.closable&&(a.preventDefault(),b.close())}),this.options.closeOnEscape&&a(this.$el).bind("keydown",function(a){b.options.closable&&27===a.keyCode&&b.close()}),this.$el.on("mousedown",function(c){b.options.closable&&(a(c.target).closest(".inner").length||b.close())}),this.originalBodyPad=0,a(".modal-box.active").length||(this.originalBodyPad=parseInt(this.$body.css("padding-right"),10)),this.scrollbarWidth=this.measureScrollBar()},open:function(){if(!this.$el.hasClass("modal-box-animated")){this.$el.addClass("modal-box-animated");var b=this;this.$el.trigger("modalBox:beforeOpen",this),this.$body.addClass("modal-box-open"),this.setScrollBar(),this.$el.attr("tabindex",this.getTabIndex()),this.$el.css("z-index",this.getZIndex()),this.$el.addClass("active"),this.$el.one("transitionend",function(){a(">.inner",b.$el).addClass("show-modal-inner").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){b.$el.trigger("modalBox:afterOpen",b),b.$el.focus(),b.$el.removeClass("modal-box-animated")})})}},close:function(){if(!this.$el.hasClass("modal-box-animated")){this.$el.addClass("modal-box-animated");var b=this;this.$el.trigger("modalBox:beforeClose",this),a(">.inner",b.$el).removeClass("show-modal-inner").addClass("hide-modal-inner").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){a(".inner",b.$el).removeClass("hide-modal-inner"),b.$el.removeClass("active").one("transitionend",function(){a(".modal-box.active").length||(b.resetScrollBar(),b.$body.removeClass("modal-box-open")),b.$el.css("z-index",-1),b.$el.trigger("modalBox:afterClose",b),b.$el.removeClass("modal-box-animated")})})}},setScrollBar:function(){this.$body.css("padding-right",this.originalBodyPad+this.scrollbarWidth)},resetScrollBar:function(){this.$body.css("padding-right",this.originalBodyPad)},measureScrollBar:function(){var b=a('<div class="modal-box-scroll-bar">');this.$body.append(b);var c=b[0].offsetWidth-b[0].clientWidth;return b.remove(),c},getTabIndex:function(){var b=1;return a("div.modal-box[tabindex]").each(function(){a(this).attr("tabindex")>b&&(b=Number(a(this).attr("tabindex")))}),b+1},getZIndex:function(){var b=999;return a("div.modal-box").each(function(){a(this).css("z-index")>b&&(b=Number(a(this).css("z-index")))}),b+1}}),a.fn[c]=function(d,e){return this.each(function(){if(a.data(this,"plugin_"+c)){var f=a.data(this,"plugin_"+c);switch(f.options=a.extend({},f.options,e),d){case"open":f.open(),f.options.autoClose&&setTimeout(function(){f.close()},f.options.autoCloseDelay);break;case"close":f.close()}}else a.data(this,"plugin_"+c,new b(this,d,e))})}});