|
1 | | -(function () { |
2 | | - function toggleDropdown(toggle: HTMLElement, open: boolean) { |
| 1 | +(function (): void { |
| 2 | + function toggleDropdown(toggle: HTMLElement, open: boolean): void { |
3 | 3 | const parentElement = toggle.parentNode as HTMLElement; |
4 | | - const dropdownElId = toggle.getAttribute("aria-controls") as string; |
| 4 | + const dropdownElId = toggle.getAttribute("aria-controls") as |
| 5 | + | string |
| 6 | + | undefined; |
5 | 7 |
|
6 | | - const dropdown = document.getElementById(dropdownElId) as HTMLElement; |
| 8 | + if (dropdownElId) { |
| 9 | + const dropdown = document.getElementById(dropdownElId) as |
| 10 | + | HTMLElement |
| 11 | + | undefined; |
7 | 12 |
|
8 | | - const openMenu = !open; |
| 13 | + const openMenu = !open; |
9 | 14 |
|
10 | | - dropdown.setAttribute("aria-hidden", openMenu.toString()); |
| 15 | + if (dropdown) { |
| 16 | + dropdown.setAttribute("aria-hidden", openMenu.toString()); |
11 | 17 |
|
12 | | - if (open) { |
13 | | - parentElement.classList.add("is-active"); |
14 | | - parentElement.classList.add("is-selected"); |
15 | | - } else { |
16 | | - parentElement.classList.remove("is-active"); |
17 | | - parentElement.classList.remove("is-selected"); |
| 18 | + if (open) { |
| 19 | + parentElement.classList.add("is-active"); |
| 20 | + parentElement.classList.add("is-selected"); |
| 21 | + } else { |
| 22 | + parentElement.classList.remove("is-active"); |
| 23 | + parentElement.classList.remove("is-selected"); |
| 24 | + } |
| 25 | + } |
18 | 26 | } |
19 | 27 | } |
20 | 28 |
|
21 | | - function closeAllDropdowns(toggles: Array<HTMLElement>) { |
| 29 | + function closeAllDropdowns(toggles: HTMLElement[]): void { |
22 | 30 | toggles.forEach(function (toggle) { |
23 | 31 | toggleDropdown(toggle, false); |
24 | 32 | }); |
25 | 33 | } |
26 | 34 |
|
27 | 35 | function handleClickOutside( |
28 | | - toggles: Array<HTMLElement>, |
| 36 | + toggles: HTMLElement[], |
29 | 37 | containerClass: string, |
30 | | - ) { |
| 38 | + ): void { |
31 | 39 | document.addEventListener("click", function (event) { |
32 | 40 | const target = event.target as HTMLElement; |
33 | 41 |
|
34 | | - if (target.closest) { |
35 | | - if (!target.closest(containerClass)) { |
36 | | - closeAllDropdowns(toggles); |
37 | | - } |
| 42 | + if (!target.closest(containerClass)) { |
| 43 | + closeAllDropdowns(toggles); |
38 | 44 | } |
39 | 45 | }); |
40 | 46 | } |
41 | 47 |
|
42 | | - function initNavDropdowns(containerClass: string) { |
| 48 | + function initNavDropdowns(containerClass: string): void { |
43 | 49 | const toggles = [].slice.call( |
44 | 50 | document.querySelectorAll(containerClass + " [aria-controls]"), |
45 | 51 | ); |
|
0 commit comments