@@ -5,70 +5,43 @@ const siteNav = document.getElementById('SiteNav');
55
66if ( siteNav ) {
77 const navToggler = document . getElementById ( 'NavToggler' ) ;
8+ const siteBody = document . getElementById ( 'SiteBody' ) ;
9+ const siteHeader = document . getElementById ( 'SiteHeader' ) ;
810 const allMenus = siteNav . querySelectorAll ( '[data-menu-list]' ) ;
11+ const navMenuTriggers = document . querySelectorAll ( '[data-menu-trigger]' ) ;
912
10- navToggler . addEventListener ( 'click' , ( ) => {
11- const siteBody = document . getElementById ( 'SiteBody' ) ;
12- const siteHeader = document . getElementById ( 'SiteHeader' ) ;
13-
14- console . log ( 'Toggling site navigation' ) ;
15- console . log ( siteNav . classList . contains ( 'hidden' ) ) ;
16-
17- if ( siteNav . classList . contains ( 'is-closed' ) ) {
18- siteNav . classList . replace ( 'is-closed' , 'is-open' ) ;
19- siteHeader . classList . replace ( 'is-closed' , 'is-open' ) ;
20- navToggler . classList . replace ( 'is-closed' , 'is-open' ) ;
21- } else {
22- siteNav . classList . replace ( 'is-open' , 'is-closed' ) ;
23- siteHeader . classList . replace ( 'is-open' , 'is-closed' ) ;
24- navToggler . classList . replace ( 'is-open' , 'is-closed' ) ;
25- }
13+ const closeAllMenus = ( ) => {
14+ allMenus . forEach ( menu => menu . classList . replace ( 'flex' , 'hidden' ) ) ;
15+ navMenuTriggers . forEach ( trigger => trigger . setAttribute ( 'aria-expanded' , 'false' ) ) ;
16+ } ;
2617
27- /*
28- Hide the main content and footer when the mobile menu is open.
29- This allows the menu to be scrollable and limits the DOM for screen readers.
30- */
18+ navToggler . addEventListener ( 'click' , ( ) => {
19+ const isOpen = siteNav . classList . contains ( 'is-open' ) ;
20+ [ siteNav , siteHeader , navToggler ] . forEach ( el => {
21+ el . classList . toggle ( 'is-open' , ! isOpen ) ;
22+ el . classList . toggle ( 'is-closed' , isOpen ) ;
23+ } ) ;
3124 siteBody . classList . toggle ( 'mobile-nav-open' ) ;
3225 } ) ;
3326
34- const navMenuTriggers = document . querySelectorAll ( '[data-menu-trigger]' ) ;
35-
3627 navMenuTriggers . forEach ( trigger => {
3728 trigger . addEventListener ( 'click' , ( evt ) => {
3829 evt . preventDefault ( ) ;
3930 const target = trigger . nextElementSibling ;
31+ const willOpen = target . classList . contains ( 'hidden' ) ;
4032
41- navMenuTriggers . forEach ( ( trigger ) => {
42- trigger . setAttribute ( 'aria-expanded' , 'false' ) ;
43- } ) ;
33+ closeAllMenus ( ) ;
4434
45- allMenus . forEach ( ( menu ) => {
46- if ( menu !== target ) {
47- menu . classList . replace ( 'flex' , 'hidden' ) ;
48- }
49- } ) ;
50-
51- if ( target . classList . contains ( 'hidden' ) ) {
35+ if ( willOpen ) {
5236 target . classList . replace ( 'hidden' , 'flex' ) ;
5337 trigger . setAttribute ( 'aria-expanded' , 'true' ) ;
54- } else {
55- target . classList . replace ( 'flex' , 'hidden' ) ;
56- trigger . setAttribute ( 'aria-expanded' , 'false' ) ;
5738 }
5839 } ) ;
5940 } ) ;
6041
61- // Close all menus when the user clicks outside
62- document . addEventListener ( 'click' , function ( evt ) {
63- if ( ! siteNav . contains ( evt . target ) && navToggler !== evt . target ) {
64- // Close all menus if you click outside of menu
65- allMenus . forEach ( ( menu ) => {
66- menu . classList . replace ( 'flex' , 'hidden' ) ;
67- } ) ;
68-
69- navMenuTriggers . forEach ( ( trigger ) => {
70- trigger . setAttribute ( 'aria-expanded' , 'false' ) ;
71- } ) ;
42+ document . addEventListener ( 'click' , ( evt ) => {
43+ if ( ! siteNav . contains ( evt . target ) && evt . target !== navToggler ) {
44+ closeAllMenus ( ) ;
7245 }
7346 } ) ;
7447}
0 commit comments