PageSourceSearch

https://nuunlife.com/cdn/shop/t/637/assets/app-component-main-header.js?v=157561088294032923311790683394

js nuunlife.com collected 2026-10-02 03:56:23 UTC 11,116 bytes, 2 lines download raw bytes

1if(!customElements.get("main-header")){class MainHeader extends HTMLElement{constructor(){super(),this.menuButtons=this.querySelectorAll(".header__menu-btn"),this.subMenus=this.querySelectorAll(".header__sub"),this.subMenusContainer=this.querySelector(".header__sub-list"),this.activeMenu=null,this.onMouseoverBtn=this.onMouseoverBtn.bind(this),this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onClickMenuBtn=this.onClickMenuBtn.bind(this),this.onMenuBtnKeydown=this.onMenuBtnKeydown.bind(this),this.onSubmenuKeydown=this.onSubmenuKeydown.bind(this),this.onSubmenuFocusOut=this.onSubmenuFocusOut.bind(this),this.leaveTimer=null,this.hoverTimer=null}connectedCallback(){this.menuButtons.forEach(btn=>{btn.addEventListener("mouseover",this.onMouseoverBtn),btn.addEventListener("click",this.onClickMenuBtn),btn.addEventListener("keydown",this.onMenuBtnKeydown)}),this.subMenus.forEach(submenu=>{submenu.addEventListener("keydown",this.onSubmenuKeydown),submenu.addEventListener("focusout",this.onSubmenuFocusOut)}),this.addEventListener("mouseenter",this.onMouseEnter),this.addEventListener("mouseleave",this.onMouseLeave)}disconnectedCallback(){this.menuButtons.forEach(btn=>{btn.removeEventListener("mouseover",this.onMouseoverBtn),btn.addEventListener("click",this.onClickMenuBtn),btn.removeEventListener("keydown",this.onMenuBtnKeydown)}),this.subMenus.forEach(submenu=>{submenu.removeEventListener("keydown",this.onSubmenuKeydown),submenu.removeEventListener("focusout",this.onSubmenuFocusOut)}),this.removeEventListener("mouseenter",this.onMouseEnter),this.removeEventListener("mouseleave",this.onMouseLeave)}onMenuBtnKeydown(e){const btn=e.currentTarget;if(e.key==="Enter"||e.key===" "){const index=Number(btn.dataset.index);this.activeMenu=btn,this.expandMenu(index,!0);return}}onSubmenuFocusOut(e){const submenu=e.currentTarget,relatedTarget=e.relatedTarget;submenu instanceof HTMLElement&&relatedTarget instanceof HTMLElement&&setTimeout(()=>{!submenu.contains(relatedTarget)&&this.collapseMenu(!1,!0)})}onSubmenuKeydown(e){if(e.key==="Escape"||e.key==="esc"){this.collapseMenu(!1,!0);return}}onClickMenuBtn(e){const menuBtn=e.target,index=Number(menuBtn.dataset.index);this.activeMenu=menuBtn,this.expandMenu(index,!0)}onMouseoverBtn(e){const btn=e.currentTarget;if(this.hoverTimer&&(clearTimeout(this.hoverTimer),this.hoverTimer=null),this.activeMenu===btn)return;const keepMainHeaderOpen=this.activeMenu!==null,toggleDelay=keepMainHeaderOpen?300:200;this.hoverTimer=window.setTimeout(()=>{this.collapseMenu(keepMainHeaderOpen),this.activeMenu=btn;const menuIndex=parseInt(this.activeMenu.dataset.index||"-1",10);menuIndex!==-1&&this.expandMenu(menuIndex)},toggleDelay)}onMouseEnter(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null)}onMouseLeave(){this.leaveTimer=window.setTimeout(()=>{this.collapseMenu(),this.leaveTimer=null},300)}expandMenu(index,focusFirstItem=!1){this.menuButtons[index].setAttribute("aria-expanded","true");const submenu=this.subMenus[index];submenu.classList.add("is-open"),submenu.dataset.type=="menu_products"&&submenu.querySelector("product-menu")?.setAttribute("open","true");let link=null;focusFirstItem&&(link=submenu.querySelector(".header__sub-nested-menu-link")||submenu.querySelector(".header__sub-content-block")),link&&link.focus()}collapseMenu(keepMainHeaderOpen=!1,focusHeader=!1){const submenu=this.getActiveSubmenu();if(submenu&&keepMainHeaderOpen===!1){this.subMenusContainer.classList.add("is-closing"),this.subMenusContainer.addEventListener("animationend",()=>{submenu.classList.remove("is-open"),this.subMenusContainer.classList.remove("is-closing")},{once:!0});const index=Number(submenu.dataset.submenu);this.menuButtons[index].setAttribute("aria-expanded","false")}else submenu&&keepMainHeaderOpen===!0&&submenu.classList.remove("is-open");if(this.querySelectorAll('product-menu[open="true"]').forEach(x=>x.setAttribute("open","false")),this.activeMenu=null,focusHeader){const index=Number(submenu?.dataset.submenu);this.menuButtons[index].focus()}}getActiveSubmenu(){if(this.activeMenu){const menuIndex=parseInt(this.activeMenu.dataset.index||"-1",10);return this.subMenus[menuIndex]}return null}}class ProductMenu extends HTMLElement{constructor(){super(),this.activeMenu=null,this.activeLink=null,this.hoverLink=null,this.links=[],this.blocks=[],this.onMouseenterLink=this.onMouseenterLink.bind(this),this.onMouseleaveLink=this.onMouseleaveLink.bind(this),this.onKeydown=this.onKeydown.bind(this),this.timer=null,this.isInitialized=!1,this.addEventListener("keydown",this.onKeydown)}static get observedAttributes(){return["open"]}
1attributeChangedCallback(name,oldValue,newValue){if(name==="open"&&oldValue!==newValue){if(newValue==="true"){this.openMenu();return}this.closeMenu()}}connectedCallback(){this.closeMenu()}initialize(){this.isInitialized||(this.links=this.querySelectorAll(".header__sub-nested-menu-link"),this.blocks=this.querySelectorAll(".header__sub-nested-blocks"),this.menuContainer=this.querySelector(".header__sub-nested-menu"),this.isInitialize=!0)}onKeydown(e){const target=e.target,key=e.key;if(key==="Enter"||key===" "){if(target.tagName==="A")return;const index=Number(target.dataset.index);this.setActiveSubmenu(index)}}openMenu(){this.initialize(),this.setActiveSubmenu(0),this.links.forEach(x=>{x.addEventListener("mouseenter",this.onMouseenterLink),x.addEventListener("mouseleave",this.onMouseleaveLink)})}closeMenu(){this.links.forEach(x=>{x.removeEventListener("mouseenter",this.onMouseenterLink),x.removeEventListener("mouseleave",this.onMouseleaveLink)})}setActiveSubmenu(index){this.links.forEach(x=>x.classList.remove("is-active")),this.blocks.forEach(x=>x.classList.remove("is-active")),this.blocks.forEach(x=>x.classList.remove("is-visible"));const link=this.links[index],block=this.blocks[index];link.classList.add("is-active"),block.classList.add("is-active"),this.activeLink=link,window.setTimeout(()=>{block.classList.add("is-visible")},50)}onMouseenterLink(e){this.hoverLink=e.currentTarget,this.timer=setTimeout(()=>{if(this.hoverLink){const index=parseInt(this.hoverLink.dataset.index||"0");this.setActiveSubmenu(index)}},200)}onMouseleaveLink(){this.timer&&(clearTimeout(this.timer),this.timer=null)}}class HeaderSearch extends HTMLElement{constructor(){super(),this.form=this.querySelector(".header__search"),this.searchBtn=this.querySelector(".header__search-btn"),this.input=this.querySelector(".header__search-input"),this.parentHeader=this.closest(".header"),this.handleSearchBtnClick=this.handleSearchBtnClick.bind(this),this.handleOutsideClick=this.handleOutsideClick.bind(this),this.handleFormClick=this.handleFormClick.bind(this),this.handleFormKeyDown=this.handleFormKeyDown.bind(this)}connectedCallback(){this.form.addEventListener("click",this.handleFormClick),this.searchBtn.addEventListener("click",this.handleSearchBtnClick)}disconnectedCallback(){this.form.remvoeEventListener("click",this.handleFormClick),this.searchBtn.removeEventListener("click",this.handleSearchBtnClick)}handleSearchBtnClick(e){if(e.preventDefault(),this.parentHeader.classList.contains("has-search")===!1){this.openSearch();return}if(this.input.value===""){this.closeSearch();return}this.submitting=!0,this.form.submit()}handleFormClick(e){e.stopPropagation()}openSearch(){this.parentHeader.classList.add("has-search"),this.input.tabIndex=0,this.input.setAttribute("aria-hidden","false"),this.input.focus(),document.body.addEventListener("click",this.handleOutsideClick),this.form.addEventListener("keydown",this.handleFormKeyDown)}closeSearch(){this.parentHeader.classList.remove("has-search"),this.input.value="",this.input.setAttribute("aria-hidden","true"),this.input.tabIndex=-1,document.body.removeEventListener("click",this.handleOutsideClick),this.form.removeEventListener("keydown",this.handleFormKeyDown),document.activeElement===this.input&&this.searchBtn.focus()}handleFormKeyDown(e){if(e.key==="Escape"){this.closeSearch();return}}handleOutsideClick(){this.closeSearch()}}class HeaderDrawer extends HTMLElement{constructor(){super(),this.rootMenu=this.querySelector(".header-drawer.is-root"),this.searchDrawer=this.querySelector(".header-drawer.is-search"),this.predictiveSearch=this.querySelector("predictive-search"),this.drawers=[],this.links=[],this.closeButtons=[],this.backButtons=[],this.toggleBtn=document.querySelector(".header__toggle-mobile-menu"),this.searchExpandBtn=document.querySelector(".header__search-expand-btn"),this.handleToggleBtnClick=this.handleToggleBtnClick.bind(this),this.handleCloseBtnClick=this.handleCloseBtnClick.bind(this),this.handleBackBtnClick=this.handleBackBtnClick.bind(this),this.handleSearchExpandBtnClick=this.handleSearchExpandBtnClick.bind(this),this.initialize()}connectedCallback(){this.toggleBtn.addEventListener("click",this.handleToggleBtnClick),this.searchExpandBtn?.addEventListener("click",this.handleSearchExpandBtnClick)}disconnectedCallback(){this.toggleBtn.removeEventListener("click",this.handleToggleBtnClick),this.searchExpandBtn?.removeEventListener("click",this.handleSearchExpandBtnClick),this.isInitialized&&(this.closeButtons.forEach(x=>x.removeEventListener("click",this.handleCloseBtnClick)),this.links.forEach(x=>x.removeEventListener("click",this.handleLinkClick)),this.backButtons.forEach(x=>{x.removeEventListener("click",this.handleBackBtnClick)}))}initialize(){this.isInitialized||(this.drawers=Array.from(this.querySelectorAll(".header-drawer")),this.links=Array.from(this.querySelectorAll(".header-drawer__link")),this.backButtons=Array.from(this.querySelectorAll(".header-drawer__back-btn")),this.closeButtons=Array.from(this.querySelectorAll(".header-drawer__close-btn")),this.closeButtons.forEach(x=>x.addEventListener("click",this.handleCloseBtnClick)),this.backButtons.forEach(x=>x.addEventListener("click",this.handleBackBtnClick)),this.links.forEach(x=>x.addEventListener("click",this.handleLinkClick)),this.isInitialized=!0)}
1handleCloseBtnClick(){this.drawers.forEach(x=>x.classList.remove("is-open")),document.body.classList.remove("has-open-menu"),this.predictiveSearch?.reset()}handleLinkClick(e){const sibling=e.currentTarget.nextElementSibling;sibling&&sibling.classList.add("is-open")}handleBackBtnClick(e){const drawer=e.currentTarget.closest(".header-drawer");drawer&&(drawer.classList.remove("is-open"),drawer===this.searchDrawer&&this.predictiveSearch?.reset())}handleToggleBtnClick(){this.initialize(),this.rootMenu.classList.contains("is-open")?(document.body.classList.remove("has-open-menu"),this.rootMenu.classList.remove("is-open"),this.predictiveSearch?.reset()):(this.rootMenu.classList.add("is-open"),document.body.classList.add("has-open-menu"))}handleSearchExpandBtnClick(){this.searchDrawer.classList.add("is-open")}}customElements.define("main-header",MainHeader),customElements.define("product-menu",ProductMenu),customElements.define("header-search",HeaderSearch),customElements.define("header-drawer",HeaderDrawer)}
2//# sourceMappingURL=/cdn/shop/t/637/assets/app-component-main-header.js.map?v=157561088294032923311790683394

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.