Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/browser/event.ts
3292 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { GestureEvent } from './touch.js';
7
import { Emitter, Event as BaseEvent } from '../common/event.js';
8
import { IDisposable } from '../common/lifecycle.js';
9
10
export type EventHandler = HTMLElement | HTMLDocument | Window;
11
12
export interface IDomEvent {
13
<K extends keyof HTMLElementEventMap>(element: EventHandler, type: K, useCapture?: boolean): BaseEvent<HTMLElementEventMap[K]>;
14
(element: EventHandler, type: string, useCapture?: boolean): BaseEvent<unknown>;
15
}
16
17
export interface DOMEventMap extends HTMLElementEventMap, DocumentEventMap, WindowEventMap {
18
'-monaco-gesturetap': GestureEvent;
19
'-monaco-gesturechange': GestureEvent;
20
'-monaco-gesturestart': GestureEvent;
21
'-monaco-gesturesend': GestureEvent;
22
'-monaco-gesturecontextmenu': GestureEvent;
23
'compositionstart': CompositionEvent;
24
'compositionupdate': CompositionEvent;
25
'compositionend': CompositionEvent;
26
}
27
28
export class DomEmitter<K extends keyof DOMEventMap> implements IDisposable {
29
30
private readonly emitter: Emitter<DOMEventMap[K]>;
31
32
get event(): BaseEvent<DOMEventMap[K]> {
33
return this.emitter.event;
34
}
35
36
constructor(element: Window & typeof globalThis, type: WindowEventMap, useCapture?: boolean);
37
constructor(element: Document, type: DocumentEventMap, useCapture?: boolean);
38
constructor(element: EventHandler, type: K, useCapture?: boolean);
39
constructor(element: EventHandler, type: K, useCapture?: boolean) {
40
const fn = (e: Event) => this.emitter.fire(e as DOMEventMap[K]);
41
this.emitter = new Emitter({
42
onWillAddFirstListener: () => element.addEventListener(type, fn, useCapture),
43
onDidRemoveLastListener: () => element.removeEventListener(type, fn, useCapture)
44
});
45
}
46
47
dispose(): void {
48
this.emitter.dispose();
49
}
50
}
51
52