pbs/sweet-alert.js

1 line
16 KiB
JavaScript

!function(window,document,undefined){function setParameters(params){var modal=getModal(),$title=modal.querySelector("h2"),$text=modal.querySelector("p"),$cancelBtn=modal.querySelector("button.cancel"),$confirmBtn=modal.querySelector("button.confirm");if($title.innerHTML=params.html?params.title:escapeHtml(params.title).split("\n").join("<br>"),$text.innerHTML=params.html?params.text:escapeHtml(params.text||"").split("\n").join("<br>"),params.text&&show($text),params.customClass)addClass(modal,params.customClass),modal.setAttribute("data-custom-class",params.customClass);else{var customClass=modal.getAttribute("data-custom-class");removeClass(modal,customClass),modal.setAttribute("data-custom-class","")}if(hide(modal.querySelectorAll(".sa-icon")),params.type&&!isIE8()){for(var validType=!1,i=0;i<alertTypes.length;i++)if(params.type===alertTypes[i]){validType=!0;break}if(!validType)return logStr("Unknown alert type: "+params.type),!1;var $icon,typesWithIcons=["success","error","warning","info"];-1!==typesWithIcons.indexOf(params.type)&&($icon=modal.querySelector(".sa-icon.sa-"+params.type),show($icon));var $input=getInput();switch(params.type){case"success":addClass($icon,"animate"),addClass($icon.querySelector(".sa-tip"),"animateSuccessTip"),addClass($icon.querySelector(".sa-long"),"animateSuccessLong");break;case"error":addClass($icon,"animateErrorIcon"),addClass($icon.querySelector(".sa-x-mark"),"animateXMark");break;case"warning":addClass($icon,"pulseWarning"),addClass($icon.querySelector(".sa-body"),"pulseWarningIns"),addClass($icon.querySelector(".sa-dot"),"pulseWarningIns");break;case"input":case"prompt":$input.setAttribute("type",params.inputType),addClass(modal,"show-input"),setTimeout(function(){$input.focus(),$input.addEventListener("keyup",swal.resetInputError)},400)}}if(params.imageUrl){var $customIcon=modal.querySelector(".sa-icon.sa-custom");$customIcon.style.backgroundImage="url("+params.imageUrl+")",show($customIcon);var _imgWidth=80,_imgHeight=80;if(params.imageSize){var dimensions=params.imageSize.toString().split("x"),imgWidth=dimensions[0],imgHeight=dimensions[1];imgWidth&&imgHeight?(_imgWidth=imgWidth,_imgHeight=imgHeight):logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got "+params.imageSize)}$customIcon.setAttribute("style",$customIcon.getAttribute("style")+"width:"+_imgWidth+"px; height:"+_imgHeight+"px")}modal.setAttribute("data-has-cancel-button",params.showCancelButton),params.showCancelButton?$cancelBtn.style.display="inline-block":hide($cancelBtn),modal.setAttribute("data-has-confirm-button",params.showConfirmButton),params.showConfirmButton?$confirmBtn.style.display="inline-block":hide($confirmBtn),params.cancelButtonText&&($cancelBtn.innerHTML=escapeHtml(params.cancelButtonText)),params.confirmButtonText&&($confirmBtn.innerHTML=escapeHtml(params.confirmButtonText)),params.confirmButtonColor&&($confirmBtn.style.backgroundColor=params.confirmButtonColor,setFocusStyle($confirmBtn,params.confirmButtonColor)),modal.setAttribute("data-allow-ouside-click",params.allowOutsideClick);var hasDoneFunction=!!params.doneFunction;modal.setAttribute("data-has-done-function",hasDoneFunction),params.animation?"string"==typeof params.animation?modal.setAttribute("data-animation",params.animation):modal.setAttribute("data-animation","pop"):modal.setAttribute("data-animation","none"),modal.setAttribute("data-timer",params.timer)}function colorLuminance(hex,lum){hex=String(hex).replace(/[^0-9a-f]/gi,""),hex.length<6&&(hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]),lum=lum||0;var c,i,rgb="#";for(i=0;3>i;i++)c=parseInt(hex.substr(2*i,2),16),c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16),rgb+=("00"+c).substr(c.length);return rgb}function extend(a,b){for(var key in b)b.hasOwnProperty(key)&&(a[key]=b[key]);return a}function hexToRgb(hex){var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?parseInt(result[1],16)+", "+parseInt(result[2],16)+", "+parseInt(result[3],16):null}function setFocusStyle($button,bgColor){var rgbColor=hexToRgb(bgColor);$button.style.boxShadow="0 0 2px rgba("+rgbColor+", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"}function openModal(){var modal=getModal();fadeIn(getOverlay(),10),show(modal),addClass(modal,"showSweetAlert"),removeClass(modal,"hideSweetAlert"),previousActiveElement=document.activeElement;var $okButton=modal.querySelector("button.confirm");$okButton.focus(),setTimeout(function(){addClass(modal,"visible")},500);var timer=modal.getAttribute("data-timer");"null"!==timer&&""!==timer&&(modal.timeout=setTimeout(function(){sweetAlert.close()},timer))}function resetInput(){var $modal=getModal(),$input=getInput();removeClass($modal,"show-input"),$input.value="",$input.setAttribute("type",defaultParams.inputType),swal.resetInputError()}function fixVerticalPosition(){var modal=getModal();modal.style.marginTop=getTopMargin(getModal())}function isIE8(){return!(!window.attachEvent||window.addEventListener)}function logStr(string){window.console&&window.console.log("SweetAlert: "+string)}var previousActiveElement,previousWindowKeyDown,lastFocusedButton,sweetAlert,swal,modalClass=".sweet-alert",overlayClass=".sweet-overlay",alertTypes=["error","warning","info","success","input","prompt"],defaultParams={title:"",text:"",type:null,allowOutsideClick:!1,showConfirmButton:!0,showCancelButton:!1,closeOnConfirm:!0,closeOnCancel:!0,confirmButtonText:"OK",confirmButtonColor:"#AEDEF4",cancelButtonText:"Cancel",imageUrl:null,imageSize:null,timer:null,customClass:"",html:!1,animation:!0,allowEscapeKey:!0,inputType:"text"},getModal=function(){var $modal=document.querySelector(modalClass);return $modal||(sweetAlertInitialize(),$modal=getModal()),$modal},getInput=function(){var modal=getModal();return modal?modal.querySelector("input"):void 0},getOverlay=function(){return document.querySelector(overlayClass)},hasClass=function(elem,className){return new RegExp(" "+className+" ").test(" "+elem.className+" ")},addClass=function(elem,className){hasClass(elem,className)||(elem.className+=" "+className)},removeClass=function(elem,className){var newClass=" "+elem.className.replace(/[\t\r\n]/g," ")+" ";if(hasClass(elem,className)){for(;newClass.indexOf(" "+className+" ")>=0;)newClass=newClass.replace(" "+className+" "," ");elem.className=newClass.replace(/^\s+|\s+$/g,"")}},escapeHtml=function(str){var div=document.createElement("div");return div.appendChild(document.createTextNode(str)),div.innerHTML},_show=function(elem){elem.style.opacity="",elem.style.display="block"},show=function(elems){if(elems&&!elems.length)return _show(elems);for(var i=0;i<elems.length;++i)_show(elems[i])},_hide=function(elem){elem.style.opacity="",elem.style.display="none"},hide=function(elems){if(elems&&!elems.length)return _hide(elems);for(var i=0;i<elems.length;++i)_hide(elems[i])},isDescendant=function(parent,child){for(var node=child.parentNode;null!==node;){if(node===parent)return!0;node=node.parentNode}return!1},getTopMargin=function(elem){elem.style.left="-9999px",elem.style.display="block";var padding,height=elem.clientHeight;return padding="undefined"!=typeof getComputedStyle?parseInt(getComputedStyle(elem).getPropertyValue("padding-top"),10):parseInt(elem.currentStyle.padding),elem.style.left="",elem.style.display="none","-"+parseInt((height+padding)/2)+"px"},fadeIn=function(elem,interval){if(+elem.style.opacity<1){interval=interval||16,elem.style.opacity=0,elem.style.display="block";var last=+new Date,tick=function(){elem.style.opacity=+elem.style.opacity+(new Date-last)/100,last=+new Date,+elem.style.opacity<1&&setTimeout(tick,interval)};tick()}elem.style.display="block"},fadeOut=function(elem,interval){interval=interval||16,elem.style.opacity=1;var last=+new Date,tick=function(){elem.style.opacity=+elem.style.opacity-(new Date-last)/100,last=+new Date,+elem.style.opacity>0?setTimeout(tick,interval):elem.style.display="none"};tick()},fireClick=function(node){if("function"==typeof MouseEvent){var mevt=new MouseEvent("click",{view:window,bubbles:!1,cancelable:!0});node.dispatchEvent(mevt)}else if(document.createEvent){var evt=document.createEvent("MouseEvents");evt.initEvent("click",!1,!1),node.dispatchEvent(evt)}else document.createEventObject?node.fireEvent("onclick"):"function"==typeof node.onclick&&node.onclick()},stopEventPropagation=function(e){"function"==typeof e.stopPropagation?(e.stopPropagation(),e.preventDefault()):window.event&&window.event.hasOwnProperty("cancelBubble")&&(window.event.cancelBubble=!0)},sweetAlertInitialize=function(){var sweetHTML='<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error"><span class="sa-x-mark"><span class="sa-line sa-left"></span><span class="sa-line sa-right"></span></span></div><div class="sa-icon sa-warning"> <span class="sa-body"></span> <span class="sa-dot"></span> </div> <div class="sa-icon sa-info"></div> <div class="sa-icon sa-success"> <span class="sa-line sa-tip"></span> <span class="sa-line sa-long"></span> <div class="sa-placeholder"></div> <div class="sa-fix"></div> </div> <div class="sa-icon sa-custom"></div> <h2>Title</h2><p>Text</p><fieldset><input type="text" tabIndex="3" /><div class="sa-input-error"></div></fieldset> <div class="sa-error-container"><div class="icon">!</div> <p>Not valid!</p></div> <button class="cancel" tabIndex="2">Cancel</button><button class="confirm" tabIndex="1">OK</button></div>',sweetWrap=document.createElement("div");for(sweetWrap.innerHTML=sweetHTML;sweetWrap.firstChild;)document.body.appendChild(sweetWrap.firstChild)};sweetAlert=swal=function(){function argumentOrDefault(key){var args=customizations;return"undefined"!=typeof args[key]?args[key]:defaultParams[key]}function handleConfirm(){var callbackValue=!0;hasClass(modal,"show-input")&&(callbackValue=modal.querySelector("input").value,callbackValue||(callbackValue="")),params.doneFunction(callbackValue),params.closeOnConfirm&&sweetAlert.close()}function handleCancel(){var functionAsStr=String(params.doneFunction).replace(/\s/g,""),functionHandlesCancel="function("===functionAsStr.substring(0,9)&&")"!==functionAsStr.substring(9,10);functionHandlesCancel&&params.doneFunction(!1),params.closeOnCancel&&sweetAlert.close()}function handleKeyDown(event){var e=event||window.event,keyCode=e.keyCode||e.which;if(-1!==[9,13,32,27].indexOf(keyCode)){for(var $targetElement=e.target||e.srcElement,btnIndex=-1,i=0;i<$modalButtons.length;i++)if($targetElement===$modalButtons[i]){btnIndex=i;break}9===keyCode?($targetElement=-1===btnIndex?$okButton:btnIndex===$modalButtons.length-1?$modalButtons[0]:$modalButtons[btnIndex+1],stopEventPropagation(e),$targetElement.focus(),params.confirmButtonColor&&setFocusStyle($targetElement,params.confirmButtonColor)):13===keyCode?("INPUT"===$targetElement.tagName&&($targetElement=$okButton,$okButton.focus()),$targetElement=-1===btnIndex?$okButton:undefined):27===keyCode&&params.allowEscapeKey===!0?($targetElement=$cancelButton,fireClick($targetElement,e)):$targetElement=undefined}}var customizations=arguments[0];if(addClass(document.body,"stop-scrolling"),resetInput(),arguments[0]===undefined)return logStr("SweetAlert expects at least 1 attribute!"),!1;var params=extend({},defaultParams);switch(typeof arguments[0]){case"string":params.title=arguments[0],params.text=arguments[1]||"",params.type=arguments[2]||"";break;case"object":if(arguments[0].title===undefined)return logStr('Missing "title" argument!'),!1;params.title=arguments[0].title;for(var availableCustoms=["text","type","customClass","allowOutsideClick","showConfirmButton","showCancelButton","closeOnConfirm","closeOnCancel","timer","confirmButtonColor","cancelButtonText","imageUrl","imageSize","html","animation","allowEscapeKey","inputType"],numCustoms=availableCustoms.length,customIndex=0;numCustoms>customIndex;customIndex++){var customName=availableCustoms[customIndex];params[customName]=argumentOrDefault(customName)}params.confirmButtonText=params.showCancelButton?"Confirm":defaultParams.confirmButtonText,params.confirmButtonText=argumentOrDefault("confirmButtonText"),params.doneFunction=arguments[1]||null;break;default:return logStr('Unexpected type of argument! Expected "string" or "object", got '+typeof arguments[0]),!1}setParameters(params),fixVerticalPosition(),openModal();for(var modal=getModal(),onButtonEvent=function(event){var e=event||window.event,target=e.target||e.srcElement,targetedConfirm=-1!==target.className.indexOf("confirm"),targetedOverlay=-1!==target.className.indexOf("sweet-overlay"),modalIsVisible=hasClass(modal,"visible"),doneFunctionExists=params.doneFunction&&"true"===modal.getAttribute("data-has-done-function");switch(e.type){case"mouseover":targetedConfirm&&params.confirmButtonColor&&(target.style.backgroundColor=colorLuminance(params.confirmButtonColor,-.04));break;case"mouseout":targetedConfirm&&params.confirmButtonColor&&(target.style.backgroundColor=params.confirmButtonColor);break;case"mousedown":targetedConfirm&&params.confirmButtonColor&&(target.style.backgroundColor=colorLuminance(params.confirmButtonColor,-.14));break;case"mouseup":targetedConfirm&&params.confirmButtonColor&&(target.style.backgroundColor=colorLuminance(params.confirmButtonColor,-.04));break;case"focus":var $confirmButton=modal.querySelector("button.confirm"),$cancelButton=modal.querySelector("button.cancel");targetedConfirm?$cancelButton.style.boxShadow="none":$confirmButton.style.boxShadow="none";break;case"click":targetedConfirm&&doneFunctionExists&&modalIsVisible?handleConfirm():doneFunctionExists&&modalIsVisible||targetedOverlay?handleCancel():isDescendant(modal,target)&&"BUTTON"===target.tagName&&sweetAlert.close()}},$buttons=modal.querySelectorAll("button"),i=0;i<$buttons.length;i++)$buttons[i].onclick=onButtonEvent,$buttons[i].onmouseover=onButtonEvent,$buttons[i].onmouseout=onButtonEvent,$buttons[i].onmousedown=onButtonEvent,$buttons[i].onmouseup=onButtonEvent,$buttons[i].onfocus=onButtonEvent;getOverlay().onclick=onButtonEvent;var $okButton=modal.querySelector("button.confirm"),$cancelButton=modal.querySelector("button.cancel"),$modalButtons=modal.querySelectorAll("button[tabindex]");previousWindowKeyDown=window.onkeydown,window.onkeydown=handleKeyDown,window.onfocus=function(){window.setTimeout(function(){lastFocusedButton!==undefined&&(lastFocusedButton.focus(),lastFocusedButton=undefined)},0)}},sweetAlert.setDefaults=swal.setDefaults=function(userParams){if(!userParams)throw new Error("userParams is required");if("object"!=typeof userParams)throw new Error("userParams has to be a object");extend(defaultParams,userParams)},sweetAlert.close=swal.close=function(){var modal=getModal();fadeOut(getOverlay(),5),fadeOut(modal,5),removeClass(modal,"showSweetAlert"),addClass(modal,"hideSweetAlert"),removeClass(modal,"visible");var $successIcon=modal.querySelector(".sa-icon.sa-success");removeClass($successIcon,"animate"),removeClass($successIcon.querySelector(".sa-tip"),"animateSuccessTip"),removeClass($successIcon.querySelector(".sa-long"),"animateSuccessLong");var $errorIcon=modal.querySelector(".sa-icon.sa-error");removeClass($errorIcon,"animateErrorIcon"),removeClass($errorIcon.querySelector(".sa-x-mark"),"animateXMark");var $warningIcon=modal.querySelector(".sa-icon.sa-warning");removeClass($warningIcon,"pulseWarning"),removeClass($warningIcon.querySelector(".sa-body"),"pulseWarningIns"),removeClass($warningIcon.querySelector(".sa-dot"),"pulseWarningIns"),removeClass(document.body,"stop-scrolling"),window.onkeydown=previousWindowKeyDown,previousActiveElement&&previousActiveElement.focus(),lastFocusedButton=undefined,clearTimeout(modal.timeout)},sweetAlert.showInputError=swal.showInputError=function(errorMessage){var modal=getModal(),$errorIcon=modal.querySelector(".sa-input-error");addClass($errorIcon,"show");var $errorContainer=modal.querySelector(".sa-error-container");addClass($errorContainer,"show"),$errorContainer.querySelector("p").innerHTML=errorMessage,modal.querySelector("input").focus()},sweetAlert.resetInputError=swal.resetInputError=function(event){if(event&&13===event.keyCode)return!1;var $modal=getModal(),$errorIcon=$modal.querySelector(".sa-input-error");removeClass($errorIcon,"show");var $errorContainer=$modal.querySelector(".sa-error-container");removeClass($errorContainer,"show")},"function"==typeof define&&define.amd?define(function(){return sweetAlert}):"undefined"!=typeof module&&module.exports?module.exports=sweetAlert:"undefined"!=typeof window&&(window.sweetAlert=window.swal=sweetAlert)}(window,document);