@@ -94,25 +94,37 @@ const setupMenu = () => {
9494 const mobileMenuButton = document . querySelector ( "button.hamburger-menu" ) ;
9595 const menuToggleElements = document . querySelectorAll ( "button.menu-toggle" ) ;
9696
97- const closeAllMenus = ( ) => menus . forEach ( ( m ) => m . classList . add ( "hidden" ) ) ;
97+ const closeSubMenus = ( ) => menus . forEach ( ( m ) => m . classList . add ( "hidden" ) ) ;
98+
99+ // get original menu icon from HTML to avoid duplication in JS
100+ const originalMenuIcon = mobileMenuButton . textContent ;
101+
102+ const showMobileMenu = ( ) => {
103+ nav . classList . remove ( "mobile-menu-hidden" ) ;
104+ mobileMenuButton . textContent = "✖" ;
105+ } ;
106+
107+ const hideMobileMenu = ( ) => {
108+ nav . classList . add ( "mobile-menu-hidden" ) ;
109+ mobileMenuButton . textContent = originalMenuIcon ;
110+ } ;
98111
99112 // click on mobile menu button
100113 mobileMenuButton . addEventListener ( "click" , ( ) => {
101114 // toggle menu
102- nav . style . display = nav . style . display === "flex" ? "none" : "flex" ;
103-
104- // change button icon
105- mobileMenuButton . textContent =
106- mobileMenuButton . textContent === "☰" ? "✖" : "☰" ;
115+ nav . classList . contains ( "mobile-menu-hidden" )
116+ ? showMobileMenu ( )
117+ : hideMobileMenu ( ) ;
107118 } ) ;
108119
109120 // setup dropdown menus
110121 menuToggleElements . forEach ( ( toggle ) => {
122+ // open submenu on click and close other open submenus
111123 toggle . addEventListener ( "click" , ( ) => {
112- const targetMenu = document . getElementById ( toggle . dataset . target ) ;
113- const isHidden = targetMenu . classList . contains ( "hidden" ) ;
114- closeAllMenus ( ) ;
115- if ( isHidden ) targetMenu . classList . remove ( "hidden" ) ;
124+ const clickedSubmenu = document . getElementById ( toggle . dataset . target ) ;
125+ const isHidden = clickedSubmenu . classList . contains ( "hidden" ) ;
126+ closeSubMenus ( ) ;
127+ if ( isHidden ) clickedSubmenu . classList . remove ( "hidden" ) ;
116128 } ) ;
117129 } ) ;
118130
@@ -124,12 +136,14 @@ const setupMenu = () => {
124136 event . target . closest ( ".nav" ) ;
125137 if ( isClickInsideNav ) return ;
126138
127- closeAllMenus ( ) ;
128- // hide mobile navigation
129- if ( window . innerWidth <= mobileMaxWidth ) nav . style . display = "none" ;
139+ closeSubMenus ( ) ;
140+ hideMobileMenu ( ) ;
130141 } ) ;
131142
132- window . addEventListener ( "resize" , closeAllMenus ) ;
143+ window . addEventListener ( "resize" , ( ) => {
144+ closeSubMenus ( ) ;
145+ hideMobileMenu ( ) ;
146+ } ) ;
133147} ;
134148
135149// setup menu after page is loaded
0 commit comments