1/** 2 * tingle.js - A simple modal plugin written in pure JavaScript 3 * @version v0.16.0 4 * @link https://github.com/robinparisi/tingle#readme 5 * @license MIT 6 */(function(root,factory){typeof define=="function"&&define.amd?define(factory):typeof exports=="object"?module.exports=factory():root.tingle=factory()})(this,function(){var isBusy=!1;function Modal(options){var defaults={onClose:null,onOpen:null,beforeOpen:null,beforeClose:null,stickyFooter:!1,footer:!1,cssClass:[],closeLabel:"Close",closeMethods:["overlay","button","escape"]};this.opts=extend({},defaults,options),this.init()}Modal.prototype.init=function(){if(!this.modal)return _build.call(this),_bindEvents.call(this),document.body.appendChild(this.modal,document.body.firstChild),this.opts.footer&&this.addFooter(),this},Modal.prototype._busy=function(state){isBusy=state},Modal.prototype._isBusy=function(){return isBusy},Modal.prototype.destroy=function(){this.modal!==null&&(this.isOpen()&&this.close(!0),_unbindEvents.call(this),this.modal.parentNode.removeChild(this.modal),this.modal=null)},Modal.prototype.isOpen=function(){return!!this.modal.classList.contains("tingle-modal--visible")},Modal.prototype.open=function(){if(!this._isBusy()){this._busy(!0);var self=this;return typeof self.opts.beforeOpen=="function"&&self.opts.beforeOpen(),this.modal.style.removeProperty?this.modal.style.removeProperty("display"):this.modal.style.removeAttribute("display"),document.getSelection().removeAllRanges(),this._scrollPosition=window.pageYOffset,document.body.classList.add("tingle-enabled"),document.body.style.top=-this._scrollPosition+"px",this.setStickyFooter(this.opts.stickyFooter),this.modal.classList.add("tingle-modal--visible"),Motion.animate(this.modal,{opacity:1}),window.innerWidth>767&&Motion.animate(this.modalBox,{opacity:[0,1],scale:[.5,1]},{duration:.4,easing:"ease-out"}),typeof self.opts.onOpen=="function"&&self.opts.onOpen.call(self),self._busy(!1),this.checkOverflow(),this}},Modal.prototype.close=function(force){if(!this._isBusy()){if(this._busy(!0),force=force||!1,typeof this.opts.beforeClose=="function"){var close=this.opts.beforeClose.call(this);if(!close){this._busy(!1);return}}document.body.classList.remove("tingle-enabled"),document.body.style.top=null,window.scrollTo({top:this._scrollPosition,behavior:"instant"}),this.modal.classList.add("remove-loading"),Motion.animate(this.modal,{opacity:0}),window.innerWidth>767&&Motion.animate(this.modalBox,{opacity:0,scale:.5},{duration:.4,easing:"ease-in"});var self=this;this.isOpen()&&this.close(!0),_unbindEvents.call(this),setTimeout(function(){self.modal.parentNode.removeChild(self.modal),self.modal=null},250),self._busy(!1)}},Modal.prototype.setContent=function(content){return typeof content=="string"?this.modalBoxContent.innerHTML=content:(this.modalBoxContent.innerHTML="",this.modalBoxContent.appendChild(content)),this.isOpen()&&this.checkOverflow(),this},Modal.prototype.getContent=function(){return this.modalBoxContent},Modal.prototype.addFooter=function(){return _buildFooter.call(this),this},Modal.prototype.setFooterContent=function(content){return this.modalBoxFooter.innerHTML=content,this},Modal.prototype.getFooterContent=function(){return this.modalBoxFooter},Modal.prototype.setStickyFooter=function(isSticky){return this.isOverflow()||(isSticky=!1),isSticky?(this.modalBox.contains(this.modalBoxFooter)&&(this.modalBox.removeChild(this.modalBoxFooter),this.modal.appendChild(this.modalBoxFooter),this.modalBoxFooter.classList.add("tingle-modal-box__footer--sticky"),_recalculateFooterPosition.call(this)),this.modalBoxContent.style["padding-bottom"]=this.modalBoxFooter.clientHeight+20+"px"):this.modalBoxFooter&&(this.modalBox.contains(this.modalBoxFooter)||(this.modal.removeChild(this.modalBoxFooter),this.modalBox.appendChild(this.modalBoxFooter),this.modalBoxFooter.style.width="auto",this.modalBoxFooter.style.left="",this.modalBoxContent.style["padding-bottom"]="",this.modalBoxFooter.classList.remove("tingle-modal-box__footer--sticky"))),this},Modal.prototype.addFooterBtn=function(label,cssClass,callback){var btn=document.createElement("button");return btn.innerHTML=label,btn.addEventListener("click",callback),typeof cssClass=="string"&&cssClass.length&&cssClass.split(" ").forEach(function(item){btn.classList.add(item)}),this.modalBoxFooter.appendChild(btn),btn},Modal.prototype.resize=function(){console.warn("Resize is deprecated and will be removed in version 1.0")}
6,Modal.prototype.isOverflow=function(){var viewportHeight=window.innerHeight,modalHeight=this.modalBox.clientHeight;return modalHeight>=viewportHeight},Modal.prototype.checkOverflow=function(){this.modal.classList.contains("tingle-modal--visible")&&(this.isOverflow()?this.modal.classList.add("tingle-modal--overflow"):this.modal.classList.remove("tingle-modal--overflow"),!this.isOverflow()&&this.opts.stickyFooter?this.setStickyFooter(!1):this.isOverflow()&&this.opts.stickyFooter&&(_recalculateFooterPosition.call(this),this.setStickyFooter(!0)))};function closeIcon(){return'<svg width="13" height="13" viewBox="0 0 13 13" fill="none" class="transition"><use href="#icon-close"></use></svg>'}function _scrollbarWidth(){var scrollDiv=document.createElement("div");scrollDiv.style.width="100px",scrollDiv.style.height="100px",scrollDiv.style.overflow="scroll",scrollDiv.style.position="absolute",scrollDiv.style.top="-9999px",document.body.appendChild(scrollDiv);var scrollbarWidth=scrollDiv.offsetWidth-scrollDiv.clientWidth;return document.body.removeChild(scrollDiv),scrollbarWidth}function _recalculateFooterPosition(){this.modalBoxFooter&&(this.modalBoxFooter.style.width=this.modalBox.clientWidth+"px",this.modalBoxFooter.style.left=this.modalBox.offsetLeft+"px")}function _build(){this.modal=document.createElement("div"),this.modal.classList.add("tingle-modal"),(this.opts.closeMethods.length===0||this.opts.closeMethods.indexOf("overlay")===-1)&&this.modal.classList.add("tingle-modal--noOverlayClose"),this.modal.style.display="none",this.opts.cssClass.forEach(function(item){typeof item=="string"&&this.modal.classList.add(item)},this),this.opts.closeMethods.indexOf("button")!==-1&&(this.modalCloseBtn=document.createElement("button"),this.modalCloseBtn.type="button",this.modalCloseBtn.classList.add("tingle-modal__close","btn-reset","hover-svg-zoom","pointer","absolute","right-10","top-10","z-1","w-44","h-44","inline-flex","content-center"),this.modalCloseBtnIcon=document.createElement("span"),this.modalCloseBtnIcon.classList.add("tingle-modal__closeIcon"),this.modalCloseBtnIcon.innerHTML=closeIcon(),this.modalCloseBtnLabel=document.createElement("span"),this.modalCloseBtnLabel.classList.add("tingle-modal__closeLabel"),this.modalCloseBtnLabel.innerHTML=this.opts.closeLabel,this.modalCloseBtn.appendChild(this.modalCloseBtnIcon),this.modalCloseBtn.appendChild(this.modalCloseBtnLabel)),this.modalBox=document.createElement("div"),this.modalBox.classList.add("tingle-modal-box"),this.modalBoxContent=document.createElement("div"),this.modalBoxContent.classList.add("tingle-modal-box__content"),this.opts.closeMethods.indexOf("button")!==-1&&this.modalBox.appendChild(this.modalCloseBtn),this.modalBox.appendChild(this.modalBoxContent),this.modal.appendChild(this.modalBox)}function _buildFooter(){this.modalBoxFooter=document.createElement("div"),this.modalBoxFooter.classList.add("tingle-modal-box__footer"),this.modalBox.appendChild(this.modalBoxFooter)}function _bindEvents(){this._events={clickCloseBtn:this.close.bind(this),clickOverlay:_handleClickOutside.bind(this),resize:this.checkOverflow.bind(this),keyboardNav:_handleKeyboardNav.bind(this)},this.opts.closeMethods.indexOf("button")!==-1&&this.modalCloseBtn.addEventListener("click",this._events.clickCloseBtn),this.modal.addEventListener("mousedown",this._events.clickOverlay),window.addEventListener("resize",this._events.resize),document.addEventListener("keydown",this._events.keyboardNav)}function _handleKeyboardNav(event){this.opts.closeMethods.indexOf("escape")!==-1&&event.which===27&&this.isOpen()&&this.close()}function _handleClickOutside(event){var scrollbarWidth=this.modal.offsetWidth-this.modal.clientWidth,clickedOnScrollbar=event.clientX>=this.modal.offsetWidth-15,isScrollable=this.modal.scrollHeight!==this.modal.offsetHeight;navigator.platform==="MacIntel"&&scrollbarWidth===0&&clickedOnScrollbar&&isScrollable||this.opts.closeMethods.indexOf("overlay")!==-1&&!_findAncestor(event.target,"tingle-modal")&&event.clientX<this.modal.clientWidth&&this.close()}function _findAncestor(el,cls){for(;(el=el.parentElement)&&!el.classList.contains(cls););return el}function _unbindEvents(){this.opts.closeMethods.indexOf("button")!==-1&&this.modalCloseBtn.removeEventListener("click",this._events.clickCloseBtn),this.modal.removeEventListener("mousedown",this._events.clickOverlay),window.removeEventListener("resize",this._events.resize),document.removeEventListener("keydown",this._events.keyboardNav)}function extend(){for(var i=1;i<arguments.length;i++)for(var key in arguments[i])arguments[i].hasOwnProperty(key)&&(arguments[0][key]=arguments[i][key]);return arguments[0]}return{modal:Modal}}); 7//# sourceMappingURL=/cdn/shop/t/43/assets/tingle.js.map?v=131252301594928729271783667790
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.