OLD | NEW |
1 (function(){ | 1 (function(){ |
2 document.addEventListener("DOMContentLoaded", function() | 2 document.addEventListener("DOMContentLoaded", function() |
3 { | 3 { |
4 | 4 |
5 // Change html class name from "no-js" to "js" | 5 // Change html class name from "no-js" to "js" |
6 document.documentElement.className = "js"; | 6 document.documentElement.className = "js"; |
7 | 7 |
8 // Toggle Navbar Collapse | 8 // Toggle Navbar Collapse |
9 function toggleNavbarCollapse() | 9 function toggleNavbarCollapse() |
10 { | 10 { |
11 var navbarCollapseEls = this.parentElement.getElementsByClassName("navbar-
collapse"); | 11 var navbarCollapseEls = this.parentElement.getElementsByClassName("navbar-
collapse"); |
12 for (var i = 0; i < navbarCollapseEls.length; i++) | 12 for (var i = 0; i < navbarCollapseEls.length; i++) |
13 { | 13 { |
14 navbarCollapseEls[i] | 14 navbarCollapseEls[i] |
15 .classList.toggle("open") | 15 .classList.toggle("open") |
16 } | 16 } |
17 } | 17 } |
18 | 18 |
19 var toggleNavbarCollapseEls = document.getElementsByClassName("toggle-navbar
-collapse"); | 19 var toggleNavbarCollapseEls = document.getElementsByClassName("toggle-navbar
-collapse"); |
20 for (var i = 0; i < toggleNavbarCollapseEls.length; i++) | 20 for (var i = 0; i < toggleNavbarCollapseEls.length; i++) |
21 { | 21 { |
22 toggleNavbarCollapseEls[i] | 22 toggleNavbarCollapseEls[i] |
23 .addEventListener("click", toggleNavbarCollapse, false); | 23 .addEventListener("click", toggleNavbarCollapse, false); |
24 } | 24 } |
25 | 25 |
| 26 // Accordion menu |
| 27 |
| 28 function setupAccordionMenu(accordionEl) |
| 29 { |
| 30 var accordionButtons = accordionEl.getElementsByClassName('accordion-toggl
e-button'); |
| 31 |
| 32 for ( var i = 0; i < accordionButtons.length; i++ ) |
| 33 { |
| 34 accordionButtons[i] |
| 35 .addEventListener("click", toggleAccordionSection, false); |
| 36 accordionButtons[i] |
| 37 .addEventListener("keydown", navigateAccordionHeadings, false); |
| 38 |
| 39 // Close all sections besides the first |
| 40 if ( i !== 0 ) |
| 41 { |
| 42 accordionButtons[i].setAttribute("aria-expanded", "false"); |
| 43 accordionButtons[i].setAttribute("aria-disabled", "false"); |
| 44 document |
| 45 .getElementById( accordionButtons[i].getAttribute("aria-controls") ) |
| 46 .setAttribute("hidden", "true"); |
| 47 } |
| 48 } |
| 49 } |
| 50 |
| 51 function toggleAccordionSection() |
| 52 { |
| 53 // Hide currently expanded section |
| 54 var accordion = this.parentElement.parentElement; |
| 55 var expandedButton = accordion.querySelector("button[aria-expanded='true']
"); |
| 56 if ( expandedButton ) |
| 57 { |
| 58 expandedButton.setAttribute("aria-expanded", "false"); |
| 59 expandedButton.setAttribute("aria-disabled", "false"); |
| 60 document |
| 61 .getElementById( expandedButton.getAttribute("aria-controls") ) |
| 62 .setAttribute("hidden", "true"); |
| 63 } |
| 64 |
| 65 if ( expandedButton === this ) return; |
| 66 |
| 67 // Expand new section |
| 68 this.setAttribute("aria-expanded", "true"); |
| 69 this.setAttribute("aria-disabled", "true"); |
| 70 document |
| 71 .getElementById( this.getAttribute("aria-controls") ) |
| 72 .removeAttribute("hidden"); |
| 73 } |
| 74 |
| 75 function navigateAccordionHeadings(e) |
| 76 { |
| 77 if ( e.keyCode !== 38 && e.keyCode !== 40 ) return; |
| 78 |
| 79 var accordion = this.parentElement.parentElement; |
| 80 |
| 81 // Direction == up |
| 82 if ( e.keyCode == 38 ) |
| 83 { |
| 84 var prevEl = this.parentElement.previousElementSibling; |
| 85 if ( prevEl ) |
| 86 { |
| 87 prevEl // .accordion-body |
| 88 .previousElementSibling // .accordion-heading |
| 89 .firstElementChild // .accordion-toggle-button |
| 90 .focus(); |
| 91 } |
| 92 else |
| 93 { |
| 94 accordion |
| 95 .lastElementChild // .accordion-body |
| 96 .previousElementSibling // .accordion-heading |
| 97 .firstElementChild // .accordion-toggle-button |
| 98 .focus(); |
| 99 } |
| 100 } |
| 101 |
| 102 // Direction == down |
| 103 else if ( e.keyCode == 40 ) |
| 104 { |
| 105 var nextheading = this.parentElement.nextElementSibling.nextElementSibli
ng; |
| 106 if ( nextheading ) |
| 107 { |
| 108 nextheading // .accordion-heading |
| 109 .firstElementChild // .accordion-toggle-button |
| 110 .focus(); |
| 111 } |
| 112 else |
| 113 { |
| 114 accordion |
| 115 .firstElementChild // .accordion-heading |
| 116 .firstElementChild // .accordion-toggle-button |
| 117 .focus(); |
| 118 } |
| 119 } |
| 120 } |
| 121 |
| 122 var accordionMenus = document.getElementsByClassName('accordion'); |
| 123 for (var i = 0; i < accordionMenus.length; i++) |
| 124 { |
| 125 setupAccordionMenu( accordionMenus[i] ); |
| 126 } |
| 127 |
26 }, false); | 128 }, false); |
27 }()); | 129 }()); |
OLD | NEW |