Review point (#2950, comment 3444116036): when the surrounding task <dialog> closed while the link prompt was open, the prompt was orphaned and cleanup() never ran, leaking listeners and an unresolved promise. Treat the prompt as a sub-modal of the task dialog: pressing Escape while it is open now preventDefault()/stopPropagation()s the keydown so the native modal <dialog> does not close on Escape, resolves the prompt with '' (cancel) and runs cleanup() — only the prompt is dismissed, the task dialog stays open. A one-shot 'cancel' listener on the enclosing dialog backs this up in case the keydown handling is insufficient in some browser. Tighten cleanup() so the prompt fully tears down regardless of how it closes (Enter / Escape / click-outside): it now removes the scroll listener, the document click listener and the dialog cancel listener, and removes the element. handleClickOutside was hoisted so cleanup() can remove it, closing the leaked-listener gap directly. Adds an e2e asserting Escape cancels the prompt while the task dialog stays open; the existing 'Enter creates the link' case still passes. |
||
|---|---|---|
| .. | ||
| admin | ||
| editor | ||
| filters | ||
| misc | ||
| project | ||
| sharing | ||
| task | ||
| time-tracking | ||
| user | ||
| websocket | ||