/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. 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 stop(event: BaseEvent): BaseEvent { return BaseEvent.map(event, e => { e.preventDefault(); e.stopPropagation(); return e; }); }