| | |
| | | this.navs = new Map(); |
| | | document.querySelectorAll('nav:has(.submenu), nav:has(.toggle)').forEach(nav => { |
| | | let navID = nav.id; |
| | | if (navID === '') { |
| | | if (navID === '' || this.navs.has(navID)) { |
| | | navID = `nav-${this.counter}`; |
| | | nav.id = navID; |
| | | this.counter++; |
| | |
| | | |
| | | handleHoverOn(e) { |
| | | let target = e.currentTarget; |
| | | if (this.clicked.has(target)) { |
| | | if (this.clicked.has(target) || target.closest('nav.sidebar')) { |
| | | return; |
| | | } |
| | | if (target.classList.contains('has-submenu')) { |
| | |
| | | |
| | | handleHoverOff(e) { |
| | | let target = e.currentTarget; |
| | | if (this.clicked.has(target)) { |
| | | if (this.clicked.has(target) || target.closest('nav.sidebar')) { |
| | | return; |
| | | } |
| | | |
| | | if (target.classList.contains('has-submenu')) { |
| | | this.toggleSubmenu(false, target); |
| | | } else if (target.tagName === 'NAV') { |
| | |
| | | } |
| | | |
| | | toggleSubmenu(on, submenu) { |
| | | if (on && this.openSubmenu && this.openSubmenu !== submenu) { |
| | | if (on && this.openSubmenu && this.openSubmenu !== submenu && !this.openSubmenu.contains(submenu)) { |
| | | this.toggleSubmenu(false, this.openSubmenu); |
| | | } |
| | | |
| | |
| | | this.openSubmenu = submenu; |
| | | } else if (this.openSubmenu === submenu) { |
| | | this.openSubmenu = null; |
| | | this.clicked.delete(submenu); |
| | | } |
| | | |
| | | |