PageSourceSearch

https://www.grillmastersclub.com/cdn/shop/t/75/assets/component-search.js?v=86526390224944020661789678876

js grillmastersclub.com collected 2026-10-03 19:48:25 UTC 3,832 bytes, 10 lines download raw bytes

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.