20 lines
600 B
TypeScript
20 lines
600 B
TypeScript
|
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()
|
||
|
cb()
|
||
|
}
|
||
|
|
||
|
function esc(e: HTMLElementEventMap["keydown"]) {
|
||
|
if (!e.key.startsWith("Esc")) return
|
||
|
e.preventDefault()
|
||
|
cb()
|
||
|
}
|
||
|
|
||
|
outsideContainer?.removeEventListener("click", click)
|
||
|
outsideContainer?.addEventListener("click", click)
|
||
|
document.removeEventListener("keydown", esc)
|
||
|
document.addEventListener('keydown', esc)
|
||
|
}
|