export function dialog (header, body, onclose = async (result, form) => { }, validate = async (dialog, form) => { return true; }) { const dialog = document.createElement("dialog"); dialog.innerHTML = `

`; dialog.className = "w3-container w3-card w3-border-0"; dialog.querySelector("#prompt").innerText = header; dialog.querySelector("#body").innerHTML = body; dialog.addEventListener("close", async () => { const formElem = dialog.querySelector("form"); let formData = null; if (formElem) { formData = new FormData(formElem); } await onclose(dialog.returnValue, formData); dialog.parentElement.removeChild(dialog); }); dialog.querySelector("#confirm").addEventListener("click", async (e) => { e.preventDefault(); let valid = true; const formElem = dialog.querySelector("form"); if (formElem) { const form = new FormData(formElem); valid = await validate(dialog, form); } if (valid) { dialog.close(e.target.value); } }); dialog.querySelector("#cancel").addEventListener("click", async (e) => { e.preventDefault(); dialog.close(e.target.value); }); document.body.append(dialog); dialog.showModal(); return dialog; } export function alert (message) { const dialog = document.createElement("dialog"); dialog.innerHTML = `

${message}

`; dialog.className = "w3-container w3-card w3-border-0"; document.body.append(dialog); dialog.showModal(); dialog.addEventListener("close", () => { dialog.parentElement.removeChild(dialog); }); return dialog; }