@@ -65,15 +65,35 @@ for (const el of itemsMenu) {
6565}
6666
6767// Mobile Menu and Language Picker
68-
68+ const langBtn = document . getElementById ( "langBtn" ) ;
69+ const langList = document . getElementById ( "langList" ) ;
6970const linkItemsMenu = document . querySelectorAll ( ".submenu > a" ) ;
70- const languageItems = document . querySelectorAll ( "#language-picker-menu > #navbar > #navmenu > .submenu > a" ) ;
71- const languagePickerMenu = document . querySelector ( "#language-picker-menu > #navbar > #navmenu" ) ;
7271const menu = document . querySelector ( "#navmenu" ) ;
7372const overlay = document . querySelector ( "#overlay" ) ;
7473const navButton = document . querySelector ( "#nav-button" ) ;
75- const languagePickerButton = document . querySelector ( "#language-picker-button" ) ;
7674
75+ function closeLangList ( ) {
76+ langList . classList . remove ( "open" ) ;
77+ langBtn . setAttribute ( "aria-expanded" , false ) ;
78+ }
79+
80+ function toggleLangList ( ) {
81+ const isOpen = langList . classList . toggle ( "open" ) ;
82+ langBtn . setAttribute ( "aria-expanded" , isOpen ) ;
83+ }
84+
85+ // toggle on button click
86+ langBtn . addEventListener ( "click" , ( e ) => {
87+ e . stopPropagation ( ) ;
88+ toggleLangList ( ) ;
89+ } ) ;
90+
91+ // close on outside click except for lang btn
92+ document . body . addEventListener ( "click" , ( e ) => {
93+ if ( ! langList . contains ( e . target ) ) {
94+ closeLangList ( ) ;
95+ }
96+ } ) ;
7797
7898for ( const el of linkItemsMenu ) {
7999 el . addEventListener ( "click" , ( e ) => {
@@ -85,56 +105,23 @@ for (const el of linkItemsMenu) {
85105 e . preventDefault ( ) ;
86106 }
87107 } ) ;
88-
89- }
90-
91- for ( const el of languageItems ) {
92- el . addEventListener ( "click" , ( e ) => {
93- const href = el . getAttribute ( "href" ) ;
94-
95- if ( href && href !== "#" ) {
96- languagePickerMenu ?. classList . remove ( "opens" ) ;
97- overlay ?. classList . remove ( "blurs" ) ;
98- document . body . classList . remove ( "no-scroll" ) ;
99-
100- window . location . href = href ;
101- }
102- } ) ;
103108}
104109
105110navButton ?. addEventListener ( "click" , ( ) => {
106- const isLanguageMenuOpen = languagePickerMenu ?. classList . contains ( "opens" ) ;
107- if ( isLanguageMenuOpen ) {
108- languagePickerMenu ?. classList . remove ( "opens" ) ;
109- menu ?. classList . toggle ( "opens" ) ;
110- } else {
111- menu ?. classList . toggle ( "opens" ) ;
112- overlay ?. classList . toggle ( "blurs" ) ;
113- document . body . classList . toggle ( "no-scroll" ) ;
114- }
115- } ) ;
116-
117- languagePickerButton ?. addEventListener ( "click" , ( ) => {
118- const isMenuOpen = menu ?. classList . contains ( "opens" ) ;
119- if ( isMenuOpen ) {
120- menu ?. classList . remove ( "opens" ) ;
121- languagePickerMenu ?. classList . toggle ( "opens" ) ;
122- } else {
123- languagePickerMenu ?. classList . toggle ( "opens" ) ;
124- overlay ?. classList . toggle ( "blurs" ) ;
125- document . body . classList . toggle ( "no-scroll" ) ;
126- }
111+ menu ?. classList . toggle ( "opens" ) ;
112+ overlay ?. classList . toggle ( "blurs" ) ;
113+ document . body . classList . toggle ( "no-scroll" ) ;
127114} ) ;
128115
129116overlay ?. addEventListener ( "click" , ( ) => {
130117 if ( menu ?. classList . contains ( "opens" ) ) {
131118 menu . classList . remove ( "opens" ) ;
132119 }
133- if ( languagePickerMenu ?. classList . contains ( "opens" ) ) {
134- languagePickerMenu . classList . remove ( "opens" ) ;
135- }
136120 overlay . classList . remove ( "blurs" ) ;
137121 document . body . classList . remove ( "no-scroll" ) ;
122+ // TODO : write helper function
123+ const isOpen = langList . classList . toggle ( "open" ) ;
124+ langBtn . setAttribute ( "aria-expanded" , isOpen ) ;
138125} ) ;
139126
140127document
0 commit comments