1(()=>{if(window.ServiceifyAddToCartHandlerInitialized)return;const defaultConfig={serviceTitle:"30-Minute Floral Expert Consultation",servicePrice:"$33.00"},selectors={servicifyModal:".ReactModalPortal",buttonSelector:"[data-servicify=checkout]",overlaySelector:".ReactModal__Overlay",consultationPackageButton:".js-consultation-package-button",customButtonSelector:".team-grid__button-wrapper a.ff-button, .real-weddings-gallery a.ff-button",scheduleButtonSelector:".servicify-select-a-time-button",cartSelector:"[data-cart-sidebar]"};class ServiceifyAddToCartHandler{constructor(){const cartElement=document.querySelector(selectors.cartSelector);this.cart=cartElement?cartElement.cloneNode(!0):null,this.maxAttempts=3,this.config={...defaultConfig},this.variantData=null,this.packageButtonSelected=!1,this.initialize()}initialize(){document.body?(this.loadVariantData(),this.setupVariantListener(),this.setupPackageButtonListeners(),this.setupBannerScheduleReload(),this.setupCustomButtonListeners(),this.setupMutationObserver(document.body)):requestAnimationFrame(()=>this.initialize())}loadVariantData(){const variantsScript=document.getElementById("variants_js");if(variantsScript)try{this.variantData=JSON.parse(variantsScript.textContent)}catch{}}setupVariantListener(attempts=0){if(attempts>=this.maxAttempts)return;const productBanner=document.querySelector("ff-product-banner");if(!productBanner){requestAnimationFrame(()=>this.setupVariantListener(attempts+1));return}const setupVariantElements=()=>{productBanner.querySelectorAll("variant-selects, variant-radios").forEach(element=>{element.dataset.variantListenerSetup||(element.dataset.variantListenerSetup="true",element.addEventListener("change",()=>{const variantInput=element.closest("ff-product-banner")?.querySelector('input[name="id"]');variantInput&&variantInput.value&&this.handleVariantChange(variantInput.value)}),setTimeout(()=>{const variantInput=element.closest("ff-product-banner")?.querySelector('input[name="id"]');variantInput&&variantInput.value&&this.handleVariantChange(variantInput.value)},100))})};setupVariantElements();const setupVariantInputs=()=>{productBanner.querySelectorAll('input[name="id"]').forEach(input=>{input.dataset.variantListenerSetup||(input.dataset.variantListenerSetup="true",input.addEventListener("change",()=>{input.value&&this.handleVariantChange(input.value)}),input.value&&this.handleVariantChange(input.value))})};setupVariantInputs();const observer=new MutationObserver(()=>{setupVariantElements(),setupVariantInputs()});observer.observe(productBanner,{childList:!0,subtree:!0}),this.variantObserver=observer}handleVariantChange(variantId){if(this.packageButtonSelected||!variantId||(this.variantData||this.loadVariantData(),!this.variantData))return;const variantIdNum=parseInt(variantId);if(isNaN(variantIdNum))return;const variant=this.variantData.find(v=>v.id===variantIdNum);if(!variant)return;const variantTitle=variant.title||"";let variantPrice=defaultConfig.servicePrice;if(variant.price)if(typeof Shopify<"u"&&Shopify.formatMoney){const moneyFormat=window.money_format||"${{amount}}";variantPrice=Shopify.formatMoney(variant.price,moneyFormat);const tempDiv=document.createElement("div");tempDiv.innerHTML=variantPrice,variantPrice=tempDiv.textContent||tempDiv.innerText||variantPrice}else variantPrice=`$${(variant.price/100).toFixed(2)}`;let serviceTitle=defaultConfig.serviceTitle;if(variantTitle){const durationMatch=variantTitle.match(/(\d+)[\s-]*(?:min|minute|min\.)/i);durationMatch?serviceTitle=`${durationMatch[1]}-Minute Floral Expert Consultation`:serviceTitle=`${variantTitle} Consultation`}this.config.serviceTitle=serviceTitle,this.config.servicePrice=variantPrice}setupPackageButtonListeners(){document.addEventListener("click",event=>{const button=event.target.closest(selectors.consultationPackageButton);button&&this.handlePackageSelection(button)})}setupBannerScheduleReload(){document.addEventListener("click",event=>{if(!event.isTrusted)return;const button=event.target.closest("ff-product-banner .calendar-btn");if(!button)return;const variantInput=button.closest("ff-product-banner")?.querySelector('input[name="id"]'),variantId=variantInput&&variantInput.value;if(!variantId)return;const params=new URLSearchParams(window.location.search);if(params.get("open_calendar")==="true"&¶ms.get("variant")===variantId)return;event.preventDefault(),event.stopImmediatePropagation();const url=new URL(window.location.href);
1url.searchParams.set("variant",variantId),url.searchParams.set("open_calendar","true"),window.location.href=url.toString()},!0)}setupCustomButtonListeners(){document.querySelectorAll(selectors.customButtonSelector).forEach(button=>{button.addEventListener("click",e=>{e.preventDefault();const scheduleButton=document.querySelector(selectors.scheduleButtonSelector);scheduleButton&&scheduleButton.click()})})}handlePackageSelection(button){const packageName=button.dataset.packageName||"",packagePrice=button.dataset.packagePrice||defaultConfig.servicePrice,videoCallDuration=button.dataset.videoCallDuration||"";this.packageButtonSelected=!0,this.config.serviceTitle=videoCallDuration?`${videoCallDuration} Floral Expert Consultation`:packageName||defaultConfig.serviceTitle,this.config.servicePrice=packagePrice,this.selectedPackage={name:packageName,price:packagePrice,videoCallDuration}}setupMutationObserver(targetNode){const config={childList:!0,subtree:!0},observer=new MutationObserver(mutationsList=>{mutationsList.some(mutation=>mutation.type==="childList"&&mutation.addedNodes.length>0)&&document.querySelector(selectors.servicifyModal)&&this.processNodesForButtons(mutationsList)});this.checkExistingElements(),observer.observe(targetNode,config),this.observer=observer}checkExistingElements(){const overlays=document.querySelectorAll(selectors.overlaySelector);overlays.length>0&&overlays.forEach(overlay=>this.preventOverlayEvent(overlay)),document.querySelector(selectors.buttonSelector)&&(this.updateCart(),this.appendCustomHTML())}processNodesForButtons(mutationsList){for(const mutation of mutationsList)mutation.type==="childList"&&mutation.target.classList.contains("ReactModalPortal")&&requestAnimationFrame(()=>{this.findOverlay(),this.findButton()})}preventOverlayEvent(overlayElement){overlayElement.dataset.serviceifyOverlayEventStopped||(overlayElement.addEventListener("click",function(event){event.target===event.currentTarget&&(event.stopImmediatePropagation(),event.preventDefault())},!1),overlayElement.dataset.serviceifyOverlayEventStopped="true")}findOverlay(attempts=0){if(attempts>=this.maxAttempts)return;const overlays=document.querySelectorAll(selectors.overlaySelector);overlays.length>0?overlays.forEach(overlay=>{this.preventOverlayEvent(overlay)}):this.findOverlay(attempts+1)}findButton(attempts=0){if(attempts>=this.maxAttempts)return;document.querySelector(selectors.buttonSelector)?(this.updateCart(),this.appendCustomHTML()):this.findButton(attempts+1)}getSelectedConsultationDisplay(){const variantInput=document.querySelector('ff-product-banner input[name="id"]'),variantId=variantInput&&variantInput.value,card=variantId?document.querySelector(`.js-consultation-package-button[data-variant-id="${variantId}"]`):null;return{title:card&&card.dataset.packageName||this.config.serviceTitle,price:card&&card.dataset.packagePrice||this.config.servicePrice}}appendCustomHTML(attempts=0){if(attempts>=this.maxAttempts)return;const container=document.querySelector(".ReactModal__Content.ReactModal__Content--after-open:has([data-servicify=checkout]) .servicify-modal-close+div>div>:nth-child(2)");if(container){const{title,price}=this.getSelectedConsultationDisplay(),custom=document.createElement("div");custom.setAttribute("style","display:flex;justify-content:space-between;align-items:center;padding:0 1.5em;");const titleEl=document.createElement("div");titleEl.textContent=title;const priceEl=document.createElement("div");priceEl.textContent=price,custom.append(titleEl,priceEl),container.insertAdjacentElement("beforeend",custom)}else this.appendCustomHTML(attempts+1)}updateCartHTML(){const headerCart=document.querySelector("[data-cart-sidebar]");!headerCart||!this.cart||(headerCart.innerHTML=this.cart.innerHTML)}updateCart(){Shopify.getCart(cart=>{window.halo.updateSidebarCart(cart),this.updateCartHTML()})}cleanup(){this.variantObserver&&(this.variantObserver.disconnect(),this.variantObserver=null),this.observer&&(this.observer.disconnect(),this.observer=null)}}window.ServiceifyAddToCartHandlerInitialized=!0,new ServiceifyAddToCartHandler})(); 2//# sourceMappingURL=/cdn/shop/t/592/assets/component-personal-consultation.js.map?v=64681629637060752831780320612
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.