import { registerBehavior } from "./index"; class ModalBehavior { constructor(element) { const toggle = element; toggle.addEventListener("click", this.onToggleClick.bind(this)); this.toggle = toggle; } onToggleClick() { const contentSelector = this.toggle.getAttribute("modal-content"); const content = document.querySelector(contentSelector); if (!content) { return; } // Create modal const modal = document.createElement("div"); modal.classList.add("modal", "active"); modal.innerHTML = ` `; // Teleport content element const contentOwner = content.parentElement; const contentContainer = modal.querySelector(".content"); contentContainer.append(content); this.content = content; this.contentOwner = contentOwner; // Register close handlers const modalOverlay = modal.querySelector(".modal-overlay"); const closeButton = modal.querySelector(".btn.close"); modalOverlay.addEventListener("click", this.onClose.bind(this)); closeButton.addEventListener("click", this.onClose.bind(this)); document.body.append(modal); this.modal = modal; } onClose() { // Teleport content back this.contentOwner.append(this.content); // Remove modal this.modal.remove(); } } registerBehavior("ld-modal", ModalBehavior);