PageSourceSearch

https://drewsboots.com/cdn/shop/t/14/assets/component-predictive-search.js?v=6998529617804588691753918224

js drewsboots.com collected 2026-10-02 11:37:43 UTC 5,436 bytes, 2 lines download raw bytes

1(()=>{class PredictiveSearch extends HTMLElement{constructor(){super(),this.input=this.querySelector("[data-predictive-search-input]"),this.submitButton=this.querySelector("[data-predictive-search-submit]"),this.clearButton=this.querySelector("[data-predictive-search-clear]"),this.resultsContainer=this.querySelector("[data-predictive-search-results]"),this.emptyStateContainer=this.querySelector("[data-predictive-search-empty-state]"),this.boxShadowElement=this.closest(".popup-shadow"),this.isPredictive=this.getAttribute("is-predictive")==="true",this.searchQuery=this.input.value,this.searchChangeTimer=null,this.handleInputChange=this.handleInputChange.bind(this),this.handleInputKeyDown=this.handleInputKeyDown.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleClear=this.handleClear.bind(this),this.handleClearButtonVisibility=this.handleClearButtonVisibility.bind(this),this.handleNavButtonClick=this.handleNavButtonClick.bind(this),this.resetState=this.resetState.bind(this)}connectedCallback(){window.wetheme.webcomponentRegistry.register({key:"component-predictive-search"}),this.input.addEventListener("input",this.handleInputChange),this.input.addEventListener("keydown",this.handleInputKeyDown),this.submitButton.addEventListener("click",this.handleSubmit),this.clearButton.addEventListener("click",this.handleClear)}handleInputChange(){this.handleClearButtonVisibility(),this.isPredictive&&(this.input.value!==""?(this.searchQuery=this.input.value,this.searchChangeTimer&&window.clearTimeout(this.searchChangeTimer),this.searchChangeTimer=window.setTimeout(()=>{this.performSearch(this.searchQuery),this.searchChangeTimer=null},250)):this.resetState())}handleClearButtonVisibility(){this.input.value===""?(this.clearButton.classList.add("fade-out"),setTimeout(()=>{this.clearButton.classList.add("hide"),this.clearButton.classList.remove("fade-out")},250)):this.clearButton.classList.remove("hide")}handleInputKeyDown(event){event.key==="Enter"&&this.handleSubmit()}handleSubmit(){window.location.href=`${window.Shopify.routes.root}search?q=${encodeURIComponent(this.input.value)}*`}handleClear(){this.input.value="",this.searchQuery="",this.handleClearButtonVisibility(),this.input.focus(),this.resetState()}async performSearch(query){const url=`${window.Shopify.routes.root}search/suggest?q=${encodeURIComponent(query)}&section_id=predictive-search-results&resources[limit]=10&resources[limit_scope]=each&resources[type]=query,product,collection,page,article`;try{const response=await fetch(url),responseText=await response.text();if(response.status===417||this.input.value==="")return;this.emptyStateContainer&&this.emptyStateContainer.setAttribute("hidden","");const content=new DOMParser().parseFromString(responseText,"text/html").querySelector(".shopify-section");content&&this.renderSearchResults(content.innerHTML)}catch(error){console.error("Failed to fetch search results:",error)}}renderSearchResults(html){this.resultsContainer.innerHTML=html,this.boundNavButtons&&this.boundNavButtons.forEach(el=>{el.removeEventListener("click",this.handleNavButtonClick)}),this.boundNavButtons=[];const navButtons=this.resultsContainer.querySelector("[data-predictive-search-nav-buttons]");navButtons&&(navButtons.addEventListener("click",this.handleNavButtonClick),this.boundNavButtons.push(navButtons))}handleNavButtonClick(e){e.stopPropagation();const navButton=e.target,resultId=navButton.getAttribute("data-nav-id");if(!resultId)return;const results=this.resultsContainer.querySelector(`[data-grid-id="${resultId}"]`);if(!results)return;const previousActiveButton=this.resultsContainer.querySelector("[data-nav-id].active"),previousActiveResult=this.resultsContainer.querySelector("[data-grid-id]:not([hidden])");previousActiveButton&&(previousActiveButton.setAttribute("aria-selected","false"),previousActiveButton.classList.remove("active")),navButton.setAttribute("aria-selected","true"),navButton.classList.add("active");const heightContainer=this.resultsContainer.querySelector("[data-predictive-search-main-results]"),beforeHeight=heightContainer.clientHeight;previousActiveResult&&previousActiveResult.setAttribute("hidden",""),results.removeAttribute("hidden"),heightContainer.animate([{height:`${beforeHeight}px`},{height:`${heightContainer.clientHeight}px`}],{duration:500,easing:"cubic-bezier(0.85, 0, 0.15, 1)"})}resetState(){if(this.searchChangeTimer&&window.clearTimeout(this.searchChangeTimer),this.emptyStateContainer){this.emptyStateContainer.removeAttribute("hidden"),this.renderSearchResults("");return}this.resultsContainer.classList.add("fade-out"),this.boxShadowElement&&this.boxShadowElement.classList.remove("popup-shadow"),setTimeout(()=>{this.renderSearchResults(""),this.resultsContainer.classList.remove("fade-out"),this.boxShadowElement&&this.boxShadowElement.classList.add("popup-shadow")},300)}disconnectedCallback(){this.input.removeEventListener("input",this.handleInputChange),this.input.removeEventListener("keydown",this.handleInputKeyDown),this.submitButton.removeEventListener("click",this.handleSubmit),this.clearButton.removeEventListener("click",this.handleClear),this.boundNavButtons&&this.boundNavButtons.forEach(el=>{el.removeEventListener("click",this.handleNavButtonClick)})}}customElements.define("predictive-search",PredictiveSearch)})();
2//# sourceMappingURL=/cdn/shop/t/14/assets/component-predictive-search.js.map?v=6998529617804588691753918224

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.