1(function () { 2 'use strict'; 3 var widget = document.querySelector('[data-yh-contact-widget]'); 4 if (!widget) return; 5 var trigger = widget.querySelector('.yh-contact-widget__toggle'); 6 var panel = widget.querySelector('.yh-contact-widget__panel'); 7 function setOpen(open, restoreFocus) { 8 widget.classList.toggle('is-open', open); 9 trigger.setAttribute('aria-expanded', String(open)); 10 trigger.setAttribute('aria-label', open ? trigger.dataset.closeLabel : trigger.dataset.openLabel); 11 panel.inert = !open; 12 panel.setAttribute('aria-hidden', String(!open)); 13 if (!open) { 14 if (restoreFocus) trigger.focus({ preventScroll: true }); 15 } 16 } 17 trigger.addEventListener('click', function () { setOpen(!widget.classList.contains('is-open'), false); }); 18 widget.addEventListener('keydown', function (event) { 19 if (event.key === 'Escape') { setOpen(false, true); event.preventDefault(); } 20 }); 21 document.addEventListener('pointerdown', function (event) { 22 if (!widget.contains(event.target)) setOpen(false, false); 23 }); 24 widget.addEventListener('focusout', function () { 25 window.setTimeout(function () { if (!widget.contains(document.activeElement)) setOpen(false, false); }, 0); 26 }); 27 document.body.appendChild(widget); 28 setOpen(false, false); 29 function updateVisibility() { 30 var maxScroll = Math.max(0, document.documentElement.scrollHeight - window.innerHeight); 31 var threshold = maxScroll >= 3000 ? 3000 : maxScroll / 2; 32 var visible = window.pageYOffset >= threshold; 33 if (!visible && widget.classList.contains('is-open')) setOpen(false, false); 34 widget.hidden = !visible; 35 } 36 window.addEventListener('scroll', updateVisibility, { passive: true }); 37 window.addEventListener('pageshow', updateVisibility); 38 window.addEventListener('resize', updateVisibility); 39 window.addEventListener('load', updateVisibility); 40 if (window.ResizeObserver) new ResizeObserver(updateVisibility).observe(document.body); 41 updateVisibility(); 42 document.body.classList.add('yh-contact-widget-ready'); 43})();
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.