anki/ts/lib/events.ts
Henrik Giesel 2778b9220c
Mathjax editor improvements (#1502)
* Remove unnecessary stopPropagation of mathjax-overlay events

* Use CodeMirror component for MathjaxHandle

* Refactor ResizeObserver code in MathjaxHandle

* Wrap setRange in CodeMirror in try/catch

* Add Mathjax Editor bottom margin

* Add custom Enter and Shift+Enter shortcuts for the MathjaxHandle

* Format

* Move placeCaretAfter to domlib

* Move focus back to field after editing Mathjax

* Put Cursor after Mathjax after accepting

* Add delete button for Mathjax

* Change border color of mathjax menu

* Refactor into MathjaxMenu

* Put caretKeyword in variable

* Use one ResizeObserver for all Mathjax images

* Add minmimum width for Mathjax editor

* is still smaller than minimal window width

* Add bazel directories to .prettierignore and format from root

* exclude ftl/usage (dae)

the json files that live there are output from our tooling, and
formatting them means an extra step each time we want to update them

also exclude .mypy_cache, which is output by scripts/mypy*

* minor ftl tweak: newline -> new line  (dae)
2021-11-23 10:27:32 +10:00

38 lines
1.1 KiB
TypeScript

// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
type EventTargetToMap<A extends EventTarget> = A extends HTMLElement
? HTMLElementEventMap
: A extends Document
? DocumentEventMap
: A extends Window
? WindowEventMap
: A extends FileReader
? FileReaderEventMap
: A extends Element
? ElementEventMap
: A extends Animation
? AnimationEventMap
: A extends EventSource
? EventSourceEventMap
: A extends AbortSignal
? AbortSignalEventMap
: A extends AbstractWorker
? AbstractWorkerEventMap
: never;
export function on<T extends EventTarget, K extends keyof EventTargetToMap<T>>(
target: T,
eventType: Exclude<K, symbol | number>,
handler: (this: T, event: EventTargetToMap<T>[K]) => void,
options?: AddEventListenerOptions,
): () => void {
target.addEventListener(eventType, handler as EventListener, options);
return () =>
target.removeEventListener(eventType, handler as EventListener, options);
}
export function preventDefault(event: Event): void {
event.preventDefault();
}