1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[23730],{3730(t,e,i){i.r(e),i.d(e,{default:()=>o});class s{static serialize(t){let e=!(arguments.length>1)||void 0===arguments[1]||arguments[1];if("FORM"!==t.nodeName){if(e)throw Error("The passed element is not a form!");return{}}return new FormData(t)}static serializeJson(t){let e=!(arguments.length>1)||void 0===arguments[1]||arguments[1],i=s.serialize(t,e);if(!(i instanceof FormData)&&0===Object.keys(i).length||i instanceof FormData&&0===Array.from(i.entries()).length)return{};let n={};for(let[t,e]of i.entries())n[t]=e;return n}}var n=i(5683);class r extends n.A{constructor(t,e="before"){super(t,e),this._isValidElement()||console.warn(`[ButtonLoadingIndicatorUtil] Parent element is not of type <button> or <a>. Given element: ${this.parent}`)}create(){if(!this._isValidElement()){console.warn(`[ButtonLoadingIndicatorUtil] Unable to create loading indicator. Parent element is not of type <button> or <a>. Given element: ${this.parent}`);return}if("inner"===this.position){let t=this.parent.getBoundingClientRect().width;this.parent.style.width=`${t}px`}super.create(),this.parent.classList.add(`is-loading-indicator-${this.position}`),this._isButtonElement()?this.parent.disabled=!0:this._isAnchorElement()&&this.parent.classList.add("disabled")}remove(){if(!this.exists()){console.warn(`[ButtonLoadingIndicatorUtil] Unable to remove loading indicator. No indicator present on given element: ${this.parent}`);return}"inner"===this.position&&(this.parent.style.width="auto"),super.remove(),this.parent.classList.remove(`is-loading-indicator-${this.position}`),this._isButtonElement()?this.parent.disabled=!1:this._isAnchorElement()&&this.parent.classList.remove("disabled")}_isValidElement(){return this._isButtonElement()||this._isAnchorElement()}_isButtonElement(){return this.parent?.tagName.toLowerCase()==="button"}_isAnchorElement(){return this.parent?.tagName.toLowerCase()==="a"}}class o extends window.PluginBaseClass{static #t=this.options={redirectSelector:'[name="redirectTo"]',redirectParamSelector:'[data-redirect-parameters="true"]',redirectTo:"frontend.cart.offcanvas",stockAlertTemplateSelector:".js-quantity-stock-adjusted-template",stockAlertClass:"quantity-stock-adjusted-alert",stockAdjustedText:null,outOfStockText:null,buyButtonSelector:'button[type="submit"].btn-buy',payPalExpressCheckoutSelector:"[data-swag-paypal-express-button]"};init(){if(this.el.querySelector(this.options.payPalExpressCheckoutSelector)){this.el.setAttribute("data-add-to-cart","true"),window.PluginManager.initializePlugin("AddToCart",this.el);return}if(this._getForm(),!this._form)throw Error(`No form found for the plugin: ${this.constructor.name}`);this._prepareFormRedirect(),this._registerEvents(),this.buyButton=this._form.querySelector(".btn-buy"),this.buyButton&&(this.initialBuyButtonContent=this.buyButton.innerHTML,this.loader=new r(this.buyButton))}_prepareFormRedirect(){try{let t=this._form.querySelector(this.options.redirectSelector),e=this._form.querySelector(this.options.redirectParamSelector);t.value=this.options.redirectTo,e.disabled=!0}catch{}}_getForm(){this.el&&"FORM"===this.el.nodeName?this._form=this.el:this._form=this.el.closest("form")}_registerEvents(){this.el.addEventListener("submit",this._formSubmit.bind(this)),this._form.addEventListener("QuantitySelector/StockAdjusted",this._handleStockAdjusted.bind(this)),this._form.addEventListener("QuantitySelector/OutOfStock",this._handleOutOfStock.bind(this))}_formSubmit(t){t.preventDefault();let e=this._form.getAttribute("action"),i=s.serialize(this._form);this.$emitter.publish("beforeFormSubmit",i),this._preventOffcanvas()?(this.loader&&this.loader.create(),fetch(e,{method:"POST",body:i}).then(t=>{if(!t.ok)throw Error("Add to cart failed");this._updateCart(),this.$emitter.publish("addedToCartWithoutOffcanvas")}).catch(()=>{this.loader&&this.loader.remove(),this._openOffCanvasCarts(e,i)})):this._openOffCanvasCarts(e,i)}_preventOffcanvas(){return document.querySelector("[data-zen-off-canvas-prevent-on-add-to-cart]")}_updateCart(){this.loader&&this.loader.remove();let t=window.PluginManager.getPluginInstances("CartWidget");if(!t?.length){this.buyButton&&this._createFailureIcon();return}let e=t[0],i=e.el.innerHTML,s=t=>{let n=t.detail?.content;e.$emitter.unsubscribe("fetch.ZenAddToCartPreventOffcanvas",s),n&&n.trim()!==i.trim()?this.buyButton&&this._createSuccessIcon():(this.buyButton&&this._createFailureIcon(),this._dispatchFormEvent("QuantitySelector/OutOfStock"))};e.$emitter.subscribe("fetch.ZenAddToCartPreventOffcanvas",s),t.forEach(t=>t.fetch())}_createSuccessIcon(){this.buyButton.innerHTML='<span class=\'icon icon-checkmark\'><svg xmlns="http://www.w3.org/2000/svg" id="meteor-icon-kit__regular-checkmark" viewBox="0 0 22 15" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.70711 6.2929C1.31658 5.90237 0.68342 5.90237 0.29289 6.2929C-0.097631 6.6834 -0.097631 7.3166 0.29289 7.7071L7.29289 14.7071C7.68342 15.0976 8.31658 15.0976 8.70711 14.7071L21.7071 1.70711C22.0976 1.31658 22.0976 0.68342 21.7071 0.29289C21.3166 -0.09763 20.6834 -0.09763 20.2929 0.29289L8 12.5858L1.70711 6.2929z" fill="#758CA3"/></svg></span>',setTimeout(()=>{this._removeIcon()},1500)}_createFailureIcon(){this.buyButton.innerHTML='<span class=\'icon icon-x\'><svg xmlns="http://www.w3.org/2000/svg" id="meteor-icon-kit__regular-times" viewBox="0 0 18 18" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.5858 9L0.29289 1.70711C-0.09763 1.31658 -0.09763 0.68342 0.29289 0.29289C0.68342 -0.09763 1.31658 -0.09763 1.70711 0.29289L9 7.5858L16.2929 0.29289C16.6834 -0.09763 17.3166 -0.09763 17.7071 0.29289C18.0976 0.68342 18.0976 1.31658 17.7071 1.70711L10.4142 9L17.7071 16.2929C18.0976 16.6834 18.0976 17.3166 17.7071 17.7071C17.3166 18.0976 16.6834 18.0976 16.2929 17.7071L9 10.4142L1.70711 17.7071C1.31658 18.0976 0.68342 18.0976 0.29289 17.7071C-0.09763 17.3166 -0.09763 16.6834 0.29289 16.2929L7.5858 9z" fill="#758CA3"/></svg></span>',setTimeout(()=>{this._removeIcon()},1500)}_removeIcon(){this.buyButton.innerHTML=this.initialBuyButtonContent}_openOffCanvasCarts(t,e){window.PluginManager.getPluginInstances("OffCanvasCart").forEach(i=>
1this._openOffCanvasCart(i,t,e))}_openOffCanvasCart(t,e,i){t.openOffCanvas(e,i,()=>{this.$emitter.publish("openOffCanvasCart")})}_handleStockAdjusted(t){let e=this.options.stockAdjustedText||"";e=e.replace("%quantity%",t.detail.quantity),this._showStockAlert(e)}_handleOutOfStock(){this._showStockAlert(this.options.outOfStockText||"");let t=this._form.querySelector(this.options.buyButtonSelector);t&&(t.disabled=!0)}_showStockAlert(t){let e=this._form.querySelector(this.options.stockAlertTemplateSelector);if(!e)return;let i=e.parentElement.querySelector(`.${this.options.stockAlertClass}`);i&&i.remove();let s=e.content.firstElementChild.cloneNode(!0);s.classList.add(this.options.stockAlertClass);let n=s.querySelector(".alert-content-container");n&&(n.textContent=t),e.insertAdjacentElement("afterend",s)}_dispatchFormEvent(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.el.closest("form")?.dispatchEvent(new CustomEvent(t,{detail:e}))}}},5683(t,e,i){i.d(e,{A:()=>r});let s="loader",n={BEFORE:"before",INNER:"inner"};class r{constructor(t,e=n.BEFORE){this.parent=t instanceof Element?t:document.body.querySelector(t),this.position=e}create(){if(!this.exists()){if(this.position===n.INNER){this._previousHTML=this.parent.innerHTML,this.parent.innerHTML=r.getTemplate();return}this.parent.insertAdjacentHTML(this._getPosition(),r.getTemplate())}}remove(){if(this.position===n.INNER){this.parent.innerHTML=this._previousHTML;return}this.parent.querySelectorAll(`.${s}`).forEach(t=>t.remove())}exists(){return this.parent.querySelectorAll(`.${s}`).length>0}_getPosition(){return this.position===n.BEFORE?"afterbegin":"beforeend"}static getTemplate(){return`<div class="${s}" role="status"> 2 <span class="visually-hidden">Loading...</span> 3 </div>`}static SELECTOR_CLASS(){return s}}}}]);
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.