1(function () { 2 "use strict"; 3 4 function setFaqState(button, expanded) { 5 if (!button) return; 6 var panel = document.getElementById(button.getAttribute("aria-controls")); 7 var item = button.closest("[data-faq-disclosure]"); 8 if (!panel || !item) return; 9 button.setAttribute("aria-expanded", expanded ? "true" : "false"); 10 item.classList.toggle("open", expanded); 11 panel.classList.toggle("open", expanded); 12 if (expanded) panel.removeAttribute("hidden"); 13 else panel.setAttribute("hidden", "until-found"); 14 } 15 16 document.addEventListener("click", function (event) { 17 var button = event.target && event.target.closest 18 ? event.target.closest("[data-faq-toggle]") 19 : null; 20 if (!button) return; 21 setFaqState(button, button.getAttribute("aria-expanded") !== "true"); 22 }); 23 24 // Preserve Find in Page behavior where hidden=until-found is supported. 25 document.addEventListener("beforematch", function (event) { 26 var panel = event.target && event.target.closest ? event.target.closest("[data-faq-disclosure] > .fa") : null; 27 if (!panel) return; 28 var item = panel.closest("[data-faq-disclosure]"); 29 var button = item && item.querySelector("[data-faq-toggle]"); 30 setFaqState(button, true); 31 }, true); 32 33 var scrollers = Array.prototype.slice.call(document.querySelectorAll(".table-scroll")); 34 if (!scrollers.length) return; 35 36 function syncScroller(scroller) { 37 var overflows = scroller.scrollWidth > scroller.clientWidth + 1; 38 if (overflows) scroller.setAttribute("tabindex", "0"); 39 else scroller.removeAttribute("tabindex"); 40 } 41 42 scrollers.forEach(syncScroller); 43 if ("ResizeObserver" in window) { 44 var observer = new ResizeObserver(function (entries) { 45 entries.forEach(function (entry) { syncScroller(entry.target); }); 46 }); 47 scrollers.forEach(function (scroller) { observer.observe(scroller); }); 48 } else { 49 window.addEventListener("resize", function () { scrollers.forEach(syncScroller); }); 50 } 51})(); 52 53// Long service/destination copy is focusable only while it is genuinely clipped. This avoids 54// dozens of empty tab stops while preserving keyboard access whenever a panel really scrolls. 55(function () { 56 "use strict"; 57 58 var regions = Array.prototype.slice.call(document.querySelectorAll("[data-scroll-label]")); 59 if (!regions.length) return; 60 61 function syncRegion(region) { 62 var style = window.getComputedStyle(region); 63 var vertical = /^(auto|scroll)$/.test(style.overflowY) 64 && region.scrollHeight > region.clientHeight + 1; 65 var horizontal = /^(auto|scroll)$/.test(style.overflowX) 66 && region.scrollWidth > region.clientWidth + 1; 67 var active = Boolean((vertical || horizontal) && (region.textContent || "").trim()); 68 69 region.toggleAttribute("data-overflowing", active); 70 if (active) { 71 region.setAttribute("tabindex", "0"); 72 region.setAttribute("role", "region"); 73 region.setAttribute("aria-label", region.getAttribute("data-scroll-label")); 74 } else { 75 region.removeAttribute("tabindex"); 76 region.removeAttribute("role"); 77 region.removeAttribute("aria-label"); 78 } 79 } 80 81 function syncAll() { 82 regions.forEach(syncRegion); 83 } 84 85 syncAll(); 86 window.addEventListener("load", syncAll, { once: true }); 87 if (document.fonts && document.fonts.ready) document.fonts.ready.then(syncAll); 88 89 if ("ResizeObserver" in window) { 90 var resizeObserver = new ResizeObserver(function (entries) { 91 entries.forEach(function (entry) { syncRegion(entry.target); }); 92 }); 93 regions.forEach(function (region) { resizeObserver.observe(region); }); 94 } else { 95 window.addEventListener("resize", syncAll); 96 } 97 98 if ("IntersectionObserver" in window) { 99 var visibilityObserver = new IntersectionObserver(function (entries) { 100 entries.forEach(function (entry) { 101 if (entry.isIntersecting) syncRegion(entry.target); 102 }); 103 }, { rootMargin: "300px 0px" }); 104 regions.forEach(function (region) { visibilityObserver.observe(region); }); 105 } 106})();
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.