2778b9220c
* 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)
38 lines
1.1 KiB
TypeScript
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();
|
|
}
|