1class AudioSubscriptionComponent extends HTMLElement{constructor(){super(),this.popup=document.getElementById("audio-subscription"),this.closeButtons=[...Array.from(this.querySelectorAll(".jsClose")),...Array.from(document.querySelectorAll(".jsClose"))],this.subscribeButton=this.querySelector(".subscribe-audio"),this.tabButtons=Array.from(this.querySelectorAll(".tab-button")),this.tabContents=Array.from(this.querySelectorAll(".tab-content")),this.cartForm=document.querySelector("product-cart-form"),this.itemsCart=[],this.apiBaseUrl=window.theme.internalApp.baseUrl,this.popup&&this.init()}init(){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.initListeners()}):this.initListeners()}initListeners(){this.closeButtons&&this.closeButtons.length>0&&this.closeButtons.forEach(button=>{button.addEventListener("click",this.handleClose.bind(this))}),this.subscribeButton&&this.subscribeButton.addEventListener("click",this.handleSubscribe.bind(this)),this.tabButtons&&this.tabButtons.forEach(button=>{button.addEventListener("click",()=>{const tab=button.dataset.tab;tab&&this.switchTab(tab)})})}initDownloadAppButton(){const downloadButton=document.querySelector(".audio-subscription-popup .get-app-button");downloadButton&&downloadButton.addEventListener("click",()=>{window.open("https://apps.apple.com/us/app/leaf-from-aspen/id1532299635","_blank")})}switchTab(selectedTab){this.tabButtons.forEach(button=>button.classList.remove("active")),this.tabContents.forEach(content=>content.classList.remove("active"));const selectedButton=this.tabButtons.find(button=>button.dataset.tab===selectedTab),tabContent=this.tabContents.find(content=>content.id===`${selectedTab}-content`);selectedButton.classList.add("active"),tabContent.classList.add("active")}updateSelectedVariant(variantId,sellingPlan){this.subscribeButton.dataset.variantId=variantId,this.subscribeButton.dataset.sellingPlan=sellingPlan}async handleClose(){const requestCopy=this.querySelector("#request-copy");if(this.cartForm){const cart=await(await fetch("/cart.js")).json();if(cart.status)this.cartForm.notify=cart.description||cart.message,this.cartForm.cartRefresh({isSuccess:!1,sections:[]});else{const sectionsToRender=this.cartForm.sections.map(section=>section.section).join(","),sections=await(await fetch(`${window.location.pathname}?sections=${sectionsToRender}`)).json();let targetPopup=document.querySelector(".popup-noti-added");targetPopup&&(targetPopup.style.display="block",setTimeout(()=>{targetPopup.style.display="none"},5e3)),this.cartForm.cartRefresh({isSuccess:!0,sections})}}document.body.classList.remove("show-popup"),this.popup.classList.remove("active"),requestCopy.dataset.currentStep="1"}async previousCartItem(variantId){const cart=await(await fetch("/cart.js")).json();return this.itemsCart=cart.items,cart.items.find(item=>item.variant_id===parseInt(variantId,10))}async deleteProductFromCart(key){try{const response=await fetch("/cart/change.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:key,quantity:0})});response.ok||console.error("Error updating cart:",response)}catch(error){console.error("Error deleting product from cart:",error),this.bannerAlert(error.message)}}async getProductSubscriptionFromCart(){return(await(await fetch("/cart.js")).json()).items.find(item=>item.properties&&"_subscription_variant"in item.properties||"selling_plan_allocation"in item)}async handleSubscribe(){try{this.showButtonLoader(this.subscribeButton);const activeTab=this.tabButtons.find(button=>button.classList.contains("active"));if(!activeTab)throw new Error("No active tab found");const variantId=activeTab.dataset.variantId,sellingPlan=activeTab.dataset.sellingPlan;if(!variantId||!sellingPlan)throw new Error(`Missing data - VariantId: ${variantId}, SellingPlan: ${sellingPlan}`);if(await this.previousCartItem(variantId))throw new Error("You already have this product in your cart");const previousSubscriptionProduct=await this.getProductSubscriptionFromCart();previousSubscriptionProduct&&await this.deleteProductFromCart(previousSubscriptionProduct.key);let entitlementPolicyId=null,entitlementPolicyName=null;const customerScript=document.querySelector(".check-customer");let isUserLoggedIn=!1;if(customerScript)try{isUserLoggedIn=JSON.parse(customerScript.textContent).logged_in}catch(error){console.error("Error parsing customer data:",error)}try{const entitlementResponse=await fetch(`${this.apiBaseUrl}/entitlement-policies?variantId=${variantId}`);if(entitlementResponse.ok){const entitlementsData=await entitlementResponse.json();let variantEntitlements=null;entitlementsData.length>0&&(variantEntitlements=entitlementsData.find(item=>item.variantId.toString()===variantId)),variantEntitlements.variantEntitlementPolicies.length>0&&(entitlementPolicyId=variantEntitlements.variantEntitlementPolicies[0].entitlementPolicyV2.id,entitlementPolicyName=variantEntitlements.variantEntitlementPolicies[0].entitlementPolicyV2.title)}else if(isUserLoggedIn)throw new Error(`Error getting entitlement policies: ${entitlementResponse.status}`)}catch(error){if(isUserLoggedIn)throw error;console.warn("Could not get entitlement policies, but continuing as user is not logged in:",error)}if(!isUserLoggedIn&&(!entitlementPolicyId||!entitlementPolicyName))entitlementPolicyId="pending_authentication",entitlementPolicyName="Pending Authentication";else if(isUserLoggedIn&&(!entitlementPolicyId||!entitlementPolicyName))throw new Error("No entitlement policy foun
1d");const formData={items:[{id:parseInt(variantId,10),quantity:1,selling_plan:parseInt(sellingPlan,10),properties:{_subscription_variant:variantId,_requiresAuthentication:isUserLoggedIn?"false":"true"}}]};isUserLoggedIn&&(formData.items[0].properties._entitlementPolicyId=entitlementPolicyId,formData.items[0].properties._entitlementPolicyName=entitlementPolicyName);const response=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(formData)});if(!response.ok){const errorData=await response.json();throw new Error(errorData.message||errorData.description)}const responseData=await response.json(),productTitle=responseData.items&&responseData.items[0]?responseData.items[0].title:null,variantTitle=responseData.items&&responseData.items[0]?responseData.items[0].variant_title:null;if(responseData.status)throw this.cartForm&&(this.cartForm.notify=responseData.description||responseData.message,this.cartForm.cartRefresh({isSuccess:!1,sections:[]})),new Error(responseData.description||responseData.message);if(document.body.classList.remove("show-popup"),this.popup.classList.remove("active"),this.cartForm){const sectionsToRender=this.cartForm.sections.map(section=>section.section).join(","),sections=await(await fetch(`${window.location.pathname}?sections=${sectionsToRender}&last_added_variant=${variantId}`)).json(),originalSuccessNotify=this.cartForm.successNotify;this.cartForm.successNotify=function(){},this.cartForm.currentState="add",this.cartForm.cartRefresh({isSuccess:!0,sections}),setTimeout(()=>{let targetPopup=document.querySelector(".popup-noti-added");if(targetPopup){const productTitleElement=targetPopup.querySelector(".product-title");if(productTitleElement){const productName=productTitle;productTitleElement.textContent=productName;const optionTitle=targetPopup.querySelector(".product-option-title .text");optionTitle&&variantTitle&&(optionTitle.textContent=variantTitle)}const productMedia=targetPopup.querySelector(".product-media");productMedia&&(productMedia.querySelector('img[src]:not([src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="])')||(productMedia.innerHTML=` 2 <div class="empty-image"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 525.5 525.5"><path d="M324.5 212.7H203c-1.6 0-2.8 1.3-2.8 2.8V308c0 1.6 1.3 2.8 2.8 2.8h121.6c1.6 0 2.8-1.3 2.8-2.8v-92.5c0-1.6-1.3-2.8-2.9-2.8zm1.1 95.3c0 .6-.5 1.1-1.1 1.1H203c-.6 0-1.1-.5-1.1-1.1v-92.5c0-.6.5-1.1 1.1-1.1h121.6c.6 0 1.1.5 1.1 1.1V308z"></path><path d="M210.4 299.5H240v.1s.1 0 .2-.1h75.2v-76.2h-105v76.2zm1.8-7.2l20-20c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l1.5 1.5 16.8 16.8c-12.9 3.3-20.7 6.3-22.8 7.2h-27.7v-5.5zm101.5-10.1c-20.1 1.7-36.7 4.8-49.1 7.9l-16.9-16.9 26.3-26.3c1.6-1.6 3.8-2.5 6.1-2.5s4.5.9 6.1 2.5l27.5 27.5v7.8zm-68.9 15.5c9.7-3.5 33.9-10.9 68.9-13.8v13.8h-68.9zm68.9-72.7v46.8l-26.2-26.2c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-26.3 26.3-.9-.9c-1.9-1.9-4.5-3-7.3-3s-5.4 1.1-7.3 3l-18.8 18.8V225h101.4z"></path><path d="M232.8 254c4.6 0 8.3-3.7 8.3-8.3s-3.7-8.3-8.3-8.3-8.3 3.7-8.3 8.3 3.7 8.3 8.3 8.3zm0-14.9c3.6 0 6.6 2.9 6.6 6.6s-2.9 6.6-6.6 6.6-6.6-2.9-6.6-6.6 3-6.6 6.6-6.6z"></path></svg> 3 </div> 4 `)),targetPopup.style.display="block",setTimeout(()=>{targetPopup.style.display="none"},5e3)}this.cartForm.successNotify=originalSuccessNotify},100)}document.documentElement.dispatchEvent(new CustomEvent("cart:refresh",{bubbles:!0}))}catch(error){console.error("Error:",error),this.bannerAlert(error.message)}finally{this.hideButtonLoader(this.subscribeButton)}}showButtonLoader(button){if(button.dataset.originalText||(button.dataset.originalText=button.textContent.trim()),!button.querySelector(".button-loader")){const loader=document.createElement("span");loader.className="button-loader",loader.innerHTML='<span class="spinner"></span>',loader.style.cssText=` 5 display: inline-block; 6 margin-left: 10px; 7 vertical-align: middle; 8 `;const style=document.createElement("style");document.querySelector("#button-loader-style")||(style.id="button-loader-style",style.textContent=` 9 .button-loader .spinner { 10 display: inline-block; 11 width: 16px; 12 height: 16px; 13 border: 2px solid rgba(255,255,255,0.3); 14 border-radius: 50%; 15 border-top-color: #fff; 16 animation: spin 1s ease-in-out infinite; 17 } 18 @keyframes spin { 19 to { transform: rotate(360deg); } 20 } 21 `,document.head.appendChild(style)),button.appendChild(loader)}button.disabled=!0,button.classList.add("loading")}hideButtonLoader(button){const loader=button.querySelector(".button-loader");loader&&loader.remove(),button.disabled=!1,button.classList.remove("loading")}bannerAlert(message,title="Error"){const existingInfoBox=this.querySelector(".popup-main-content"),afterBanner=this.querySelector(".info-box");afterBanner&&afterBanner.remove();const infoBox=document.createElement("div");infoBox.className="info-box red",infoBox.style.cssText=` 22 padding: 16px 16px; 23 display: grid; 24 grid-template-columns: 24px 1fr 24px; 25 align-items: start; 26 border-radius: 4px; 27 background: #fcf6e4; 28 margin-bottom: 20px; 29 `,infoBox.innerHTML=` 30 <div class='icon-alert' style='margin-left: 8px;'> 31 <div class='icon-info'> 32 <svg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'> 33 <path fill-rule='evenodd' clip-rule='evenodd' d='M23.0466 21L11.996 2L0.945312 21H23.0466ZM10.9914 18V16H13.0006V18H10.9914ZM10.9914 14H13.0006V10H10.9914V14Z' fill='#FAA422'/> 34 </svg> 35 </div> 36 </div> 37 <div class='message-alert' style='margin-left: 16px;'> 38 <p style='color: #000; font-family: brandon-grotesque; font-size: 16px; font-weight: 450; line-height: 24px; margin: 0;'>${title}</p> 39 <p style='color: #000; font-family: brandon-grotesque; font-size: 16px; font-weight: 390; line-height: 24px; margin: 0;'>${message}</p> 40 </div> 41 `,setTimeout(()=>{infoBox.remove()},2e3),existingInfoBox.insertAdjacentElement("afterbegin",infoBox)}}customElements.define("audio-subscription-component",AudioSubscriptionComponent),window.openAudioSubscription=function(){const popup=document.querySelector("#audio-subscription");if(popup){popup.setAttribute("aria-hidden","false");const requestCopy=document.querySelector("#request-copy");requestCopy&&requestCopy.setAttribute("data-current-step","1")}},document.addEventListener("DOMContentLoaded",function(){document.querySelector("#audio-subscription")&&setTimeout(()=>{sessionStorage.getItem("audioSubscriptionShown")||(window.openAudioSubscription(),sessionStorage.setItem("audioSubscriptionShown","true"))},3e3)}); 42//# sourceMappingURL=/cdn/shop/t/37/assets/component-audio-sub.js.map?v=61997703549943885541754465344
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.