PageSourceSearch

https://lifevac.net/cdn/shop/t/2/assets/component_search.js?v=158669280372628912541731617682

js lifevac.net collected 2026-10-02 05:30:55 UTC 8,964 bytes, 17 lines download raw bytes

1if(!customElements.get("search-form")){class ComponentSearch extends HTMLElement{constructor(){super(),this.searchField=this.querySelector('input[name="q"]'),this.results=this.querySelector(".search-results"),this.form=this.querySelector("form"),this.searchDelay=300,this.searchType=this.querySelector('input[name="type"]').value||"product",this.controller=null,this.requestTimeout=0,this.predictiveSearch=this.dataset.predictiveSearch=="true",this.wildcard=this.dataset.wildcard=="true"?"*":"",this.showPrice=this.dataset.showPrice=="true",this.dataset.autocomplete=="true"&&(this.predictiveSearch&&(this.searchType+=",collection"),this.documentClickHandler=this.documentClick.bind(this),this.searchField.addEventListener("input",this.doSearch.bind(this)),this.searchField.addEventListener("focus",()=>{this.resultsVisible||this.searchField.dispatchEvent(new CustomEvent("input"))})),this.form.addEventListener("submit",e=>{e.preventDefault();const formData=new FormData(this.form),searchParams=new URLSearchParams(formData),query=searchParams.get("q");this.saveSearchTerm(query),query&&query!=""&&(searchParams.set("q",this.wildcard+query+this.wildcard),location=this.form.action+"?"+searchParams.toString())})}saveSearchTerm(query){try{query=query.trim();var typeParam=this.form.querySelector('[name="type"]').value;if(typeParam.indexOf("product")>-1){var lastTerms=this.getLastSearchTerms();lastTerms.indexOf(query)==-1&&(lastTerms.splice(0,0,query),lastTerms=lastTerms.slice(0,5),sessionStorage.setItem("last_search_terms",lastTerms.join(",")))}}catch(e){console.warn(e)}}getLastSearchTerms(){var lastTerms=[];try{lastTerms=(sessionStorage.getItem("last_search_terms")||"").split(",").map(x=>x.trim()).filter(x=>x!="")}catch(e){console.warn(e)}return lastTerms}doSearch(term){var standardSearchTerm=typeof term=="string"?term:this.wildcard+this.searchField.value.trim()+this.wildcard;this.predictiveSearch?term=typeof term=="string"?term:this.searchField.value.trim():term=standardSearchTerm,this.controller&&(this.controller.abort(),this.controller=null),clearTimeout(this.requestTimeout),standardSearchTerm.length>=3?(this.showSearchingResults(),this.requestTimeout=setTimeout(()=>{this.controller=new AbortController;var searchSectionId=this.predictiveSearch?"search_predictive_json":"search_standard_json",predictiveLimitQty=10,searchUrl=this.predictiveSearch?routes.predictive_search_url+"?resources[type]="+this.searchType+"&q="+encodeURIComponent(term)+"&resources[limit]="+predictiveLimitQty+"&section_id="+searchSectionId:routes.search_url+"?section_id="+searchSectionId+"&type="+this.searchType+"&q="+encodeURIComponent(term);$s.get({signal:this.controller.signal,url:searchUrl,success:data=>{if(this.resultsVisible){var parser=new DOMParser,doc=parser.parseFromString(data,"text/html"),response=JSON.parse(doc.querySelector("div").innerHTML);this.clearResults(!1);var categories=0;if(response.results_count>0||response.collections&&response.collections.length>0){var title=document.createElement("div");title.innerHTML=lngg.search_js__search_results_caption,title.classList.add("visually-hidden"),this.results.appendChild(title);var items=document.createElement("div");if(items.classList.add("search-results-items"),this.results.appendChild(items),response.results.length>0&&categories++,response.collections&&response.collections.length>0&&categories++,response.articles.length>0&&categories++,response.pages.length>0&&categories++,response.results.length>0&&(categories==1&&(response.results=response.results.slice(0,5)),this.buildCategory(items,"product",lngg.search_js__products_title,response.results)),response.collections&&response.collections.length>0&&(categories==1&&(response.collections=response.collections.slice(0,5)),this.buildCategory(items,"collections",lngg.search_js__collections_title,response.collections||[])),response.articles.length>0&&(categories==1&&(response.articles=response.articles.slice(0,5)),this.buildCategory(items,"article",lngg.search_js__articles_title,response.articles)),response.pages.length>0&&(categories==1&&(response.pages=response.pages.slice(0,5)),this.buildCategory(items,"page",lngg.search_js__pages_title,response.pages)),categories>1&&items.classList.add("multi-category"),response.results_count>response.results.length+response.articles.length+response.pages.length){var linkUrl=routes.search_url+"?type="+this.searchType+"&q="+encodeURIComponent(standardSearchTerm);this.results.appendChild(this.buildSeeAllLink(linkUrl,response.results_count))}window.LinkPrefetch&&window.LinkPrefetch.addHoverListener&&window.LinkPrefetch.addHoverListener(this.results)}else this.noResults()}}})},this.searchDelay)):this.suggestedResults()}buildItem(itemJson){var info=document.createElement("div"),title=document.createElement("div"),a=document.createElement("a");if(a.classList.add("result-item","flex","direction-row","justify-content-start","align-items-start"),a.href=itemJson.url,typeof itemJson.thumbnail<"u"){var img=document.createElement("img");img.src=itemJson.thumbnail?itemJson.thumbnail:"",img.alt="",a.appendChild(img)}if(title.classList.add("title"),title.innerHTML=itemJson.title,a.appendChild(info),info.appendChild(title),info.classList.add("info"),this.showPrice&&itemJson.price!=null){var price=document.createElement("div");price.classList.add("price","money"),price.innerHTML=$s.formatMoney(itemJson.price).replace(".00",""),info.appendChild(price)}return a}buildCategory(container,type,categoryTitle,results){var group=document.createElement("div");group.classList.add("search-results-"+type,"search-results-group");var title=document.createElement("div");container.appendChild(title),title.outerHTML='<div class="result-group-title-wrapper"><div class="result-group-title small-label">'+categoryTitle+"</div></div>
1",container.appendChild(group),results.forEach(item=>{group.appendChild(this.buildItem(item))})}buildSeeAllLink(url,resultsQuantity){var a=document.createElement("a");return a.classList.add("btn"),a.href=url,this.predictiveSearch?a.innerHTML=lngg.search_js__see_all_results_link:a.innerHTML=lngg.search_js__see_all_n_results_link.replace(new RegExp(/{{ *quantity *}}/),resultsQuantity),a}showSearchingResults(){if(this.resultsVisible=!0,!this.results.style.minHeight){document.addEventListener("click",this.documentClickHandler);var height=this.results.offsetHeight;this.results.style.minHeight=Math.max(height,80)+"px",this.results.innerHTML='<div class="loader-wrap flex justify-content-center align-items-center"><div class="loader"></div></div>'}}clearResults(removeEvents=!0){removeEvents&&(document.removeEventListener("click",this.documentClickHandler),this.resultsVisible=!1),this.results.innerHTML="",this.results.style.minHeight=""}noResults(){this.suggestedResults(),this.results.innerHTML='<div class="no-results">'+lngg.search_js__no_products_found_message+"</div>"+this.results.innerHTML}suggestedResults(){this.clearResults();for(var popularTerms=[].map(x=>x.trim()).filter(x=>x!=""),typeParam=this.form.querySelector('[name="type"]').value,lastTerms=this.getLastSearchTerms(),popularSearches=this.dataset.popularSearches?JSON.parse(this.dataset.popularSearches):[],html=`<div class="suggested-results" ${popularSearches.length==0&&popularTerms.length==0&&lastTerms.length==0?'style="display: none;"':""}>
2        <div class="grid">
3          <div class="grid-item flex-1" ${popularSearches.length==0?'style="display: none;"':""}>
4            <div class="title heading-font">${lngg.search_js__popular_searches_title}</div>
5            <ul>`,i=0;i<popularSearches.length;i++)html+=`<li class="suggested-item"><a href="${popularSearches[i].url}">${popularSearches[i].title}</a></li>`;html+=`</ul>
6          </div>
7          <div class="grid-item flex-1" ${popularTerms.length==0?'style="display: none;"':""}>
8            <div class="title heading-font">${lngg.search_js__popular_search_terms_title}</div>
9            <ul>`;for(var i=0;i<popularTerms.length;i++)html+=`<li class="suggested-item"><a href="${routes.search_url}?type=${typeParam}&q=${this.wildcard}${encodeURIComponent(popularTerms[i])}${this.wildcard}">${popularTerms[i]}</a></li>`;html+=`</ul>
10          </div>
11          <div class="grid-item flex-1" ${lastTerms.length==0?'style="display: none;"':""}>
12            <div class="title heading-font">${lngg.search_js__your_last_searches_title}</div>
13            <ul>`;for(var i=0;i<lastTerms.length;i++)html+=`<li class="suggested-item"><a href="${routes.search_url}?type=${typeParam}&q=${this.wildcard}${encodeURIComponent(lastTerms[i])}${this.wildcard}">${lastTerms[i]}</a></li>`;html+=`</ul>
14          </div>
15        </div>
16      </div>`,this.results.innerHTML=html,document.addEventListener("click",this.documentClickHandler)}documentClick(e){this.contains(e.target)||this.clearResults()}}customElements.define("search-form",ComponentSearch)}
17//# sourceMappingURL=/cdn/shop/t/2/assets/component_search.js.map?v=158669280372628912541731617682

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.