11// Site navigation CSS classes
2- const siteLinksWrapper = document . querySelector ( "[data-nav-wrapper]" ) ;
3- const wideNavMinWidth = window . matchMedia ( "(min-width: 1160px)" ) ;
4- handleNavDisplayStyles ( wideNavMinWidth ) ;
5- wideNavMinWidth . addEventListener ( "change" , handleNavDisplayStyles ) ;
6-
7- const siteNavToggle = document . getElementById ( "siteNavToggle" ) ;
8- const menuIcon = document . getElementById ( "menuIcon" ) ;
9-
10- if ( document . contains ( siteNavToggle ) ) {
11- siteNavToggle . addEventListener ( "click" , handleMobileNavToggle , false ) ;
12- }
13-
14- function handleMobileNavToggle ( event ) {
15- siteLinksWrapper . classList . toggle ( "offscreen" ) ;
16- if ( siteLinksWrapper . getAttribute ( "class" ) . includes ( "offscreen" ) ) {
17- menuIcon . classList . remove ( "open" ) ;
18- } else {
19- menuIcon . classList . add ( "open" ) ;
20- }
2+ function flashPrevention ( element ) {
3+ element . setAttribute ( "style" , "display:none" ) ;
4+ setTimeout ( ( ) => {
5+ element . removeAttribute ( "style" ) ;
6+ } , 10 ) ;
217}
228
239function handleNavDisplayStyles ( event ) {
10+ const siteLinksWrapper = document . querySelector ( "[data-nav-wrapper]" ) ;
2411 if ( event . matches ) {
2512 siteLinksWrapper . classList . remove ( "offscreen" ) ;
2613 } else {
@@ -31,26 +18,60 @@ function handleNavDisplayStyles(event) {
3118 }
3219}
3320
34- function flashPrevention ( element ) {
35- element . setAttribute ( "style" , "display:none" ) ;
36- setTimeout ( ( ) => {
37- element . removeAttribute ( "style" ) ;
38- } , 10 ) ;
21+ function handleMobileNavToggle ( ) {
22+ const siteLinksWrapper = document . querySelector ( "[data-nav-wrapper]" ) ;
23+ const menuIcon = document . getElementById ( "menuIcon" ) ;
24+ siteLinksWrapper . classList . toggle ( "offscreen" ) ;
25+ if ( siteLinksWrapper . getAttribute ( "class" ) . includes ( "offscreen" ) ) {
26+ menuIcon . classList . remove ( "open" ) ;
27+ } else {
28+ menuIcon . classList . add ( "open" ) ;
29+ }
30+ }
31+
32+ const wideNavMinWidth = window . matchMedia ( "(min-width: 1160px)" ) ;
33+ handleNavDisplayStyles ( wideNavMinWidth ) ;
34+ wideNavMinWidth . addEventListener ( "change" , handleNavDisplayStyles ) ;
35+
36+ const siteNavToggle = document . getElementById ( "siteNavToggle" ) ;
37+
38+ if ( document . contains ( siteNavToggle ) ) {
39+ siteNavToggle . addEventListener ( "click" , handleMobileNavToggle , false ) ;
3940}
4041
4142// Site sub-navigation toggle
43+ function resetSubMenus ( subLinks ) {
44+ subLinks . forEach ( ( subLink ) => {
45+ subLink . setAttribute ( "aria-expanded" , "false" ) ;
46+ } ) ;
47+ }
48+
49+ function isClickOutside ( event , nodeList ) {
50+ let clickedInsideTarget = false ;
51+ Array . from ( nodeList ) . forEach ( ( element ) => {
52+ if ( element . contains ( event . target ) ) {
53+ clickedInsideTarget = true ;
54+ }
55+ } ) ;
56+ return ! clickedInsideTarget ;
57+ }
58+
4259const siteNav = document . querySelector ( ".site-nav__links" ) ;
4360
4461if ( document . contains ( siteNav ) ) {
4562 const subLinks = document . querySelectorAll ( ".has-submenu > a" ) ;
4663
4764 subLinks . forEach ( ( subLink ) => {
4865 subLink . setAttribute ( "aria-expanded" , false ) ;
49- subLink . addEventListener ( "click" , function ( event ) {
66+ subLink . addEventListener ( "click" , function handleSubLinkClick ( event ) {
5067 const clickedSubLink = event . target ;
51- umami . track ( clickedSubLink . dataset . linkLabel ) ;
68+ // eslint-disable-next-line no-undef
69+ if ( typeof umami !== "undefined" && umami . track ) {
70+ // eslint-disable-next-line no-undef
71+ umami . track ( clickedSubLink . dataset . linkLabel ) ;
72+ }
5273 const allSubLinks = Array . from ( subLinks ) ;
53- const notClickedLinks = allSubLinks . filter ( function ( otherLink ) {
74+ const notClickedLinks = allSubLinks . filter ( ( otherLink ) => {
5475 return otherLink !== clickedSubLink ;
5576 } ) ;
5677 notClickedLinks . forEach ( ( link ) => {
@@ -66,42 +87,25 @@ if (document.contains(siteNav)) {
6687 } ) ;
6788 } ) ;
6889
69- siteNav . addEventListener ( "keydown" , function ( event ) {
90+ siteNav . addEventListener ( "keydown" , function handleKeydown ( event ) {
7091 if ( event . key === "Escape" ) {
71- resetSubMenus ( ) ;
92+ resetSubMenus ( subLinks ) ;
7293 }
7394 } ) ;
7495
75- document . addEventListener ( "click" , function ( event ) {
96+ document . addEventListener ( "click" , function handleDocumentClick ( event ) {
7697 if ( isClickOutside ( event , subLinks ) ) {
77- resetSubMenus ( ) ;
98+ resetSubMenus ( subLinks ) ;
7899 }
79100 } ) ;
80-
81- function resetSubMenus ( ) {
82- subLinks . forEach ( ( subLink ) => {
83- subLink . setAttribute ( "aria-expanded" , "false" ) ;
84- } ) ;
85- }
86- }
87-
88- function isClickOutside ( event , nodeList ) {
89- let clickedInsideTarget = false ;
90- Array . from ( nodeList ) . forEach ( function ( element ) {
91- if ( element . contains ( event . target ) ) {
92- clickedInsideTarget = true ;
93- }
94- } ) ;
95- return ! clickedInsideTarget ;
96101}
97102
98103// Hero video controls
99104const videoToggle = document . getElementById ( "hero__video-toggle" ) ;
100105
101106if ( document . contains ( videoToggle ) ) {
102107 const heroVideo = document . querySelector ( ".hero video" ) ;
103- videoToggle . addEventListener ( "click" , function ( ) {
104- console . log ( this . className ) ;
108+ videoToggle . addEventListener ( "click" , function handleVideoToggle ( ) {
105109 if ( videoToggle . className === "is-playing" ) {
106110 heroVideo . pause ( ) ;
107111 this . classList . toggle ( "is-playing" ) ;
@@ -120,7 +124,7 @@ if (document.contains(faq)) {
120124 buttons . forEach ( ( button ) => {
121125 button . setAttribute ( "aria-expanded" , false ) ;
122126
123- button . addEventListener ( "click" , function ( ) {
127+ button . addEventListener ( "click" , function handleFaqToggle ( ) {
124128 if ( this . getAttribute ( "aria-expanded" ) === "true" ) {
125129 this . setAttribute ( "aria-expanded" , "false" ) ;
126130 } else {
0 commit comments