1( function() { 2 var maiMenuData = typeof maiMenuVars === 'undefined' ? {} : maiMenuVars; 3 var body = document.getElementsByTagName( 'body' )[ 0 ]; 4 var siteHeaderWrap = document.querySelector( '.site-header-wrap' ); 5 var navHeaderLeft = document.getElementsByClassName( 'nav-header-left' )[ 0 ]; 6 var navHeaderRight = document.getElementsByClassName( 'nav-header-right' )[ 0 ]; 7 var navAfterHeader = document.getElementsByClassName( 'nav-after-header' )[ 0 ]; 8 var navMenus = [ navHeaderLeft, navHeaderRight, navAfterHeader ]; 9 var mobileMenu = document.querySelector( '.mobile-menu' ); 10 var mobileMenuWrap = document.querySelector( '.mobile-menu .wrap' ); 11 var mobileMenuList = document.querySelector( '.mobile-menu .menu' ); 12 var mobileMenuWidget = document.querySelector( '.mobile-menu .widget' ); 13 var menuToggle = document.getElementsByClassName( 'menu-toggle' )[ 0 ]; 14 15 if ( ! siteHeaderWrap ) { 16 return; 17 } 18 19 var createMobileMenu = function() { 20 if ( mobileMenu ) { 21 return; 22 } 23 24 mobileMenu = document.createElement( 'div' ); 25 mobileMenu.setAttribute( 'class', 'mobile-menu' ); 26 mobileMenu.setAttribute( 'aria-label', maiMenuData.ariaLabel ); 27 28 if ( ! maiMenuData.disableMicroData ) { 29 mobileMenu.setAttribute( 'itemscope', '' ); 30 mobileMenu.setAttribute( 'itemtype', 'https://schema.org/SiteNavigationElement' ); 31 } 32 33 if ( ! mobileMenuWrap ) { 34 mobileMenuWrap = document.createElement( 'div' ); 35 mobileMenuWrap.setAttribute( 'class', 'wrap' ); 36 mobileMenu.appendChild( mobileMenuWrap ); 37 } 38 39 if ( ! mobileMenuList ) { 40 mobileMenuList = document.createElement( 'ul' ); 41 mobileMenuList.setAttribute( 'class', 'menu' ); 42 mobileMenuWrap.appendChild( mobileMenuList ); 43 } 44 45 siteHeaderWrap.parentNode.insertBefore( mobileMenu, null ); 46 }; 47 48 var cloneMenuItems = function() { 49 if ( mobileMenu.classList.contains( 'template-part' ) ) { 50 return; 51 } 52 53 if ( mobileMenuWidget ) { 54 return; 55 } 56 57 navMenus.forEach( function( navMenu ) { 58 if ( ! navMenu ) { 59 return; 60 } 61 62 var menu = navMenu.querySelector( '.menu' ); 63 if ( ! menu ) { 64 return; 65 } 66 67 var navMenuClone = menu.cloneNode( true ); 68 navMenuClone.setAttribute( 'id', navMenu.getAttribute( 'id' ) + '-clone' ); 69 70 Array.from( navMenuClone.children ).forEach( function( menuItem ) { 71 var lastClasses = menuItem.getAttribute( 'class' ); 72 73 if ( ! lastClasses ) { 74 return; 75 } 76 77 var lastClass = lastClasses.split( ' ' ).pop(); 78 79 menuItem.setAttribute( 'id', lastClass ); 80 81 if ( mobileMenuList && null === mobileMenuList.querySelector( '#' + lastClass ) && ! menuItem.classList.contains( 'search' ) ) { 82 menuItem.removeAttribute( 'id' ); 83 mobileMenuList.appendChild( menuItem ); 84 } 85 } ); 86 } ); 87 }; 88 89 var addMenuItemClasses = function() { 90 var menuItems = document.querySelectorAll( '.mobile-menu .menu-item' ); 91 menuItems.forEach( function( menuItem ) { 92 menuItem.classList.add( 'mobile-menu-item' ); 93 } ); 94 }; 95 96 var createSubMenuToggles = function() { 97 var subMenus = document.querySelectorAll( '.mobile-menu .sub-menu' ); 98 subMenus.forEach( function( subMenu ) { 99 var subMenuToggle = document.createElement( 'button' ); 100 var toggleText = maiMenuData.subMenuToggle; 101 var parentItem = subMenu.closest( '.menu-item' ); 102 103 if ( parentItem ) { 104 var toggleTextName = parentItem.querySelector( 'span[itemprop="name"]' ); 105 toggleTextName = toggleTextName ? toggleTextName.innerText.trim() : ''; 106 107 if ( toggleTextName ) { 108 toggleText = toggleTextName + ' ' + toggleText; 109 } 110 } 111 112 subMenuToggle.setAttribute( 'class', 'sub-menu-toggle' ); 113 subMenuToggle.setAttribute( 'aria-expanded', 'false' ); 114 subMenuToggle.setAttribute( 'aria-pressed', 'false' ); 115 subMenuToggle.innerHTML = '<span class="sub-menu-toggle-icon"></span><span class="screen-reader-text">' + toggleText + '</span>'; 116 subMenu.parentNode.insertBefore( subMenuToggle, subMenu ); 117 } ); 118 }; 119 120 var toggleMobileMenu = function( event ) { 121 if ( ! menuToggle ) { 122 return; 123 } 124 125 maiToggleAriaValues( menuToggle ); 126 127 body.classList.toggle( 'mobile-menu-visible' ); 128 129 if ( body.classList.contains( 'mobile-menu-visible' ) ) { 130 body.addEventListener( 'keydown', maybeCloseMobileMenu, false ); 131 body.addEventListener( 'click', maybeCloseMobileMenu, false ); 132 } else { 133 body.removeEventListener( 'keydown', maybeCloseMobileMenu, false ); 134 body.removeEventListener( 'click', maybeCloseMobileMenu, false ); 135 } 136 }; 137 138 var maybeCloseMobileMenu = function( event ) { 139 if ( ! event.target.closest( '.menu-toggle, .mobile-menu' ) || [ 'Escape', 'Esc' ].includes( event.key ) ) { 140 toggleMobileMenu( event ); 141 } 142 }; 143 144 var toggleSubMenu = function( event ) { 145 var subMenuToggle = event.target.classList.contains( 'sub-menu
145-toggle' ) ? event.target : event.target.parentNode; 146 subMenuToggle = subMenuToggle.classList.contains( 'menu-item' ) ? subMenuToggle.getElementsByClassName( 'sub-menu-toggle' )[ 0 ] : subMenuToggle; 147 var subMenu = subMenuToggle.nextSibling; 148 149 maiToggleAriaValues( subMenuToggle ); 150 151 subMenuToggle.classList.toggle( 'active' ); 152 subMenu.classList.toggle( 'visible' ); 153 }; 154 155 var onReady = function() { 156 createMobileMenu(); 157 cloneMenuItems(); 158 addMenuItemClasses(); 159 createSubMenuToggles(); 160 161 if ( menuToggle ) { 162 menuToggle.addEventListener( 'click', toggleMobileMenu, false ); 163 } 164 165 document.addEventListener( 'click', function( event ) { 166 if ( event.target.classList.contains( 'sub-menu-toggle' ) || event.target.classList.contains( 'sub-menu-toggle-icon' ) ) { 167 toggleSubMenu( event ); 168 } 169 }, false ); 170 }; 171 172 return onReady(); 173} )();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.