1(function () { 2 'use strict'; 3 4 function init() { 5 var menu = document.getElementById('thn-mobile-menu'); 6 var overlay = document.getElementById('thn-mobile-menu-overlay'); 7 var closeButton = document.querySelector('.thn-mobile-menu-close'); 8 9 if (!menu || !overlay || !closeButton) { 10 return; 11 } 12 13 var openSelectors = [ 14 '#td-header-menu-button', 15 '.td-mobile-menu-button', 16 '.tdb-mobile-menu-button', 17 '.td-header-menu-button', 18 '.tdb-mobile-menu', 19 '.td-mobile-menu-icon', 20 '.td-icon-menu-up', 21 '.td-icon-menu-down', 22 '[data-td-block-uid] .tdb-mobile-menu-button' 23 ].join(','); 24 25 var lastFocused = null; 26 27 function openMenu(trigger) { 28 lastFocused = trigger || document.activeElement; 29 overlay.hidden = false; 30 window.requestAnimationFrame(function () { 31 overlay.classList.add('is-visible'); 32 menu.classList.add('is-open'); 33 }); 34 menu.setAttribute('aria-hidden', 'false'); 35 document.body.classList.add('thn-mobile-menu-open'); 36 closeButton.focus({ preventScroll: true }); 37 } 38 39 function closeMenu() { 40 menu.classList.remove('is-open'); 41 overlay.classList.remove('is-visible'); 42 menu.setAttribute('aria-hidden', 'true'); 43 document.body.classList.remove('thn-mobile-menu-open'); 44 45 window.setTimeout(function () { 46 overlay.hidden = true; 47 }, 230); 48 49 if (lastFocused && typeof lastFocused.focus === 'function') { 50 lastFocused.focus({ preventScroll: true }); 51 } 52 } 53 54 function toggleItem(item) { 55 if (!item) { 56 return; 57 } 58 59 var expanded = item.classList.toggle('is-expanded'); 60 var directToggle = item.querySelector(':scope > .thn-mobile-submenu-toggle'); 61 62 if (directToggle) { 63 directToggle.setAttribute('aria-expanded', expanded ? 'true' : 'false'); 64 } 65 } 66 67 document.addEventListener('click', function (event) { 68 if (window.innerWidth > 767) { 69 return; 70 } 71 72 var openButton = event.target.closest(openSelectors); 73 if (openButton && !openButton.closest('#thn-mobile-menu')) { 74 event.preventDefault(); 75 event.stopPropagation(); 76 if (typeof event.stopImmediatePropagation === 'function') { 77 event.stopImmediatePropagation(); 78 } 79 openMenu(openButton); 80 return; 81 } 82 83 var submenuToggle = event.target.closest('.thn-mobile-submenu-toggle'); 84 if (submenuToggle) { 85 event.preventDefault(); 86 toggleItem(submenuToggle.closest('.thn-mobile-menu-item')); 87 return; 88 } 89 90 var parentToggle = event.target.closest('.thn-mobile-parent-toggle'); 91 if (parentToggle) { 92 event.preventDefault(); 93 toggleItem(parentToggle.closest('.thn-mobile-menu-item')); 94 } 95 }, true); 96 97 closeButton.addEventListener('click', closeMenu); 98 overlay.addEventListener('click', closeMenu); 99 100 document.addEventListener('keydown', function (event) { 101 if (event.key === 'Escape' && menu.classList.contains('is-open')) { 102 closeMenu(); 103 } 104 }); 105 106 window.addEventListener('resize', function () { 107 if (window.innerWidth > 767 && menu.classList.contains('is-open')) { 108 closeMenu(); 109 } 110 }); 111 } 112 113 if (document.readyState === 'loading') { 114 document.addEventListener('DOMContentLoaded', init); 115 } else { 116 init(); 117 } 118}());
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.