1class SearchModal extends HTMLElement{constructor(){super();let _this=this;this.openSearchModal=document.querySelectorAll(".open-searchform"),this.searchFormContainer=this.querySelector(".searchform"),this.searchresults=this.querySelector(".predictive-search"),this.searchQuery=this.querySelector('form[action="/search"] [name="q"]'),this.searchFormContainer.addEventListener("keyup",event=>{event.code.toUpperCase()==="ESCAPE"&&this.close()}),this.openSearchModal.forEach(toggleBtn=>{toggleBtn.addEventListener("click",function(event){_this.onToggleBtnClick(event)}),toggleBtn.setAttribute("role","button"),toggleBtn.setAttribute("aria-expanded","false")}),this.querySelector(".search-modal__close-button").addEventListener("click",this.close.bind(this)),this.typingTimer,this.searchQuery.addEventListener("input",this.queryInput.bind(this)),this.searchQuery.addEventListener("keydown",()=>{clearTimeout(this.typingTimer)})}isOpen(){return this.searchFormContainer.hasAttribute("open")}onToggleBtnClick(event){event.preventDefault(),event.stopPropagation(),this.searchFormContainer.hasAttribute("open")?this.close():this.open(event)}onBodyClick(event){this.contains(event.target)||this.close(!1)}queryInput(event){let _this=this,queryValue=event.currentTarget.value.trim();clearTimeout(_this.typingTimer),_this.typingTimer=setTimeout(function(){_this._queryChange(queryValue)},1e3)}_queryChange(queryValue){if(queryValue.length<=0||queryValue==null)return;let searchType=this.searchFormContainer.querySelector('[name="type"]').value;fetch(`${routes.predictive_searh}?q=${queryValue}&resources[type]=${searchType}&resources[options][unavailable_products]=last`).then(response=>response.json()).then(response=>{const searchResults=response.resources.results;let productsList="";searchResults.products.length>0?(searchResults.products.forEach(product=>{const productPrice=Shopify.formatMoney(product.price*100,window.globalVariables.money_format);let resultUI=`<div class="col-sm-6 px-2"><div class="predictive-search-product my-2 mx-n2 row"> 2 <div class="col-3 px-2"> 3 <a href="${product.url}"><img src="${product.image}" alt="${product.title}"></a> 4 </div> 5 <div class="col-9 px-2"> 6 <h6 class="product-title"><a href="${product.url}">${product.title}</a></h6> 7 <p class="product-price">${productPrice}</p> 8 </div> 9 </div></div>`;product.tags.includes("hidden")==!1&&(productsList+=resultUI)}),this.searchresults&&(this.searchresults.querySelector(".predictive-search-product-list").innerHTML=productsList,this.searchresults.querySelector(".predictive-search-footer a").href=`/search?q=${queryValue}&resources[type]=${searchType}`,this.searchresults.style.display="block")):this.searchresults&&(this.searchresults.querySelector(".predictive-search-product-list").innerHTML="",this.searchresults.style.display="none")}).catch(e=>{console.error(e)}).finally(()=>{})}open(event){this.onBodyClickEvent=this.onBodyClickEvent||this.onBodyClick.bind(this),this.searchFormContainer.setAttribute("open",!0),this.classList.add("open__modal"),this.removeAttribute("style"),document.body.addEventListener("click",this.onBodyClickEvent),Utility.trapFocus(this),Utility.forceFocus(document.getElementById("Search-In-Modal"))}close(focusToggle=!0){Utility.removeTrapFocus(),this.searchFormContainer.removeAttribute("open"),this.classList.remove("open__modal"),document.body.removeEventListener("click",this.onBodyClickEvent),this.searchresults&&(this.searchresults.querySelector(".predictive-search-product-list").innerHTML="",this.searchresults.style.display="none")}}customElements.define("search-modal",SearchModal); 10//# sourceMappingURL=/cdn/shop/t/75/assets/component-search.js.map?v=86526390224944020661789678876
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.