2023-06-20 03:37:45 +00:00
|
|
|
export function registerEscapeHandler(outsideContainer: HTMLElement | null, cb: () => void) {
|
|
|
|
if (!outsideContainer) return
|
|
|
|
function click(this: HTMLElement, e: HTMLElementEventMap["click"]) {
|
|
|
|
if (e.target !== this) return
|
|
|
|
e.preventDefault()
|
2024-08-10 01:46:50 +00:00
|
|
|
e.stopPropagation()
|
2023-06-20 03:37:45 +00:00
|
|
|
cb()
|
|
|
|
}
|
|
|
|
|
|
|
|
function esc(e: HTMLElementEventMap["keydown"]) {
|
|
|
|
if (!e.key.startsWith("Esc")) return
|
|
|
|
e.preventDefault()
|
|
|
|
cb()
|
|
|
|
}
|
|
|
|
|
|
|
|
outsideContainer?.addEventListener("click", click)
|
2024-02-02 04:07:14 +00:00
|
|
|
window.addCleanup(() => outsideContainer?.removeEventListener("click", click))
|
2023-07-23 00:27:41 +00:00
|
|
|
document.addEventListener("keydown", esc)
|
2024-02-02 04:07:14 +00:00
|
|
|
window.addCleanup(() => document.removeEventListener("keydown", esc))
|
2023-06-20 03:37:45 +00:00
|
|
|
}
|
2023-06-20 05:50:25 +00:00
|
|
|
|
|
|
|
export function removeAllChildren(node: HTMLElement) {
|
|
|
|
while (node.firstChild) {
|
|
|
|
node.removeChild(node.firstChild)
|
|
|
|
}
|
|
|
|
}
|