PageSourceSearch

https://tommyvowles.com/cdn/shop/t/3/assets/search.js?v=53258518836368551891770385317

js tommyvowles.com collected 2026-09-27 05:52:11 UTC 3,558 bytes, 2 lines download raw bytes

1class PredictiveSearch extends HTMLFormElement{constructor(){super(),this.cachedMap=new Map,this.focusElement=this.input,this.resetButton.addEventListener("click",this.clear.bind(this)),this.input.addEventListener("input",FoxTheme.utils.debounce(this.onChange.bind(this),300)),this.input.addEventListener("focus",this.onFocus.bind(this)),this.searchContent=this.querySelector(".search__content"),this.searchRecommendationEmpty=this.dataset.searchRecommendationEmpty==="true",this.closest(".template-search")&&document.addEventListener("click",this.handleClickOutside.bind(this))}get input(){return this.querySelector('input[type="search"]')}get resetButton(){return this.querySelector('button[type="reset"]')}onFocus(event){if(this.closest(".template-search")){if(document.body.classList.add("predictive-search-open"),this.getQuery().length===0)return;const url=this.setupURL().toString();this.renderSection(url,event)}}getQuery(){return this.input.value.trim()}clear(event=null){event&&event.preventDefault(),this.searchRecommendationEmpty&&this.searchContent&&this.searchContent.classList.add("hidden"),this.input.value="",this.input.focus(),this.removeAttribute("results")}setupURL(){const url=new URL(`${window.shopUrl}${FoxTheme.routes.predictive_search_url}`);return url.searchParams.set("q",this.getQuery()),url.searchParams.set("resources[limit]",this.dataset.resultsLimit||3),url.searchParams.set("resources[limit_scope]","each"),url.searchParams.set("section_id",FoxTheme.utils.getSectionId(this)),url}onChange(){if(this.getQuery().length===0){this.clear();return}const url=this.setupURL().toString();this.renderSection(url)}renderSection(url){this.cachedMap.has(url)?this.renderSectionFromCache(url):this.renderSectionFromFetch(url)}renderSectionFromCache(url){const responseText=this.cachedMap.get(url);this.renderSearchResults(responseText),this.setAttribute("results","")}renderSectionFromFetch(url){this.setAttribute("loading","true"),this.resetButton.classList.add("btn--loading"),fetch(url).then(response=>{if(!response.ok)throw new Error("Network response was not ok");return response.text()}).then(responseText=>{this.renderSearchResults(responseText),this.cachedMap.set(url,responseText)}).catch(error=>{console.error("Error fetching data: ",error),this.setAttribute("error","Failed to load data")}).finally(()=>{this.removeAttribute("loading"),this.resetButton.classList.remove("btn--loading"),this.setAttribute("results","true")})}renderSearchResults(responseText){const id="PredictiveSearchResults-"+FoxTheme.utils.getSectionId(this),targetElement=document.getElementById(id);if(targetElement){const contentElement=new DOMParser().parseFromString(responseText,"text/html").getElementById(id);contentElement?(this.searchContent?.classList.remove("hidden"),targetElement.innerHTML=contentElement.innerHTML):console.error(`Element with id '${id}' not found in the parsed response.`)}else console.error(`Element with id '${id}' not found in the document.`)}handleClickOutside(event){this.contains(event.target)||setTimeout(()=>{document.body.classList.remove("predictive-search-open")})}}customElements.define("predictive-search",PredictiveSearch,{extends:"form"});class SearchDrawer extends DrawerComponent{constructor(){super()}get requiresBodyAppended(){return!1}get input(){return this.querySelector('input[type="search"]')}get focusElement(){return this.querySelector('input[type="search"]')}}customElements.define("search-drawer",SearchDrawer);
2//# sourceMappingURL=/cdn/shop/t/3/assets/search.js.map?v=53258518836368551891770385317

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.