-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.affirm.min.js
6 lines (5 loc) · 5.5 KB
/
jquery.affirm.min.js
1
2
3
4
5
6
/*!
* jQuery Affirm - v1.0beta - 2013-10-16 *
* Author: Wyatt Kirby <kirby,wa@gmail.com> *
* Licensed under the MIT license */
(function(e,t,n,r){function i(t,n,r,i){e(t).parent().length&&(t=e(t).clone(!0).show());this.content=t;this.options=e.extend(!0,{},e.fn.affirm.defaults,n);this.callback=r;this.modalTrigger=i;this.buttons={};this.setupCSS();this[this.options.action]()}e.fn.affirm=function(t,n){return this.each(function(){e(this).on("click",function(r){r.preventDefault();var i=e(e(this).data("modalcontent")||this.hash);i.length||(i=e.fn.affirm.defaults.modalText);if(t instanceof Function){n=t;t={action:"confirm"}}e.affirm(i,t,n,this)})})};e.affirm=function(t,r,s,o){if(t instanceof Function){s=t;t=e.fn.affirm.defaults.modalText;r={action:"confirm"}}else if(r instanceof Function){s=r;r={action:"confirm"}}var u=new i(t,r,s,o);e(n.body).data("modal")==="open"?e.fn.affirm.modalQueue.push(u):u.showModal()};i.prototype.modal=function(){this.createModal();this.options.overlay&&this.createOverlay()};i.prototype.alert=function(){this.buttons.$primaryButton=e("<button/>",{text:this.options.confirmText,autoFocus:!0,"class":this.options.confirmClass});this.buttons.$primaryButton.on("click.hideModal",e.proxy(function(e){e.preventDefault();this.hideModal();this.callback instanceof Function&&(this.$promptInput?this.callback(this.$promptInput.val()):this.callback())},this));this.modal()};i.prototype.confirm=function(){this.buttons.$cancelButton=e("<button/>",{text:this.options.cancelText,"class":this.options.cancelClass});this.buttons.$cancelButton.on("click.hideModal",e.proxy(function(e){e.preventDefault();this.hideModal()},this));this.alert()};i.prototype.prompt=function(){this.$promptInput=e("<input/>",{type:"text","class":this.options.inputClass});this.confirm()};i.prototype.createModal=function(){var t=e("<h4/>",{"class":"modal-title",text:this.options.title}),n=e("<button/>",{"class":"close",html:"×",type:"button"}),r=e("<div/>",{"class":"modal-header"}),i=e("<div/>",{"class":"modal-body",html:this.content}),s=e("<div/>",{"class":"modal-footer"}),o=e("<div/>",{"class":"modal-content"}),u=e("<div/>",{"class":"modal-dialog"}),a=e("<div/>",{"class":"modal"});if(this.options.useDefaultCSS){t.css(this.defaultCSS.title);n.css(this.defaultCSS.close);r.css(this.defaultCSS.header);i.css(this.defaultCSS.body);s.css(this.defaultCSS.footer);o.css(this.defaultCSS.content);u.css(this.defaultCSS.wrapper);a.css(this.defaultCSS.modal)}r.append(t).prepend(n);e.isEmptyObject(this.buttons)||e.each(this.buttons,function(){s.append(this)});if(this.$promptInput){i.append(e("<br/>"));i.append(this.$promptInput)}o.append(r).append(i).append(s).appendTo(u);this.options.overlayDismiss&&a.on("click",e.proxy(function(e){if(e.target===e.currentTarget){e.preventDefault();this.hideModal()}},this));n.on("click",e.proxy(function(e){e.preventDefault();this.hideModal()},this));this.$modal=a.append(u)};i.prototype.createOverlay=function(){var t=e("<div/>",{id:"modal-overlay"});t.css(this.defaultCSS.overlay);this.$overlay=t};i.prototype.showModal=function(){var t=this;if(this.$modal&&!e(n.body).data("modal")){this.options.overlay&&this.$overlay.hide().appendTo(n.body).fadeTo(this.options.animSpeed,this.options.css.overlayOpacity);e(n.body).css("overflow","hidden").data("modal","open");this.$modal.appendTo(n.body).fadeIn(this.options.animSpeed,function(){t.options.afterShow(t.$modal,t.modalTrigger)});this.options.keyboard&&this.keyboardInit()}};i.prototype.hideModal=function(){var t=this;if(this.$modal&&e(n.body).data("modal")){this.options.overlay&&this.$overlay.fadeOut(this.options.animSpeed,function(){this.remove()});this.$modal.fadeOut(this.options.animSpeed,function(){this.remove();t.options.afterHide(t.$modal,t.modalTrigger)});e(n.body).css("overflow","").removeData("modal").off("keyup");e.fn.affirm.modalQueue.length>0&&e.fn.affirm.modalQueue.shift().showModal()}};i.prototype.keyboardInit=function(){e(n.body).on("keyup.affirm",e.proxy(function(e){if(this.$modal)if(e.which===27){e.preventDefault();this.hideModal()}else if(e.which===13&&this.buttons.$primaryButton){e.preventDefault();this.buttons.$primaryButton.trigger("click")}},this))};i.prototype.setupCSS=function(){this.defaultCSS={header:{overflow:"hidden",padding:this.options.css.modalPadding},title:{margin:0,"float":"left"},close:{"float":"right",background:"transparent",fontSize:14,color:"#ccc",fontWeight:"bold",border:0,padding:0,marginTop:-2,cursor:"pointer"},body:{padding:this.options.css.modalPadding},footer:{padding:this.options.css.modalPadding},content:{backgroundColor:this.options.css.modalBackground,borderRadius:this.options.css.modalCornerRadius},wrapper:{margin:"0 auto",paddingTop:this.options.css.modalPadding*2,width:600,maxWidth:"90%",fontFamily:this.options.css.fontFamily},modal:{zIndex:this.options.css.zindex+10,position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"auto",overflowY:"scroll"},overlay:{zIndex:this.options.css.zindex,position:"fixed",backgroundColor:this.options.css.overlayBackground,top:0,left:0,right:0,bottom:0}}};e.fn.affirm.defaults={action:"modal",title:"Modal Title",confirmText:"OK",cancelText:"Cancel",overlay:!0,overlayDismiss:!0,keyboard:!0,animSpeed:500,confirmClass:"btn btn-primary",cancelClass:"btn btn-default",inputClass:"form-control",afterShow:function(){return},afterHide:function(){return},useDefaultCSS:!0,css:{fontFamily:"sans-serif",zindex:1e3,overlayBackground:"black",overlayOpacity:.5,modalPadding:10,modalBackground:"white",modalCornerRadius:3}};e.fn.affirm.modalQueue=[]})(window.jQuery,window,document);