@@ -65,15 +65,35 @@ for (const el of itemsMenu) {
65
65
}
66
66
67
67
// Mobile Menu and Language Picker
68
-
68
+ const langBtn = document . getElementById ( "langBtn" ) ;
69
+ const langList = document . getElementById ( "langList" ) ;
69
70
const 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" ) ;
72
71
const menu = document . querySelector ( "#navmenu" ) ;
73
72
const overlay = document . querySelector ( "#overlay" ) ;
74
73
const navButton = document . querySelector ( "#nav-button" ) ;
75
- const languagePickerButton = document . querySelector ( "#language-picker-button" ) ;
76
74
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
+ } ) ;
77
97
78
98
for ( const el of linkItemsMenu ) {
79
99
el . addEventListener ( "click" , ( e ) => {
@@ -85,56 +105,23 @@ for (const el of linkItemsMenu) {
85
105
e . preventDefault ( ) ;
86
106
}
87
107
} ) ;
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
- } ) ;
103
108
}
104
109
105
110
navButton ?. 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" ) ;
127
114
} ) ;
128
115
129
116
overlay ?. addEventListener ( "click" , ( ) => {
130
117
if ( menu ?. classList . contains ( "opens" ) ) {
131
118
menu . classList . remove ( "opens" ) ;
132
119
}
133
- if ( languagePickerMenu ?. classList . contains ( "opens" ) ) {
134
- languagePickerMenu . classList . remove ( "opens" ) ;
135
- }
136
120
overlay . classList . remove ( "blurs" ) ;
137
121
document . body . classList . remove ( "no-scroll" ) ;
122
+ // TODO : write helper function
123
+ const isOpen = langList . classList . toggle ( "open" ) ;
124
+ langBtn . setAttribute ( "aria-expanded" , isOpen ) ;
138
125
} ) ;
139
126
140
127
document
0 commit comments