|
5 | 5 | return; |
6 | 6 | } |
7 | 7 | elem.classList.add(animation); |
8 | | - elem.addEventListener("animationend", function endAnimation() { |
9 | | - elem.classList.remove(animation); |
10 | | - if (hide) { |
11 | | - elem.classList.remove(hide); |
12 | | - } |
13 | | - elem.removeEventListener("animationend", endAnimation, false); |
14 | | - }, false); |
| 8 | + elem.addEventListener( |
| 9 | + "animationend", |
| 10 | + function endAnimation() { |
| 11 | + elem.classList.remove(animation); |
| 12 | + if (hide) { |
| 13 | + elem.classList.remove(hide); |
| 14 | + } |
| 15 | + elem.removeEventListener("animationend", endAnimation, false); |
| 16 | + }, |
| 17 | + false |
| 18 | + ); |
15 | 19 | } |
16 | 20 | function updateAria(el, aria) { |
17 | | - if (typeof el === "undefined" || 0 >= aria.length) { |
| 21 | + if ("undefined" === typeof el || 0 >= aria.length) { |
18 | 22 | return; |
19 | 23 | } |
20 | | - const hiddenEl = el.getAttribute(`aria-${aria}`) === "true" ? "false" : "true"; |
| 24 | + const hiddenEl = "true" === el.getAttribute(`aria-${aria}`) ? "false" : "true"; |
21 | 25 | el.setAttribute(`aria-${aria}`, hiddenEl); |
22 | 26 | } |
23 | 27 | var TAB_KEY = 9; |
|
51 | 55 | this._handleCloseNav = this.handleCloseNav.bind(this); |
52 | 56 | this._handleCloseSubNav = this.handleCloseSubNav.bind(this); |
53 | 57 | this._closeAllSubMenus = this.closeAllSubMenus.bind(this); |
| 58 | + this._closeAllSubSubMenus = this.closeAllSubSubMenus.bind(this); |
54 | 59 | this._setSubMenu = this.setSubMenu.bind(this); |
55 | 60 | this._closeAllSubMenuToggles = this.closeAllSubMenuToggles.bind(this); |
| 61 | + this._closeAllSubSubMenuToggles = this.closeAllSubSubMenuToggles.bind(this); |
56 | 62 | this._handleDocClick = this.handleDocClick.bind(this); |
57 | 63 | this._handleFocus = this.handleFocus.bind(this); |
58 | 64 | const settings = { ...defaults, ...options }; |
|
61 | 67 | this.settings = settings; |
62 | 68 | this.navOpened = false; |
63 | 69 | this.$subNavs = this.$element.querySelectorAll(this.settings.subNavAnchors); |
64 | | - this.$subSubNavs = this.$element.querySelectorAll(this.settings.subSubNavAnchors); |
| 70 | + this.$subSubNavs = this.$element.querySelectorAll( |
| 71 | + this.settings.subSubNavAnchors |
| 72 | + ); |
65 | 73 | this.create(); |
66 | 74 | } |
67 | 75 | Navigation.prototype.create = function() { |
68 | 76 | this.$toggle.setAttribute("aria-expanded", "false"); |
69 | 77 | this.$element.setAttribute("data-meom-nav", "navigation"); |
70 | | - this.$subNavs.forEach(function(subNav, index) { |
| 78 | + this.$subNavs.forEach(function(subNav) { |
71 | 79 | if (this.settings.action === "click") { |
72 | 80 | subNav.setAttribute("hidden", ""); |
73 | 81 | } |
|
138 | 146 | Navigation.prototype.handleSubNav = function(event) { |
139 | 147 | const target = event.target; |
140 | 148 | const closestSubButton = target.closest('[data-meom-nav="sub-toggle"]'); |
141 | | - const closestSubSubButton = target.closest('[data-meom-nav="sub-sub-toggle"]'); |
| 149 | + const closestSubSubButton = target.closest( |
| 150 | + '[data-meom-nav="sub-sub-toggle"]' |
| 151 | + ); |
142 | 152 | if (!closestSubButton && !closestSubSubButton) { |
143 | 153 | return this; |
144 | 154 | } |
145 | | - if (!target.nextElementSibling.classList.contains(this.settings.toggleSubNavClassValue) && !target.matches('[data-meom-nav="sub-sub-toggle"]')) { |
| 155 | + if (!target.nextElementSibling.classList.contains( |
| 156 | + this.settings.toggleSubNavClassValue |
| 157 | + ) && !target.matches('[data-meom-nav="sub-sub-toggle"]')) { |
146 | 158 | this._closeAllSubMenus(); |
147 | 159 | this._closeAllSubMenuToggles(); |
148 | 160 | } |
| 161 | + if (!target.nextElementSibling.classList.contains( |
| 162 | + this.settings.toggleSubNavClassValue |
| 163 | + ) && target.matches('[data-meom-nav="sub-sub-toggle"]')) { |
| 164 | + this._closeAllSubSubMenus(); |
| 165 | + this._closeAllSubSubMenuToggles(); |
| 166 | + } |
149 | 167 | updateAria(target, "expanded"); |
150 | 168 | if (target.nextElementSibling) { |
151 | 169 | this._setSubMenu(target.nextElementSibling, event); |
|
159 | 177 | return this; |
160 | 178 | }; |
161 | 179 | Navigation.prototype.handleCloseSubNav = function(event) { |
162 | | - const openSubMenu = document.querySelector(`${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}`); |
| 180 | + const openSubMenu = document.querySelector( |
| 181 | + `${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}` |
| 182 | + ); |
163 | 183 | if (openSubMenu) { |
164 | 184 | const focusableElements = openSubMenu.querySelectorAll([ |
165 | 185 | "a[href]", |
|
181 | 201 | } |
182 | 202 | } |
183 | 203 | if (ESCAPE_KEY === event.keyCode) { |
184 | | - if (event.target.matches('[data-meom-nav="sub-toggle"][aria-expanded="true"]')) { |
| 204 | + if (event.target.matches( |
| 205 | + '[data-meom-nav="sub-toggle"][aria-expanded="true"]' |
| 206 | + )) { |
185 | 207 | this._handleSubNav(event); |
186 | 208 | this._closeAllSubMenus(); |
187 | 209 | this._closeAllSubMenuToggles(); |
188 | 210 | return this; |
189 | 211 | } |
190 | | - const parentSubMenu = event.target.closest(`${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}`); |
| 212 | + const parentSubMenu = event.target.closest( |
| 213 | + `${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}` |
| 214 | + ); |
191 | 215 | if (parentSubMenu) { |
192 | 216 | const subMenuToggle = parentSubMenu.previousElementSibling; |
193 | 217 | if (subMenuToggle) { |
|
230 | 254 | return this; |
231 | 255 | }; |
232 | 256 | Navigation.prototype.closeAllSubMenus = function() { |
233 | | - const openSubMenus = document.querySelectorAll(`${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}`); |
| 257 | + const openSubMenus = document.querySelectorAll( |
| 258 | + `${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}` |
| 259 | + ); |
234 | 260 | openSubMenus.forEach(function(openSubMenu) { |
235 | 261 | this._setSubMenu(openSubMenu); |
236 | 262 | }, this); |
237 | 263 | return this; |
238 | 264 | }; |
| 265 | + Navigation.prototype.closeAllSubSubMenus = function() { |
| 266 | + const openSubSubMenus = document.querySelectorAll( |
| 267 | + `${this.settings.subNavClass} ${this.settings.subNavClass}.${this.settings.toggleSubNavClassValue}` |
| 268 | + ); |
| 269 | + openSubSubMenus.forEach(function(openSubSubMenu) { |
| 270 | + this._setSubMenu(openSubSubMenu); |
| 271 | + }, this); |
| 272 | + return this; |
| 273 | + }; |
239 | 274 | Navigation.prototype.setSubMenu = function(submenu, event) { |
240 | 275 | if (!submenu) { |
241 | 276 | return this; |
|
246 | 281 | animate(submenu, this.settings.animateSubNavClass); |
247 | 282 | } |
248 | 283 | if (this.settings.onOpenSubNav && typeof this.settings.onOpenSubNav === "function") { |
249 | | - this.settings.onOpenSubNav(this.$element, this.$toggle, submenu, event); |
| 284 | + this.settings.onOpenSubNav( |
| 285 | + this.$element, |
| 286 | + this.$toggle, |
| 287 | + submenu, |
| 288 | + event |
| 289 | + ); |
250 | 290 | } |
251 | 291 | } else { |
252 | 292 | submenu.classList.remove(this.settings.toggleSubNavClassValue); |
253 | 293 | if (this.settings.onCloseSubNav && typeof this.settings.onCloseSubNav === "function") { |
254 | | - this.settings.onCloseSubNav(this.$element, this.$toggle, submenu, event); |
| 294 | + this.settings.onCloseSubNav( |
| 295 | + this.$element, |
| 296 | + this.$toggle, |
| 297 | + submenu, |
| 298 | + event |
| 299 | + ); |
255 | 300 | } |
256 | 301 | } |
257 | 302 | return this; |
258 | 303 | }; |
259 | 304 | Navigation.prototype.closeAllSubMenuToggles = function() { |
260 | | - const openSubMenuToggles = document.querySelectorAll('[data-meom-nav="sub-toggle"][aria-expanded="true"]'); |
| 305 | + const openSubMenuToggles = document.querySelectorAll( |
| 306 | + '[data-meom-nav="sub-toggle"][aria-expanded="true"]' |
| 307 | + ); |
261 | 308 | openSubMenuToggles.forEach(function(openSubMenuToggle) { |
262 | 309 | updateAria(openSubMenuToggle, "expanded"); |
263 | 310 | }); |
264 | | - const openSubSubMenuToggles = document.querySelectorAll('[data-meom-nav="sub-sub-toggle"][aria-expanded="true"]'); |
| 311 | + const openSubSubMenuToggles = document.querySelectorAll( |
| 312 | + '[data-meom-nav="sub-sub-toggle"][aria-expanded="true"]' |
| 313 | + ); |
| 314 | + openSubSubMenuToggles.forEach(function(openSubSubMenuToggle) { |
| 315 | + updateAria(openSubSubMenuToggle, "expanded"); |
| 316 | + }); |
| 317 | + return this; |
| 318 | + }; |
| 319 | + Navigation.prototype.closeAllSubSubMenuToggles = function() { |
| 320 | + const openSubSubMenuToggles = document.querySelectorAll( |
| 321 | + '[data-meom-nav="sub-sub-toggle"][aria-expanded="true"]' |
| 322 | + ); |
265 | 323 | openSubSubMenuToggles.forEach(function(openSubSubMenuToggle) { |
266 | 324 | updateAria(openSubSubMenuToggle, "expanded"); |
267 | 325 | }); |
|
0 commit comments