PageSourceSearch

https://plentum.com/cdn/shop/t/31/assets/search-drawer.js?v=7931255256672546241782484299

js plentum.com collected 2026-09-24 09:51:43 UTC 5,732 bytes, 2 lines download raw bytes

1class DrawerSearchSection extends HTMLElement{constructor(){super(),this.isOpen=!1,this.drawerClass="wt-drawer-search",this.drawer=document.querySelector(`.${this.drawerClass}`),this.classDrawerActive=`${this.drawerClass}--active`,this.pageOverlayClass="search-overlay",this.activeOverlayBodyClass=`${this.pageOverlayClass}-on`,this.body=document.body,this.triggerQuery=[".wt-header__search-trigger",".wt-header__search__close"].join(", "),this.triggers=()=>document.querySelectorAll(this.triggerQuery),this.cachedResults={},this.input=this.querySelector('input[name="q"]'),this.clearButton=this.querySelector(".wt-header__search__clear-button"),this.closeButton=this.querySelector(".wt-header__search__close"),this.predictiveSearchResults=this.querySelector("[data-predictive-search]"),this.mainTrigger=this.querySelector(".wt-header__search-trigger"),this.emptyAnnouncement=this.querySelector(".search-empty"),this.isVisibleClearButton=!1,this.saveSuggestionMenuInDesignMode=this.saveSuggestionMenuInDesignMode.bind(this),this.setupEventListeners(),this.toggleTabindexElements=[this.input,this.closeButton],this.init()}getFocusableElements(){const focusableElementsSelector="button, [href], input:not([type='hidden']), select, [tabindex]",focusableElements=()=>Array.from(this.querySelectorAll(focusableElementsSelector)).filter(el=>!el.hasAttribute("disabled")&&el.tabIndex>=0);return{focusableElements,first:focusableElements()[0],last:focusableElements()[focusableElements().length-1]}}onToggle(){this.hasAttribute("open")?(this.removeAttribute("open"),setTabindex(this.toggleTabindexElements,"-1"),setTabindex([this.mainTrigger],"0"),this.isOpen=!1,setTimeout(()=>{this.mainTrigger.focus()},0)):(this.setAttribute("open",""),setTabindex(this.toggleTabindexElements,"0"),setTabindex([this.mainTrigger],"-1"),this.input.focus(),this.isOpen=!0)}toggleDrawerClasses(){this.onToggle(),this.drawer.classList.toggle(this.classDrawerActive),this.body.classList.toggle(this.activeOverlayBodyClass)}init(){this.triggers().forEach(trigger=>{trigger.addEventListener("click",e=>{e.preventDefault(),this.toggleDrawerClasses()})}),this.clearButton.addEventListener("click",()=>{this.input.value="",this.clearButton.style.display="none",this.isVisibleClearButton=!1,this.clearResults()}),this.addEventListener("keydown",e=>{const isTabPressed=e.key==="Tab"||e.keyCode===9||e.code==="Tab",{first,last}=this.getFocusableElements();(e.key==="Escape"||e.keyCode===27||e.code==="Escape")&&this.isOpen&&this.toggleDrawerClasses(),isTabPressed&&this.isOpen&&(e.shiftKey&&document.activeElement===first?(last.focus(),e.preventDefault()):!e.shiftKey&&document.activeElement===last&&(first.focus(),e.preventDefault()))}),this.input.addEventListener("input",()=>{this.input.value.length>0&&!this.isVisibleClearButton?(this.clearButton.style.display="flex",this.clearButton.setAttribute("tabindex","0"),this.isVisibleClearButton=!0):this.input.value.length===0&&this.isVisibleClearButton&&(this.clearButton.style.display="none",this.clearButton.setAttribute("tabindex","-1"),this.isVisibleClearButton=!1)})}setupEventListeners(){this.querySelector("form.store-search-form").addEventListener("submit",this.onFormSubmit.bind(this)),this.input.addEventListener("input",debounce(event=>{this.onChange(event)},300).bind(this)),Shopify.designMode&&document.addEventListener("shopify:section:load",this.saveSuggestionMenuInDesignMode)}saveSuggestionMenuInDesignMode(){this.body.classList.contains(this.activeOverlayBodyClass)&&this.drawer.classList.toggle(this.classDrawerActive)}getQuery(){return this.input.value.trim()}onChange(){const searchTerm=this.getQuery();searchTerm.length?(this.getSearchResults(searchTerm),this.removeAttribute("empty")):this.clearResults()}onFormSubmit(event){(!this.getQuery().length||this.querySelector('[aria-selected="true"] a'))&&event.preventDefault()}getSearchResults(searchTerm){const queryKey=searchTerm.replace(" ","-").toLowerCase();if(this.setLiveRegionLoadingState(),this.cachedResults[queryKey]){this.renderSearchResults(this.cachedResults[queryKey]);return}fetch(`${routes.predictive_search_url}?q=${encodeURIComponent(searchTerm)}&${encodeURIComponent("resources[type]")}=product,page,article,collection,query&${encodeURIComponent("resources[limit_scope]")}=each&${encodeURIComponent("resources[limit]")}=6&section_id=predictive-search`).then(response=>{if(!response.ok)throw new Error(response.status);return response.text()}).then(text=>{const resultsMarkup=new DOMParser().parseFromString(text,"text/html").querySelector("#shopify-section-predictive-search").innerHTML;this.cachedResults[queryKey]=resultsMarkup,this.renderSearchResults(resultsMarkup)}).catch(error=>{throw error})}setLiveRegionLoadingState(){this.statusElement=this.statusElement||this.querySelector(".predictive-search-status"),this.loadingText=this.loadingText||this.getAttribute("data-loading-text"),this.setLiveRegionText(this.loadingText),this.setAttribute("loading",!0)}setLiveRegionText(statusText){this.statusElement.setAttribute("aria-hidden","false"),this.statusElement.textContent=statusText,setTimeout(()=>{this.statusElement.setAttribute("aria-hidden","true")},1e3)}renderSearchResults(resultsMarkup){this.predictiveSearchResults.innerHTML=resultsMarkup,this.setAttribute("results",!0),this.setLiveRegionResults()}setLiveRegionResults(){this.removeAttribute("loading"),this.setLiveRegionText(this.querySelector("[data-predictive-search-live-region-count-value]")?.textContent)}clearResults(){this.input.value="",this.removeAttribute("results"),this.setAttribute("empty",!0)}}customElements.define("search-drawer",DrawerSearchSection);
2//# sourceMappingURL=/cdn/shop/t/31/assets/search-drawer.js.map?v=7931255256672546241782484299

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.