| | |
| | | }); |
| | | } |
| | | |
| | | navIDs() { |
| | | return Array.from(this.navs.keys()).map((nav) => `#${nav}`); |
| | | } |
| | | |
| | | initListeners() { |
| | | this.clickListener = this.handleClick.bind(this); |
| | | this.escapeListener = this.handleEscape.bind(this); |
| | |
| | | if (this.navs.size === 0) { |
| | | return; |
| | | } |
| | | if (this.openNav && !e.target.closest(this.openNav)) { |
| | | this.toggleNav(false); |
| | | if (this.openNav && e.target.closest(`#${this.openNav}`) === null) { |
| | | this.toggleNav(false, this.openNav); |
| | | } |
| | | if (!e.target.closest(... this.navIDs())) { |
| | | return; |
| | | } |
| | | |
| | | // if (!e.target.closest(this.openNav)) { |
| | | // console.log('Not closest nav ids'); |
| | | // console.log(this.navIDs()); |
| | | // return; |
| | | // } |
| | | |
| | | let toggle = e.target.closest('.toggle.main'); |
| | | if (toggle) { |
| | |
| | | this.toggleNav(!nav.classList.contains('open'), nav.id); |
| | | } |
| | | |
| | | let submenuToggle = e.target.closest('[data-action="toggle-submenu"]') |
| | | let submenuToggle = e.target.closest('[data-action="toggle-submenu"], .has-submenu .a') |
| | | if (submenuToggle) { |
| | | let li = submenuToggle.closest('li'); |
| | | this.toggleSubmenu(!li.classList.contains('open'), li); |
| | |
| | | } |
| | | |
| | | handleHoverOn(e) { |
| | | console.log(e.target); |
| | | let nav = e.target.closest('nav'); |
| | | if (nav) { |
| | | this.toggleNav(true, nav.id); |
| | |
| | | } |
| | | |
| | | handleHoverOff(e) { |
| | | console.log(e.target); |
| | | let nav = e.target.closest('nav'); |
| | | if (nav) { |
| | | this.toggleNav(false, nav.id); |
| | |
| | | this.openNav = null; |
| | | } |
| | | document.removeEventListener('keydown', this.escapeListener); |
| | | Array.from(nav.submenus).forEach(submenu => { |
| | | if(submenu.classList.contains('open')) { |
| | | this.toggleSubmenu(false, submenu); |
| | | } |
| | | }); |
| | | if (!nav.nav.classList.contains('sidebar')) { |
| | | Array.from(nav.submenus).forEach(submenu => { |
| | | if(submenu.classList.contains('open')) { |
| | | this.toggleSubmenu(false, submenu); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | nav.nav.ariaExpanded = on; |