document.addEventListener("DOMContentLoaded", () => { const csrfToken = document .querySelector("meta[name='csrf-token']") .getAttribute("content"); const Hooks = { SidebarInteractions: { mounted() { this.handleDblClick = (event) => { const button = event.target.closest("[data-testid='sidebar-open-item']"); if (!button || !this.el.contains(button)) { return; } this.pushEvent("pin_sidebar_item", { route: button.dataset.route, id: button.dataset.itemId, title: button.dataset.openTitle || "", subtitle: button.dataset.openSubtitle || "" }); }; this.el.addEventListener("dblclick", this.handleDblClick); }, destroyed() { this.el.removeEventListener("dblclick", this.handleDblClick); } } }; const liveSocket = new LiveView.LiveSocket("/live", Phoenix.Socket, { params: { _csrf_token: csrfToken }, hooks: Hooks, metadata: { keydown: (event) => ({ key: event.key, meta: event.metaKey, ctrl: event.ctrlKey, alt: event.altKey, shift: event.shiftKey, tag: event.target?.tagName || null, contentEditable: event.target?.isContentEditable || false }) } }); liveSocket.connect(); window.liveSocket = liveSocket; });