/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Event as BaseEvent, Emitter } from 'vs/base/common/event'; export type EventHandler = HTMLElement | HTMLDocument | Window; export interface IDomEvent { (element: EventHandler, type: K, useCapture?: boolean): BaseEvent; (element: EventHandler, type: string, useCapture?: boolean): BaseEvent; } export const domEvent: IDomEvent = (element: EventHandler, type: string, useCapture?: boolean) => { const fn = (e: Event) => emitter.fire(e); const emitter = new Emitter({ onFirstListenerAdd: () => { element.addEventListener(type, fn, useCapture); }, onLastListenerRemove: () => { element.removeEventListener(type, fn, useCapture); } }); return emitter.event; }; export interface CancellableEvent { preventDefault(): void; stopPropagation(): void; } export function stopEvent(event: T): T { event.preventDefault(); event.stopPropagation(); return event; } export function stop(event: BaseEvent): BaseEvent { return BaseEvent.map(event, stopEvent); }