PageSourceSearch

https://treolive.com/cdn/shop/t/2/assets/component-product-form.js?v=29662012971439100431679876806

js treolive.com collected 2026-10-04 13:33:08 UTC 16,251 bytes, 6 lines download raw bytes

1if(typeof ProductVariants!="function"){class ProductVariants2 extends HTMLElement{constructor(){super(),this.init()}init(){this.price=document.querySelector(`#product-price-${this.dataset.id}`),this.price&&(this.priceOriginal=this.price.querySelector("[data-js-product-price-original]"),this.priceCompare=this.price.querySelector("[data-js-product-price-compare]"),this.priceUnit=this.price.querySelector("[data-js-product-price-unit]")),this.productForm=document.querySelector(`#product-form-${this.dataset.id}`),this.productForm&&(this.productQty=this.productForm.querySelector("[data-js-product-quantity]"),this.addToCart=this.productForm.querySelector("[data-js-product-add-to-cart]"),this.addToCartText=this.productForm.querySelector("[data-js-product-add-to-cart-text]")),this.addEventListener("change",this.onVariantChange);let initVariantChange=!1;if(this.hasAttribute("data-variant-required")){if(this.variantRequired=!0,this.noVariantSelectedYet=!0,document.location.search.includes("variant")){const initVariant=parseInt(new URLSearchParams(document.location.search).get("variant"));this.currentVariant=this.getVariantData().find(variant=>{if(variant.id==initVariant)return variant.options.map((option,index)=>{const variantContainer=this.querySelectorAll("[data-js-product-variant]")[index].querySelector("[data-js-product-variant-container]");variantContainer.dataset.jsProductVariantContainer=="radio"?variantContainer.querySelector(`input[value="${option}"]`).checked=!0:variantContainer.dataset.jsProductVariantContainer=="select"&&(variantContainer.value=option)}),variant}),this.currentVariant&&(this.variantRequired=!1,this.noVariantSelectedYet=!1,initVariantChange=!0)}}else this.variantRequired=!1,this.noVariantSelectedYet=!1;this.updateOptions(),this.updateMasterId(),this.updateUnavailableVariants(),this.productStock=document.querySelector(`#product-${this.dataset.id} [data-js-variant-quantity]`),this.productStockProgress=document.querySelector(`#product-${this.dataset.id} [data-js-variant-quantity-progress]`),this.productStock&&document.querySelector(`#product-${this.dataset.id} [data-js-variant-quantity-data]`)&&(this.productStockData=JSON.parse(document.querySelector(`#product-${this.dataset.id} [data-js-variant-quantity-data]`).dataset.inventory)),this.updateStock(),this._event=new Event("VARIANT_CHANGE"),initVariantChange&&this.onVariantChange()}onVariantChange(){this.updateOptions(),this.updateMasterId(),this.updateVariantInput(),this.price&&this.updatePrice(),this.updateStock(),this.updateUnavailableVariants(),this.updatePickupAvailability(),this.hasAttribute("data-no-history")||this.updateURL(),this.updateDetails(),this.productForm&&(!this.currentVariant||!this.currentVariant.available?(this.productQty&&(this.productQty.style.display="none"),this.addToCart.classList.add("disabled"),this.productForm.classList.add("disabled-cart"),this.addToCartText.textContent=KROWN.settings.locales.products_sold_out_variant):(this.productQty&&(this.productQty.style.display=""),this.addToCart.classList.remove("disabled"),this.productForm.classList.remove("disabled-cart"),this.addToCartText.textContent=this.hasAttribute("data-show-bundle-wording")?KROWN.settings.locales.products_add_to_bundle_button:KROWN.settings.locales.products_add_to_cart_button),this.currentVariant?this.productForm.classList.remove("unavailable-variant"):(this.productForm.classList.add("unavailable-variant"),this.addToCartText.textContent=this.variantRequired&&this.noVariantSelectedYet?KROWN.settings.locales.products_variant_required:KROWN.settings.locales.products_unavailable_variant)),this.dispatchEvent(this._event)}updateOptions(){this.options=[],this.querySelectorAll("[data-js-product-variant-container]").forEach(elm=>{elm.dataset.jsProductVariantContainer=="radio"?elm.querySelectorAll(".product-variant__input").forEach(el=>{el.checked&&this.options.push(el.value)}):this.variantRequired&&elm.selectedIndex==0||this.options.push(elm.value)}),this.variantRequired&&this.noVariantSelectedYet&&this.options.length>=parseInt(this.dataset.variants)&&(this.noVariantSelectedYet=!1)}updateMasterId(){this.currentVariant=this.getVariantData().find(variant=>!variant.options.map((option,index)=>this.options[index]===option).includes(!1))}updatePrice(){this.currentVariant?(this.priceOriginal.innerHTML=this._formatMoney(this.currentVariant.price,KROWN.settings.shop_money_format),this.currentVariant.compare_at_price>this.currentVariant.price?this.priceCompare.innerHTML=this._formatMoney(this.currentVariant.compare_at_price,KROWN.settings.shop_money_format):this.priceCompare.innerHTML="",this.currentVariant.unit_price_measurement?this.priceUnit.innerHTML=`
2						${this._formatMoney(this.currentVariant.unit_price,KROWN.settings.shop_money_format)} / 
3						${this.currentVariant.unit_price_measurement.reference_value!=1?this.currentVariant.unit_price_measurement.reference_value+" ":""}
4						${this.currentVariant.unit_price_measurement.reference_unit}
5					`:this.priceUnit.innerHTML=""):this.variantRequired&&this.noVariantSelectedYet||(this.priceOriginal.innerHTML="",this.priceCompare.innerHTML="",this.priceUnit.innerHTML="")}updateStock(){if(!this.currentVariant)this.productStock&&(this.productStock.innerHTML="");else if(this.productStock&&this.productStockData){let currentVariant=!1;for(const variant of this.productStockData)if(variant.id==this.currentVariant.id){currentVariant=variant;break}if(this.productStock.innerHTML="",currentVariant&&(currentVariant.quantity<=0?currentVariant.inventory=="continue"?this.productStock.innerHTML=KROWN.settings.locales.products_preorder:currentVariant.inventory=="deny"&&(this.productStock.innerHTML=KROWN.settings.locales.products_no_products):currentVariant.quantity=="1"?this.productStock.innerHTML=KROWN.settings.locales.products_one_product:currentVariant.quantity<=parseInt(this.productStock.dataset.lowStock)?this.productStock.innerHTML=KROWN.settings.locales.products_few_products.replace("{{ count }}",currentVariant.quantity):currentVariant.unavailable?this.productStock.innerHTML=KROWN.settings.locales.products_no_products:currentVariant.quantity>parseInt(this.productStock.dataset.lowStock)&&this.productStock.dataset.type=="always"?this.productStock.innerHTML=KROWN.settings.locales.products_few_products.replace("{{ count }}",currentVariant.quantity):currentVariant.quantity||(this.productStock.innerHTML=KROWN.settings.locales.products_enough_products),this.productStockProgress)){let progressQty=0;currentVariant.quantity<=0&&currentVariant.inventory=="continue"||typeof currentVariant.quantity>"u"?progressQty=parseInt(this.productStock.dataset.highStock):currentVariant.quantity>0&&(progressQty=currentVariant.quantity),progressQty>=parseInt(this.productStock.dataset.highStock)?this.productStockProgress.style.width="100%":this.productStockProgress.style.width=`${100*progressQty/parseInt(this.productStock.dataset.highStock)}%`}}}updateDetails(){document.querySelectorAll(`#product-${this.dataset.id} [data-js-product-sku]`).forEach(elm=>{this.currentVariant&&this.currentVariant.sku?elm.innerHTML=KROWN.settings.locales.product_sku+this.currentVariant.sku:elm.innerHTML=""}),document.querySelectorAll(`#product-${this.dataset.id}
5 [data-js-product-barcode]`).forEach(elm=>{this.currentVariant&&this.currentVariant.barcode?elm.innerHTML=KROWN.settings.locales.product_barcode+this.currentVariant.barcode:elm.innerHTML=""})}updatePickupAvailability(){const pickUpAvailability=document.querySelector("pickup-availability");pickUpAvailability&&(this.currentVariant&&this.currentVariant.available?pickUpAvailability.fetchAvailability(this.currentVariant.id):(pickUpAvailability.removeAttribute("available"),pickUpAvailability.innerHTML=""))}updateUnavailableVariants(){if(this.dataset.hideVariants!="false"){let options1={},options2={},options3={},option1Selected=null,option2Selected=null;this.dataset.variants>1&&(option1Selected=this._getSelectedOption(0),this._resetDisabledOption(1)),this.dataset.variants>2&&(option2Selected=this._getSelectedOption(1),this._resetDisabledOption(2)),this.getVariantData().forEach(el=>{this.dataset.variants>0&&(options1[el.option1]||(options1[el.option1]=[]),options1[el.option1].push(String(el.available))),this.dataset.variants>1&&(options2[el.option2]||(options2[el.option2]=[]),options2[el.option2].push(String(el.available))),this.dataset.variants==2&&el.option1==option1Selected&&!el.available&&this._setDisabledOption(1,el.option2),this.dataset.variants>2&&(options3[el.option3]||(options3[el.option3]=[]),options3[el.option3].push(String(el.available)),el.option2==option2Selected&&el.option1==option1Selected&&!el.available&&this._setDisabledOption(2,el.option3))}),this.dataset.variants>0&&Object.keys(options1).forEach(key=>{options1[key].includes("true")||this._setDisabledOption(0,key)}),this.dataset.variants>1&&Object.keys(options2).forEach(key=>{options2[key].includes("true")||this._setDisabledOption(1,key)}),this.dataset.variants>2&&(Object.keys(options3).forEach(key=>{options3[key].includes("true")||this._setDisabledOption(2,key)}),Object.keys(options2).forEach(key=>{options2[key].includes("true")||option2Selected==key&&(this.dataset.hideVariants=="disable"?this.querySelectorAll("[data-js-product-variant]")[2].querySelector(".product-variant-value").setAttribute("disabled","disabled"):this.querySelectorAll("[data-js-product-variant]")[2].querySelector(".product-variant-value").classList.add("disabled"))}))}}_getSelectedOption(i){let selectedOption=null;return this.querySelectorAll("[data-js-product-variant]")[i].querySelectorAll("[data-js-product-variant-container]").forEach(elm=>{elm.dataset.jsProductVariantContainer=="radio"?elm.querySelectorAll(".product-variant__input").forEach(el=>{el.checked&&(selectedOption=el.value)}):selectedOption=elm.value}),selectedOption}_resetDisabledOption(i){this.querySelectorAll("[data-js-product-variant]")[i].querySelectorAll(".product-variant-value").forEach(elm=>{elm.classList.remove("disabled"),elm.classList.remove("hide-variant"),elm.hasAttribute("default")||elm.removeAttribute("disabled"),elm.parentNode.classList.remove("hide-variant")})}_setDisabledOption(i,option){let variant=this.querySelectorAll("[data-js-product-variant]")[i].querySelector(`.product-variant-value[value="${option.replace('"',"&x22;")}"]`);variant&&(this.dataset.hideVariants=="disable"?variant.setAttribute("disabled","disabled"):this.dataset.hideVariants=="true"?variant.classList.add("disabled"):this.dataset.hideVariants=="hide"&&(this.querySelectorAll("[data-js-product-variant]")[i].querySelector("[data-js-product-variant-container]").dataset.jsProductVariantContainer=="radio"?variant.parentNode.classList.add("hide-variant"):variant.classList.add("hide-variant")))}updateURL(){this.currentVariant&&window.history.replaceState({},"",`${this.dataset.url}?variant=${this.currentVariant.id}`)}updateVariantInput(){if(!this.currentVariant)return;document.querySelectorAll(`#product-form-${this.dataset.id}, #product-form-installment`).forEach(productForm=>{const input=productForm.querySelector('input[name="id"]');input.value=this.currentVariant.id,input.dispatchEvent(new Event("change",{bubbles:!0}))})}getVariantData(){return this.variantData=this.variantData||JSON.parse(this.querySelector('[type="application/json"]').textContent),this.variantData}_formatMoney(cents,format){typeof cents=="string"&&(cents=cents.replace(".",""));let value="";const placeholderRegex=/\{\{\s*(\w+)\s*\}\}/,formatString=format||moneyFormat;function formatWithDelimiters(number,precision,thousands,decimal){if(thousands=thousands||",",decimal=decimal||".",isNaN(number)||number===null)return 0;number=(number/100).toFixed(precision);const parts=number.split("."),dollarsAmount=parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1"+thousands),centsAmount=parts[1]?decimal+parts[1]:"";return dollarsAmount+centsAmount}switch(formatString.match(placeholderRegex)[1]){case"amount":value=formatWithDelimiters(cents,2);break;case"amount_no_decimals":value=formatWithDelimiters(cents,0);break;case"amount_with_comma_separator":value=formatWithDelimiters(cents,2,".",",");break;case"amount_no_decimals_with_comma_separator":value=formatWithDelimiters(cents,0,".",",");break;case"amount_no_decimals_with_space_separator":value=formatWithDelimiters(cents,0," ");break;case"amount_with_apostrophe_separator":value=formatWithDelimiters(cents,2,"'");break}return formatString.replace(placeholderRegex,value)}}typeof customElements.get("product-variants")>"u"&&customElements.define("product-variants",ProductVariants2)}if(typeof ProductForm!="function"){class ProductForm2 extends HTMLElement{constructor(){super(),this.init()}init(){this.hasAttribute("data-ajax-cart")&&!document.body.classList.contains("template-cart")&&(this.form=this.querySelector("form"),this.form.addEventListener("submit",this.onSubmitHandler.bind(this)),this.ADD_TO_CART=new Event("add-to-cart"))}onSubmitHandler(e){e.preventDefault();const submitButton=this.querySelector('[type="submit"]');submitButton.classList.add("working");const body=this._serializeForm(this.form);let alert="";fetch(`${KROWN.settings.routes.cart_add_url}.js`,{body,headers:{"Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},method:"POST"}).then(response=>response.json()).then(response=>(response.status==422&&(alert=document.createElement("span"),alert.className="alert alert--error",alert.innerHTML=response.description),fetch("?section_id=helper-cart"))).then(response=>response.text()).then(text=>{const sectionInnerHTML=new DOMParser().parseFromString(text,"text/html"),cartFormInnerHTML=sectionInnerHTML.getElementById("AjaxCartForm").innerHTML,cartSubtotalInnerHTML=sectionInnerHTML.getElementById("AjaxCartSubtotal").innerHTML,cartItems=document.getElementById("AjaxCartForm");cartItems.innerHTML=cartFormInnerHTML,cartItems.ajaxifyCartItems(),alert!=""&&document.getElementById("AjaxCartForm").querySelector("form").prepend(alert),document.getElementById("AjaxCartSubtotal").innerHTML=cartSubtotalInnerHTML,document.querySelectorAll("[data-header-cart-count]").forEach(elm=>{elm.textContent=document.querySelector("#AjaxCartForm [data-cart-count]").textContent}),document.querySelectorAll("[data-header-cart-total").forEach(elm=>{elm.textContent=document.querySelector("#AjaxCartForm [data-cart-total]").textContent}),this.dispatchEvent(this.ADD_TO_CART)}).catch(e2=>{console.log(e2)}).finally(()=>{submitButton.classList.remove("working")})}_serializeForm(form){let arr=[];
5return Array.prototype.slice.call(form.elements).forEach(function(field){if(!(!field.name||field.disabled||["file","reset","submit","button"].indexOf(field.type)>-1)){if(field.type==="select-multiple"){Array.prototype.slice.call(field.options).forEach(function(option){option.selected&&arr.push(encodeURIComponent(field.name)+"="+encodeURIComponent(option.value))});return}["checkbox","radio"].indexOf(field.type)>-1&&!field.checked||arr.push(encodeURIComponent(field.name)+"="+encodeURIComponent(field.value))}}),arr.join("&")}}typeof customElements.get("product-form")>"u"&&customElements.define("product-form",ProductForm2)}if(typeof ProductRecommendations!="function"){class ProductRecommendations2 extends HTMLElement{constructor(){super();const event=new Event("product-recommendations-loaded"),handleIntersection=(entries,observer)=>{entries[0].isIntersecting&&(observer.unobserve(this),fetch(this.dataset.url).then(response=>response.text()).then(text=>{const innerHTML=new DOMParser().parseFromString(text,"text/html").querySelector("product-recommendations");
5innerHTML&&innerHTML.querySelectorAll("[data-js-product-item]").length>0&&(this.innerHTML=innerHTML.innerHTML,this.querySelectorAll("form").forEach(elm=>{elm.querySelector("template")&&elm.append(elm.querySelector("template").content.cloneNode(!0))}),this.dispatchEvent(event))}).catch(e=>{console.error(e)}))};new IntersectionObserver(handleIntersection.bind(this),{rootMargin:"0px 0px 400px 0px"}).observe(this)}}typeof customElements.get("product-recommendations")>"u"&&customElements.define("product-recommendations",ProductRecommendations2)}
6//# sourceMappingURL=/cdn/shop/t/2/assets/component-product-form.js.map?v=29662012971439100431679876806

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.