1(()=>{const Cookies={MINUTE_IN_SECONDS:60,HOUR_IN_SECONDS:this.MINUTE_IN_SECONDS*60,DAY_IN_SECONDS:this.HOUR_IN_SECONDS*24,WEEK_IN_SECONDS:this.DAY_IN_SECONDS*7,MONTH_IN_SECONDS:this.DAY_IN_SECONDS*30,closedPopups:"holler-closed-popups",popupConversions:"holler-popup-conversions",popupViews:"holler-popup-views",pageViews:"holler-page-views",sessions:"holler-sessions",addClosedPopup(id){let allClosed=this.getCookie(this.closedPopups,"").split(",");allClosed.push(id);this.setCookie(this.closedPopups,allClosed.join(),HollerBox.cookie_lifetime)},isClosed(id){let allClosed=this.getCookie(this.closedPopups,"").split(",").map(id=>parseInt(id));return allClosed.includes(id)},addPopupCount(cookie,id){let counts=JSON.parse(this.getCookie(cookie,"{}"));if(!counts){counts={}}if(counts[id]){counts[id]+=1}else{counts[id]=1}this.setCookie(cookie,JSON.stringify(counts),HollerBox.cookie_lifetime)},getPopupCount(cookie,id){let counts=JSON.parse(this.getCookie(cookie,"{}"));return parseInt(counts[id]??0)},addPopupConversion(id){this.addPopupCount(this.popupConversions,id)},getPopupConversions(id){return this.getPopupCount(this.popupConversions,id)},addPopupView(id){this.addPopupCount(this.popupViews,id)},getPopupViews(id){return this.getPopupCount(this.popupViews,id)},addPageView(){this.setCookie(this.pageViews,this.getPageViews()+1,this.DAY_IN_SECONDS)},getPageViews(){return parseInt(this.getCookie(this.pageViews,0))},setCookie(name,value,duration){if(isBuilderPreview()){return}let d=new Date;d.setTime(d.getTime()+duration*1e3);let expires="expires="+d.toUTCString();document.cookie=name+"="+value+";"+expires+";path=/"},getCookie(cname,_default=null){let name=cname+"=";let ca=document.cookie.split(";");for(let i=0;i<ca.length;i++){let c=ca[i];while(c.charAt(0)==" "){c=c.substring(1)}if(c.indexOf(name)==0){return c.substring(name.length,c.length)}}return _default},getSessions(){let obj=JSON.parse(this.getCookie(this.sessions,"{}"));return parseInt(obj.sessions||0)},maybeAddSession(){let obj=JSON.parse(this.getCookie(this.sessions,"{}"));let lastSession=new Date(obj.lastSession);lastSession.setDate(lastSession.getDate()+1);let now=new Date;if(now>lastSession){this.setCookie(this.sessions,JSON.stringify({sessions:parseInt(obj.sessions)+1,lastSession:now.toString()}),HollerBox.cookie_lifetime)}},hasAccepted(){if(!HollerBox.settings.cookie_compliance){return true}let{cookie_name:cookie_name="",cookie_value:cookie_value=""}=HollerBox.settings;return this.getCookie(cookie_name)===cookie_value}};function ApiError(message){this.name="ApiError";this.message=message}ApiError.prototype=Error.prototype;async function apiPost(url="",data={},opts={}){const response=await fetch(url,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":HollerBox.nonces._wprest},body:JSON.stringify(data),...opts});let json=await response.json();if(!response.ok){throw new ApiError(json.message)}return json}const maybeLog=error=>{if(HollerBox.settings?.script_debug_mode){console.debug(error)}};const overlay=()=>{return` 2 <div class="holler-box-overlay"></div>`};const closeButton=()=>{return` 3 <button class="holler-box-modal-close">×</button>`};const credit=()=>{if(HollerBox.settings?.credit_disabled){return""}return` 4 <div class="holler-box-credit"><a href="https://hollerwp.com/">â¡ by 5 HollerBox</a></div>`};const createHTML=HTML=>{let div=document.createElement("div");div.innerHTML=HTML;return div.firstElementChild};const gdprInput=()=>{const HTML=createHTML(HollerBox.settings.gdpr_text);return`<label class="holler-gdpr-consent"> 6 <input type="checkbox" 7 name="gdpr_consent" 8 value="yes" required> 9 <span>${HTML.innerHTML}</span></label>`};const nameInput=(placeholder="Your name",required=true)=>{return`<input class="holler-box-input" type="text" name="name" 10 placeholder="${placeholder}" ${required?"required":""}>`};const phoneInput=(placeholder="Mobile Number",required=false)=>{return`<input class="holler-box-input" type="tel" name="phone" 11 placeholder="${placeholder}" ${required?"required":""}>`};const emailInput=(placeholder="Your email")=>{return`<input class="holler-box-input" type="email" name="email" 12 placeholder="${placeholder}" required>`};const submitButton=(text,type="submit")=>{return` 13 <button type="${type}" class="holler-box-button">${text}</button>`};const __title=title=>{return` 14 <h2 class="holler-box-modal-title">${title}</h2> 15 `};const __content=content=>{return` 16 <div class="holler-box-modal-content"> 17 ${content} 18 </div> 19 `};const __chatResponse=content=>{return` 20 <div class="holler-box-chat-response"> 21 <div class="content"> 22 ${content} 23 </div> 24 </div> 25 `};const __chatMessage=({content,avatar})=>{content=`<div class="content">${content}</div>`;return` 26 <div class="holler-box-chat-message"> 27 ${avatar?`<img src="${avatar}" class="avatar" alt="">`:""} 28 ${content} 29 </div> 30 `};const notificationClosedTemplate=({id,position})=>{return` 31 <div id="${id}" class="holler-box holler-notification-box"> 32 <div class="positioner ${position}"> 33 <div class="animation slide-in"> 34 <div class="holler-box-modal notification-closed"> 35 <svg xmlns="http://www.w3.org/2000/svg"
36 viewBox="0 0 512 512"> 37 <rect width="107.6" height="145.6" x="319.1" 38 y="76.6" fill="#fff" rx="5" ry="5"/> 39 <path fill="#f44336" 40 d="M373 0a139 139 0 1 0 1 278 139 139 0 0 0-1-278zm22 187a16 16 0 0 1-32 0v-70h-11a16 16 0 0 1 0-32h27c8 0 16 8 16 16zm0 0"/> 41 <path fill="#ffa000" 42 d="M299 427a85 85 0 1 1-171 0 85 85 0 0 1 171 0zm0 0"/> 43 <path fill="#ffc107" 44 d="M380 320h-7A182 182 0 0 1 220 43h-7c-82 0-149 67-149 149v59c0 43-18 83-51 110a37 37 0 0 0 24 66h352a37 37 0 0 0 24-66c-13-12-24-26-33-41zm0 0"/> 45 </svg> 46 </div> 47 </div> 48 </div> 49 </div>`};const SubmitActions={close:popup=>{popup.close()},redirect:popup=>{let{redirect_url:redirect_url=""}=popup;let url=new URL(redirect_url);let home=new URL(HollerBox.home_url);if(isBuilderPreview()){if(url.hostname!==home.hostname){popup.close();return}url.searchParams.append("suppress_hollerbox",1)}window.open(url,"_self")},message:popup=>{popup.open()}};function sanitizeTextField(string){const map={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};const reg=/[&<>"'/]/gi;return string.replace(reg,match=>map[match])}const CommonActions={maybeDisableScrolling:popup=>{if(popup.disable_scrolling){document.body.classList.add("disable-scrolling")}},enableScrolling:()=>{document.body.classList.remove("disable-scrolling")},notificationClosed:popup=>{popup.closed=true;popup.open()},notificationOpened:popup=>{if(popup.closed){document.getElementById(popup.id).addEventListener("click",e=>{popup.close().then(()=>{popup.closed=false;popup.open()})})}},formSubmitted:(popup,filters={})=>{if(popup.use_custom_form){let customForm;let customHTML=createHTML(popup.custom_form_html);if(customHTML.tagName==="FORM"){customForm=customHTML}else{customForm=customHTML.querySelector("form");if(!customForm){alert("Invalid custom form HTML");return}}let form=popup.querySelector("form.holler-box-form");customForm.classList.add("holler-box-form","custom-form");Array.from(customForm.elements).forEach(el=>{switch(el.tagName){case"INPUT":switch(el.type){default:el.classList.add("holler-box-input");break;case"submit":case"button":el.classList.add("holler-box-button");break;case"radio":case"checkbox":break}break;case"TEXTAREA":case"SELECT":el.classList.add("holler-box-input");break;case"BUTTON":el.classList.add("holler-box-button");break}});form.replaceWith(customForm);customForm.addEventListener("submit",e=>{if(isBuilderPreview()){e.preventDefault()}customForm.querySelector("button.holler-box-button").innerHTML='<span class="holler-spinner"></span>';Array.from(customForm.elements).forEach(el=>el.disabled=true);popup.converted()});return}const{modifyFormData:modifyFormData=fd=>{},modifyPayload:modifyPayload=pl=>{}}=filters;const{id,after_submit:after_submit="close"}=popup;document.querySelector(`#${id} form.holler-box-form`).addEventListener("submit",e=>{e.preventDefault();let form=e.target;let formData=new FormData(form);formData.append("location",window.location.href);formData.append("referer",document.referrer);modifyFormData(formData);form.querySelectorAll("input, button").forEach(el=>el.disabled=true);form.querySelector("button").innerHTML='<span class="holler-spinner"></span>';let payload=Object.fromEntries(formData);modifyPayload(payload);const submit=()=>apiPost(`${HollerBox.routes.submit}/${popup.ID}`,payload).then(({status:status="success",failures:failures=[]})=>{if(status==="failed"){if(!failures.length){alert("Something when wrong, please try again later.");popup.close();return}console.log(failures);popup.querySelector("form").innerHTML=[`<div class="hollerbox-integration-errors">`,`<p>There are issues with some of your integrations:</p>`,`<ul>`,...failures.map(f=>`<li>${f}</li>`),`</ul>`,`<p>Only admins see this message.</p>`,`</div>`].join("");return}popup.submitted=true;popup.converted(false);SubmitActions[after_submit](popup);document.dispatchEvent(new CustomEvent("holler_submit",{formData:formData,form:form}))}).catch(e=>{maybeLog(e);popup.close()});return submit()})},buttonClicked:popup=>{const{id,button_link}=popup;let button=document.querySelector(`#${id} button.holler-box-button`);button.addEventListener("click",e=>{e.preventDefault();button.innerHTML='<span class="holler-spinner"></span>';popup.converted().then(()=>{window.open(button_link,"_self")})})}};const isGDPREnabled=()=>{return HollerBox.settings?.gdpr_enabled??false};const formProps=({enable_name:enable_name=true,enable_phone:enable_phone=false,...props})=>({name:enable_name,phone:enable_phone,...props});const form=props=>{const{email:email=true,name:name=true,phone:phone=false,direction:direction="vertical",name_placeholder:name_placeholder="Name",email_placeholder:email_placeholder="Email",phone_placeholder:phone_placeholder="Phone",button_text:button_text="Subscribe",phone_required:phone_required=false,name_required:name_required=true}=formProps(props);let classes=["holler-box-form",direction,name?"has-name":"",phone?"has-phone":"",isGDPREnabled()?"has-gdpr":""];return` 50 <form class="${classes.join(" ")}"> 51 <div class="fields"> 52 ${name?nameInput(name_placeholder,name_required):""} 53 ${email?emailInput(email_placeholder):""} 54 ${phone?phoneInput(phone_placeholder,phone_required):""} 55 ${direction==="vertical"&&isGDPREnabled()?gdprInput():""} 56 ${submitButton(button_text)} 57 </div> 58 ${direction==="horizontal"&&isGDPREnabled()?gdprInput():""} 59 </form>`};const PopupTemplates={notification_box:{render:({id:id="",position:position="bottom-right",post_content:post_content="",avatar:avatar="",closed:closed=false})=>
59{if(closed){return notificationClosedTemplate({id:id,position:position})}return` 60 <div id="${id}" class="holler-box holler-notification-box"> 61 <div class="positioner ${position}"> 62 <div class="animation slide-in"> 63 <div class="holler-box-modal"> 64 ${closeButton()} 65 <div class="display-flex"> 66 ${avatar?`<img src="${avatar}" alt="">`:""} 67 ${__content(post_content)} 68 </div> 69 ${credit()} 70 </div> 71 </div> 72 </div> 73 </div>`},onOpen:CommonActions.notificationOpened,onClosed:CommonActions.notificationClosed},notification_box_with_button:{render:({id:id="",position:position="bottom-right",post_content:post_content="",avatar:avatar="",button_text:button_text="",closed:closed=false})=>{if(closed){return notificationClosedTemplate({id:id,position:position})}return` 74 <div id="${id}" 75 class="holler-box holler-notification-box with-button"> 76 <div class="positioner ${position}"> 77 <div class="animation slide-in"> 78 <div class="holler-box-modal "> 79 ${closeButton()} 80 <div class="display-flex"> 81 ${avatar?`<img src="${avatar}" alt="">`:""} 82 ${__content(post_content)} 83 </div> 84 <div class="holler-button-cta"> 85 ${submitButton(button_text,"button")} 86 </div> 87 ${credit()} 88 </div> 89 </div> 90 </div> 91 </div>`},onOpen:popup=>{CommonActions.notificationOpened(popup);CommonActions.buttonClicked(popup)},onClosed:CommonActions.notificationClosed},notification_box_with_form:{render:({id:id="",position:position="bottom-right",post_content:post_content="",avatar:avatar="",button_text:button_text="Signup",email_placeholder:email_placeholder="Email",success_message:success_message="",closed:closed=false,submitted:submitted=false})=>{if(closed){return notificationClosedTemplate({id:id,position:position})}return` 92 <div id="${id}" 93 class="holler-box holler-notification-box with-form ${submitted?"no-animation":""}"> 94 <div class="positioner ${position}"> 95 <div class="animation slide-in"> 96 <div class="holler-box-modal"> 97 ${closeButton()} 98 <div class="display-flex"> 99 ${avatar?`<img src="${avatar}" alt="">`:""} 100 ${__content(submitted?success_message:post_content)} 101 </div> 102 ${submitted?"":form({direction:"horizontal",name:false,button_text:button_text,email_placeholder:email_placeholder})} 103 ${credit()} 104 </div> 105 </div> 106 </div> 107 </div>`},onOpen:popup=>{CommonActions.notificationOpened(popup);CommonActions.formSubmitted(popup)},onClosed:CommonActions.notificationClosed},fake_chat:{render:popup=>{const{id:id="",position:position="bottom-right",post_content:post_content="",avatar:avatar="",button_text:button_text="",message_placeholder:message_placeholder="Type your message",state:state="message",closed:closed=false,doAnimations:doAnimations=true}=popup;if(closed){return` 108 <div id="${id}" class="holler-box holler-notification-box"> 109 <div class="positioner ${position}"> 110 <div class="animation slide-in"> 111 <div class="holler-box-modal notification-closed"> 112 <svg xmlns="http://www.w3.org/2000/svg"
113 viewBox="0 0 512 512"> 114 <path fill="#fff" 115 d="M303.4 61.4A207 207 0 0 0 195 31C89 31 0 110 0 211a169 169 0 0 0 32 98.7L2.6 401.4a15 15 0 0 0 21.1 18l88.8-45.2c3.6 1.6 7.3 3 11 4.3A198.2 198.2 0 0 1 92 271c0-114.9 96.7-203.2 211.4-209.6z"/> 116 <path fill="#fff" 117 d="M480 369.7a169 169 0 0 0 32-98.7c0-101.1-89-180-195-180s-195 79-195 180c0 101.1 89 180 195 180 28.4 0 56.7-5.8 82.4-16.8l88.8 45.2a15 15 0 0 0 21-18zM256 286a15 15 0 1 1 0-30 15 15 0 0 1 0 30zm60 0a15 15 0 1 1 0-30 15 15 0 0 1 0 30zm60 0a15 15 0 1 1 0-30 15 15 0 0 1 0 30z"/> 118 </svg> 119 </div> 120 </div> 121 </div> 122 </div>`}if(!popup.messages){popup.messages=[]}if(!popup.messages.length){popup.messages.push(__chatMessage({avatar:avatar,content:post_content}))}let input;switch(state){default:case"message":case"message_2":input=`<textarea rows="1" name="message" 123 placeholder="${message_placeholder}" 124 class="holler-box-input" required></textarea>`;break;case"name":input=nameInput();break;case"email":input=emailInput();break}if(state==="done"){return` 125 <div id="${id}" 126 class="holler-box holler-notification-box with-chat"> 127 <div class="positioner ${position}"> 128 <div class="animation ${doAnimations?"slide-in":""}"> 129 <div class="holler-box-modal "> 130 ${closeButton()} 131 ${popup.messages.join("")}
132 <div class="close-chat-wrap"> 133 <button class="close-chat">× Close 134 chat 135 </button> 136 </div> 137 ${credit()} 138 </div> 139 </div> 140 </div> 141 </div>`}return` 142 <div id="${id}" 143 class="holler-box holler-notification-box with-chat"> 144 <div class="positioner ${position}"> 145 <div class="animation ${doAnimations?"slide-in":""}"> 146 <div class="holler-box-modal "> 147 ${closeButton()} 148 ${popup.messages.join("")} 149 <form class="holler-chat-form"> 150 ${input} 151 <button type="submit" class="send-message"> 152 <svg xmlns="http://www.w3.org/2000/svg"
153 viewBox="0 0 404.644 404.644"> 154 <path fill="currentColor" 155 d="M5.535 386.177c-3.325 15.279 8.406 21.747 19.291 16.867l367.885-188.638h.037c4.388-2.475 6.936-6.935 6.936-12.08 0-5.148-2.548-9.611-6.936-12.085h-.037L24.826 1.6C13.941-3.281 2.21 3.189 5.535 18.469c.225 1.035 21.974 97.914 33.799 150.603l192.042 33.253-192.042 33.249C27.509 288.26 5.759 385.141 5.535 386.177z"/> 156 </svg> 157 </button> 158 </form> 159 ${credit()} 160 </div> 161 </div> 162 </div> 163 </div>`},beforeOpen:popup=>{if(!popup.state){popup.state="message"}if(!popup.responses){popup.responses={}}if(!popup.messages){popup.messages=[]}},onOpen:popup=>{if(popup.closed){return CommonActions.notificationOpened(popup)}let modal=popup.querySelector(".holler-box-modal");modal.scrollTop=modal.scrollHeight;const form=document.querySelector(`#${popup.id} form.holler-chat-form`);if(popup.state!=="message"){document.querySelector(`#${popup.id} .holler-box-input`)?.focus()}if(["message","more"].includes(popup.state)){document.querySelector(`#${popup.id} .holler-box-input`).addEventListener("keydown",e=>{if(e.key==="Enter"&&!e.shiftKey){form.dispatchEvent(new Event("submit"))}})}if(popup.state==="done"){document.querySelector(`#${popup.id} .close-chat`).addEventListener("click",()=>{popup.close()})}if(!form){return}form.addEventListener("submit",e=>{e.preventDefault();let fd=new FormData(e.target);switch(popup.state){default:case"message":let message=sanitizeTextField(fd.get("message"));popup.responses.message=message;popup.messages.push(__chatResponse(message));popup.messages.push(__chatMessage({content:popup.name_prompt??"<p>What is your name?</p>",avatar:popup.avatar}));popup.state="name";break;case"name":let name=sanitizeTextField(fd.get("name"));popup.responses.name=name;popup.messages.push(__chatResponse(name));popup.messages.push(__chatMessage({content:popup.email_prompt??"<p>What is your best email address?</p>",avatar:popup.avatar}));popup.state="email";break;case"email":popup.responses.email=fd.get("email");popup.messages.push(__chatResponse(fd.get("email")));popup.messages.push(__chatMessage({content:popup.message_prompt??"<p>Thanks for providing that information!</p><p>Can you please describe your needs in more detail?</p>",avatar:popup.avatar}));popup.state="more";break;case"more":let message2="\n\n"+sanitizeTextField(fd.get("message"));popup.responses.message+=message2;popup.messages.push(__chatResponse(message2));popup.state="done";apiPost(`${HollerBox.routes.submit}/${popup.ID}`,popup.responses).then(r=>{popup.submitted=true;popup.converted(false);document.dispatchEvent(new CustomEvent("holler_submit",this.responses))}).then(()=>{switch(popup.after_submit){case"message":popup.messages.push(__chatMessage({content:popup.success_message,avatar:popup.avatar}));popup.open();break;case"close":popup.close();break;case"redirect":SubmitActions["redirect"](popup);break}}).catch(e=>maybeLog(e));break}popup.doAnimations=false;popup.open()})},onClosed:popup=>{CommonActions.notificationClosed(popup);popup.doAnimations=true}},popup_custom:{render:({id:id="",position:position="center-center",animation:animation="appear",post_content:post_content="",overlay_enabled:overlay_enabled=true})=>{return` 164 <div id="${id}" class="holler-box holler-popup holler-popup-custom"> 165 ${overlay_enabled?overlay():""} 166 <div class="positioner ${position}"> 167 <div class="animation ${animation}"> 168 <div class="holler-box-modal"> 169 ${closeButton()} 170 ${__content(post_content)} 171 </div> 172 ${credit()} 173 </div> 174 </div> 175 </div>`},onOpen:CommonActions.maybeDisableScrolling,onClosed:CommonActions.enableScrolling},popup_standard:{render:({id:id="",position:position="center-center",animation:animation="appear",post_content:post_content="",button_text:button_text="Subscribe",submitted:submitted=false,success_message:success_message="",overlay_enabled:overlay_enabled=true,...props})=>{return` 176 <div id="${id}" 177 class="holler-box holler-popup holler-popup-standard ${submitted?"no-animation":""}"> 178 ${overlay_enabled?overlay():""} 179 <div class="positioner ${position}"> 180 <div class="animation ${animation}"> 181 <div class="holler-box-modal"> 182 ${closeButton()} 183 ${__content(submitted?success_message:post_content)} 184 ${submitted?"":form({direction:"vertical",...props})} 185 </div> 186 ${credit()} 187 </div> 188 </div> 189 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_image_left:{render:({id:id="",position:position="center-center",animation:animation="appear",title:title="",post_content:post_content="",image_src:image_src="",button_text:button_text="Subscribe",submitted:submitted=false,success_message:success_message="",overlay_enabled:overlay_enabled=true,...props})=>{return` 190 <div id="${id}" 191 class="holler-box holler-popup holler-popup-image-left ${submitted?"no-animation":""}"> 192 ${overlay_enabled?overlay():""} 193 <div class="positioner ${position}"> 194 <div class="animation ${animation}"> 195 <div class="holler-box-modal"> 196 ${closeButton()} 197 <div class="display-flex"> 198 <div class="left image-width" 199 style="background-image: url('${image_src}')"> 200 </div> 201 <div class="right"> 202 ${__content(submitted?success_message:post_content)} 203 ${submitted?"":form({direction:"vertical",button_text:button_text,...props})} 204 </div> 205 </div> 206 </div> 207 ${credit()} 208 </div> 209 </div> 210 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_image_right:{render:({id:id="",position:position="center-center",animation:animation="appear",title:title="",post_content:post_content="",image_src:image_src="",submitted:submitted=false,success_message:success_message="",overlay_enabled:overlay_enabled=true,...props})=>{return` 211 <div id="${id}" 212 class="holler-box holler-popup holler-popup-image-right ${submitted?"no-animation":""}"> 213 ${overlay_enabled?overlay():""} 214 <div class="positioner ${position}"> 215 <div class="animation ${animation}"> 216 <div class="holler-box-modal"> 217 ${closeButton()} 218 <div class="display-flex"> 219 <div class="left"> 220 ${__content(submitted?success_message:post_content)} 221 ${submitted?"":form({direction:"vertical",...props})} 222 </div> 223 <div class="right image-width" 224 style="background-image: url('${image_src}')"> 225 </div> 226 </div> 227 </div> 228 ${credit()} 229 </div> 230 </div> 231 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_form_below:{render:({id:id="",position:position="center-center",animation:animation="appear",post_content:post_content="",image_src:image_src="",overlay_enabled:overlay_enabled=true,submitted:submitted=false,success_message:success_message="",...props})=>{return` 232 <div id="${id}" 233 class="holler-box holler-popup holler-popup-form-below ${submitted?"no-animation":""}"> 234 ${overlay_enabled?overlay():""} 235 <div class="positioner ${position}"> 236 <div class="animation ${animation}"> 237 <div class="holler-box-modal"> 238 ${closeButton()} 239 <div class="display-flex"> 240 <div class="left"> 241 ${__content(submitted?success_message:post_content)} 242 </div> 243 <div class="right image-width" 244 style="background-image: url('${image_src}')"> 245 </div> 246 </div> 247 ${submitted?"":form({direction:"horizontal",...props,phone:false})} 248 </div> 249 ${credit()} 250 </div> 251 </div> 252 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_progress_bar:{render:({id:id="",position:position="center-center",animation:animation="appear",post_content:post_content="",image_src:image_src="",overlay_enabled:overlay_enabled=true,submitted:submitted=false,success_message:success_message="",...props})=>{return` 253 <div id="${id}" 254 class="holler-box holler-popup holler-popup-progress-bar ${submitted?"no-animation":""}"> 255 ${overlay_enabled?overlay():""} 256 <div class="positioner ${position}"> 257 <div class="animation ${animation}"> 258 <div class="holler-box-modal"> 259 ${closeButton()} 260 <div class="holler-box-progress-bar-wrap"> 261 <div class="holler-box-progress-bar"> 262 <div 263 class="holler-box-progress-bar-fill ${submitted?"filled":""}"></div> 264 </div> 265 </div> 266 <div class="display-flex"> 267 <div class="left image-width" 268 style="background-image: url('${image_src}')"> 269 </div> 270 <div class="right"> 271 ${__content(submitted?success_message:post_content)} 272 ${submitted?"":form({direction:"vertical",...props})} 273 </div> 274 </div> 275 </div> 276 ${credit()} 277 </div> 278 </div> 279 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_image_beside_text_top:{render:({id:id="",position:position="center-center",animation:animation="appear",title:title="",post_content:post_content="",image_src:image_src="",overlay_enabled:overlay_enabled=true,submitted:submitted=false,success_message:success_message="",...props})=>{return` 280 <div id="${id}" 281 class="holler-box holler-popup holler-popup-image-beside-text-top ${submitted?"no-animation":""}"> 282 ${overlay_enabled?overlay():""} 283 <div class="positioner ${position}"> 284 <div class="animation ${animation}"> 285 <div class="holler-box-modal"> 286 ${closeButton()} 287 ${__content(submitted?success_message:post_content)} 288 <div class="display-flex"> 289 <div class="left image-width" 290 style="background-image: url('${image_src}')"> 291 </div> 292 ${submitted?"":form({direction:"vertical",...props})} 293 </div> 294 </div> 295 ${credit()} 296 </div> 297 </div> 298 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling},popup_full_image_background:{render:({id:id="",position:position="center-center",animation:animation="appear",image_src:image_src="",post_content:post_content="",overlay_enabled:overlay_enabled=true,submitted:submitted=false,success_message:success_message="",...props})=>{return` 299 <div id="${id}" 300 class="holler-box holler-popup holler-popup-full-image-background ${submitted?"no-animation":""}"> 301 ${overlay_enabled?overlay():""} 302 <div class="positioner ${position}"> 303 <div class="animation ${animation}"> 304 <div class="holler-box-modal" 305 style="background-image: url('${image_src}')"> 306 ${closeButton()} 307 ${__content(submitted?success_message:post_content)} 308 ${submitted?"":form({direction:"vertical",...props})} 309 </div> 310 ${credit()} 311 </div> 312 </div> 313 </div>`},onOpen:popup=>{CommonActions.formSubmitted(popup);CommonActions.maybeDisableScrolling(popup)},onClose:CommonActions.enableScrolling}};function getScrollPercent(){var h=document.documentElement,b=document.body,st="scrollTop",sh="scrollHeight";return(h[st]||b[st])/((h[sh]||b[sh])-h.clientHeight)*100}const PopupStack={stack:[],add(p){this.stack.push(p)},next(){let p=this.stack.pop();if(p){setTimeout(()=>{p.maybeOpen()},HollerBox.settings.stacked_delay*1e3)}}};const TriggerCallbacks={on_page_load:({delay:delay=1},show)=>{setTimeout(show,delay*1e3)},element_click:({selector:selector="",trigger_multiple:trigger_multiple="once"},show,popup)=>{document.querySelectorAll(selector).forEach(el=>{el.addEventListener("click",()=>{if(trigger_multiple==="multiple"){popup._triggered=false}show()})})},scroll_detection:({depth:depth=50},show)=>{document.addEventListener("scroll",()=>{if(getScrollPercent()>=parseInt(depth)){show()}})},exit_intent:(popup,show)=>{window.addEventListener("mouseout",e=>{if(!e.toElement&&!e.relatedTarget){show()}})}};const AdvancedDisplayRules={hide_if_converted:({},popup)=>popup.getConversions()===0,hide_if_closed:({},popup)=>!Cookies.isClosed(popup.ID),show_up_to_x_times:({times:times=1},popup)=>parseInt(times)>popup.getViews(),show_after_x_page_views:({views})=>parseInt(views)<Cookies.getPageViews(),show_to_new_or_returning:({visitor:visitor="all"})=>{switch(visitor){default:case"all":return true;case"new":return Cookies.getSessions()<=1;case"returning":return Cookies.getSessions()>1}},show_on_x_devices:({device})=>{switch(device){default:return true;case"mobile":return Math.max(document.documentElement.clientWidth||0,window.innerWidth||0)<=480;
313case"desktop":return Math.max(document.documentElement.clientWidth||0,window.innerWidth||0)>480}}};const Popup=popup=>({...popup,id:`popup-${popup.ID}`,_triggered:false,_open:false,_template:{},isOpen(){return this._open},wasTriggered(){return this._triggered},querySelector(selector=""){return document.querySelector(`#${this.id} ${selector}`)},querySelectorAll(selector=""){return document.querySelectorAll(`#${this.id} ${selector}`)},render(){try{let div=document.createElement("div");div.innerHTML=this._template.render(this);let popup=div.firstElementChild;popup.setAttribute("tabindex",0);return popup}catch(e){maybeLog(e);return""}},addToDom(){let el=document.getElementById(this.id);let rendered=this.render();if(el){el.replaceWith(rendered)}else{document.body.append(rendered)}if(!isBuilderPreview()){rendered.focus()}},removeFromDom(){document.getElementById(this.id)?.remove()},converted(check=true){if(isBuilderPreview()){return}Cookies.addPopupConversion(this.ID);if(check){return apiPost(HollerBox.routes.conversion,{popup_id:this.ID,location:window.location.href,referer:document.referrer})}},viewed(){if(isBuilderPreview()){return}Cookies.addPopupView(this.ID);return apiPost(HollerBox.routes.impression,{popup_id:this.ID,location:window.location.href,referer:document.referrer})},getConversions(){return Cookies.getPopupConversions(this.ID)},getViews(){return Cookies.getPopupViews(this.ID)},cleanup(){try{this._template.cleanup(this)}catch(e){maybeLog(e)}},handleShortcodeContent(when){if(isBuilderPreview()){return}switch(when){case"beforeAddToDom":if(this.has_shortcodes.in_content){this.post_content=`<div id="post-content-for-${this.ID}-goes-here"></div>`}if(this.has_shortcodes.in_success_message){this.success_message=`<div id="success-message-for-${this.ID}-goes-here"></div>`}break;case"afterAddToDom":if(this.has_shortcodes.in_content){let target=this.querySelector(`#post-content-for-${this.ID}-goes-here`);let content=document.querySelector(`#holler-${this.ID}-content`);if(target&&content){content.querySelectorAll("p:empty").forEach(el=>el.remove());target.replaceWith(content)}}if(this.has_shortcodes.in_success_message){let target=this.querySelector(`#success-message-for-${this.ID}-goes-here`);let content=document.querySelector(`#holler-${this.ID}-success-message`);if(target&&content){content.querySelectorAll("p:empty").forEach(el=>el.remove());target.replaceWith(content)}}break;case"beforeRemoveFromDom":let container=document.querySelector("#hollerbox-popup-content");if(this.has_shortcodes.in_content){let content=document.querySelector(`#holler-${this.ID}-content`);if(content&&container){container.append(content)}}if(this.has_shortcodes.in_success_message){let content=document.querySelector(`#holler-${this.ID}-success-message`);if(content&&container){container.append(content)}}break}},async open(){try{await this._template.beforeOpen(this)}catch(e){maybeLog(e)}this.handleShortcodeContent("beforeAddToDom");this.addToDom();this.handleShortcodeContent("afterAddToDom");this._triggered=true;this._open=true;this.querySelectorAll(".holler-box-modal-close").forEach(el=>{el.addEventListener("click",e=>{this.close()})});setTimeout(()=>{let overlay=this.querySelector(".holler-box-overlay");if(overlay){this.querySelector(".holler-box-overlay").addEventListener("click",e=>{this.close()})}},2e3);this.querySelector().addEventListener("keyup",e=>{if(e.key==="Escape"){this.close()}});try{this._template.onOpen(this)}catch(e){maybeLog(e)}this.viewed()},async close(){try{await this._template.onClose(this)}catch(e){maybeLog(e)}this.handleShortcodeContent("beforeRemoveFromDom");this.removeFromDom();this._open=false;try{await this._template.onClosed(this)}catch(e){maybeLog(e)}if(isBuilderPreview()){this.submitted=false;if(!this.isOpen()){setTimeout(()=>this.open(),1e3)}return}Cookies.addClosedPopup(this.ID);PopupStack.next()},isBlocking(){return!["fake_chat","notification_box","notification_box_with_button","notification_box_with_form"].includes(this.template)},maybeOpen(){if(this.isOpen()||this.wasTriggered()){return}for(let rule in this.advanced_rules){if(!this.advanced_rules[rule].enabled){continue}if(AdvancedDisplayRules.hasOwnProperty(rule)){if(!AdvancedDisplayRules[rule](this.advanced_rules[rule],this)){return}}}if(HollerBox.active.some(p=>p.isOpen()&&p.isBlocking())){PopupStack.add(this);return}this.open()},setTemplate(){if(!PopupTemplates.hasOwnProperty(this.template)){return false}this._template={render:()=>"",onOpen:()=>{},beforeOpen:()=>{},onClose:()=>{},onClosed:()=>{},cleanup:()=>{},...PopupTemplates[this.template]};return true},init(){if(!this.setTemplate()){return}const show=()=>this.maybeOpen();
313Object.keys(TriggerCallbacks).forEach(_t=>{if(this.triggers[_t]?.enabled){TriggerCallbacks[_t](this.triggers[_t],show,this)}});document.querySelectorAll(`.holler-upgrade.holler-show[data-id="${this.ID}"]`).forEach(el=>{el.addEventListener("click",e=>{e.preventDefault();popup._triggered=false;show()})})}});if(HollerBox.is_frontend){const initHollerBox=()=>{if(HollerBox._initialized){return}HollerBox._initialized=true;HollerBox.active=HollerBox.active.map(p=>Popup(p));HollerBox.active.forEach(popup=>{popup.init()});Cookies.addPageView();Cookies.maybeAddSession()};window.addEventListener("load",()=>{if(Cookies.hasAccepted()){initHollerBox();return}document.addEventListener("click",()=>{setTimeout(()=>{if(Cookies.hasAccepted()){initHollerBox()}},100)})})}function clickedIn(e,selector){var el=e.tagName?e:e.srcElement||e.target;if(el&&el.matches(selector)){return el}else{while(el=el.parentNode){if(typeof el.matches!=="undefined"&&el.matches(selector)){return el}}}return false}const isBuilderPreview=()=>HollerBox.is_builder_preview;if(isBuilderPreview()){let home=new URL(HollerBox.home_url);let popup;window.addEventListener("message",function(event){if(event.origin===window.location.origin){if(popup){popup.cleanup()}popup=Popup(event.data.popup);popup.setTemplate();if(event.data.suppressAnimations){document.body.classList.add("holler-suppress-animations")}else{document.body.classList.remove("holler-suppress-animations");document.body.style.marginTop="0";document.body.style.marginBottom="0"}document.querySelectorAll(".holler-box").forEach(el=>el.remove());document.getElementById("hollerbox-builder-styles").innerHTML=popup.css;popup.open()}},false);window.addEventListener("load",()=>{document.addEventListener("click",e=>{let el=clickedIn(e,"a");if(!el){return}let url;try{url=new URL(el.href)}catch(e){maybeLog(e);return}if(url.searchParams.has("suppress_hollerbox")){return}e.preventDefault();if(url.hostname!==home.hostname||url.pathname.match(/wp-admin/)||url.pathname.match(/wp-login\.php/)){}else{url.searchParams.append("suppress_hollerbox",1);el.href=url;el.click()}});document.querySelectorAll("a").forEach(el=>{const noClick=()=>{el.classList.add("no-click");el.addEventListener("click",e=>{e.preventDefault()})};let url;try{url=new URL(el.href)}catch(e){noClick();return}if(url.hostname!==home.hostname||url.pathname.match(/wp-admin/)||url.pathname.match(/wp-login\.php/)){noClick()}else{url.searchParams.append("suppress_hollerbox",1);el.href=url}});document.querySelectorAll("form").forEach(el=>{el.addEventListener("submit",e=>{e.preventDefault();e.stopImmediatePropagation()})})})}HollerBox.templates=PopupTemplates;HollerBox._frontend={CommonActions:CommonActions,SubmitActions:SubmitActions,closeButton:closeButton,credit:credit,form:form,nameInput:nameInput,emailInput:emailInput,__content:__content,overlay:overlay,submitButton:submitButton,TriggerCallbacks:TriggerCallbacks,maybeLog:maybeLog}})();
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.