PageSourceSearch

https://drinkghia.com/cdn/shop/t/243/assets/web-components-site-modal.js?v=1762968219089237351784546063

js drinkghia.com collected 2026-10-03 21:01:51 UTC 2,587 bytes, 2 lines download raw bytes

1class SiteModal extends HTMLElement{constructor(){super(),this._onDocClick=null,this._onKeydown=null,this._lastFocused=null,this.sectionRoot=null}connectedCallback(){this.sectionRoot=this.closest('[id^="shopify-section-"]')||document,this.registerEvents(),this.modal=this.querySelector(".modal")}disconnectedCallback(){this._onDocClick&&(document.removeEventListener("click",this._onDocClick),this._onDocClick=null),this._onKeydown&&(document.removeEventListener("keydown",this._onKeydown),this._onKeydown=null)}getFocusableElements(){return Array.from(this.modal.querySelectorAll("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]")).filter(el=>el.getAttribute("tabindex")!=="-1"&&el.getClientRects().length>0)}openModal(){this.modal&&(this.modal.classList.add("active"),this._lastFocused=document.activeElement,window.setTimeout(()=>{const focusables=this.getFocusableElements();focusables.length&&focusables[0].focus()},100),this._onKeydown||(this._onKeydown=e=>{if(e.key==="Escape"){this.closeModal();return}if(e.key!=="Tab")return;const focusables=this.getFocusableElements();if(!focusables.length)return;const first=focusables[0],last=focusables[focusables.length-1],active=document.activeElement;e.shiftKey?(active===first||!this.modal.contains(active))&&(e.preventDefault(),last.focus()):(active===last||!this.modal.contains(active))&&(e.preventDefault(),first.focus())},document.addEventListener("keydown",this._onKeydown)))}closeModal(){this.modal&&(this.modal.classList.remove("active"),this._onKeydown&&(document.removeEventListener("keydown",this._onKeydown),this._onKeydown=null),this._lastFocused&&document.contains(this._lastFocused)&&this._lastFocused.focus(),this._lastFocused=null)}registerEvents(){const opens=this.querySelectorAll(".modal-open"),closes=this.querySelectorAll(".modal-close"),triggerClass=this.dataset.trigger;this._onDocClick&&(document.removeEventListener("click",this._onDocClick),this._onDocClick=null),triggerClass&&(this._onDocClick=e=>{const button=e.target.closest("button");button&&(this.sectionRoot&&!this.sectionRoot.contains(button)||button.matches(triggerClass)&&this.openModal())},document.addEventListener("click",this._onDocClick)),Array.from(opens).forEach(open=>{open.addEventListener("click",e=>{this.openModal()})}),Array.from(closes).forEach(close=>{close.addEventListener("click",e=>{this.closeModal()})})}}customElements.define("site-modal",SiteModal);
2//# sourceMappingURL=/cdn/shop/t/243/assets/web-components-site-modal.js.map?v=1762968219089237351784546063

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.