event.ts 9.6 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

J
Johannes Rieken 已提交
7
import _Event, { Emitter, mapEvent } from 'vs/base/common/event';
J
Joao Moreno 已提交
8

9 10
export type EventHandler = HTMLElement | HTMLDocument | Window;

J
Joao Moreno 已提交
11
export interface IDomEvent {
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
	(element: EventHandler, type: 'MSContentZoom', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'MSGestureChange', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGestureDoubleTap', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGestureEnd', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGestureHold', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGestureStart', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGestureTap', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSGotPointerCapture', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSInertiaStart', useCapture?: boolean): _Event<MSGestureEvent>;
	(element: EventHandler, type: 'MSLostPointerCapture', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSManipulationStateChanged', useCapture?: boolean): _Event<MSManipulationEvent>;
	(element: EventHandler, type: 'MSPointerCancel', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerDown', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerEnter', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerLeave', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerMove', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerOut', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerOver', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'MSPointerUp', useCapture?: boolean): _Event<MSPointerEvent>;
	(element: EventHandler, type: 'abort', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'activate', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'beforeactivate', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'beforecopy', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'beforecut', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'beforedeactivate', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'beforepaste', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'blur', useCapture?: boolean): _Event<FocusEvent>;
	(element: EventHandler, type: 'canplay', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'canplaythrough', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'change', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'click', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'contextmenu', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'copy', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'cuechange', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'cut', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dblclick', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'deactivate', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'drag', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dragend', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dragenter', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dragleave', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dragover', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'dragstart', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'drop', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'durationchange', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'emptied', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'ended', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'error', useCapture?: boolean): _Event<ErrorEvent>;
	(element: EventHandler, type: 'focus', useCapture?: boolean): _Event<FocusEvent>;
	(element: EventHandler, type: 'gotpointercapture', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'input', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'keydown', useCapture?: boolean): _Event<KeyboardEvent>;
	(element: EventHandler, type: 'keypress', useCapture?: boolean): _Event<KeyboardEvent>;
	(element: EventHandler, type: 'keyup', useCapture?: boolean): _Event<KeyboardEvent>;
	(element: EventHandler, type: 'load', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'loadeddata', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'loadedmetadata', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'loadstart', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'lostpointercapture', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'mousedown', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mouseenter', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mouseleave', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mousemove', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mouseout', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mouseover', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mouseup', useCapture?: boolean): _Event<MouseEvent>;
	(element: EventHandler, type: 'mousewheel', useCapture?: boolean): _Event<MouseWheelEvent>;
	(element: EventHandler, type: 'paste', useCapture?: boolean): _Event<DragEvent>;
	(element: EventHandler, type: 'pause', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'play', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'playing', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'pointercancel', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerdown', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerenter', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerleave', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointermove', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerout', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerover', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'pointerup', useCapture?: boolean): _Event<PointerEvent>;
	(element: EventHandler, type: 'progress', useCapture?: boolean): _Event<ProgressEvent>;
	(element: EventHandler, type: 'ratechange', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'reset', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'scroll', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'seeked', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'seeking', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'select', useCapture?: boolean): _Event<UIEvent>;
	(element: EventHandler, type: 'selectstart', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'stalled', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'submit', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'suspend', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'timeupdate', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'touchcancel', useCapture?: boolean): _Event<TouchEvent>;
	(element: EventHandler, type: 'touchend', useCapture?: boolean): _Event<TouchEvent>;
	(element: EventHandler, type: 'touchmove', useCapture?: boolean): _Event<TouchEvent>;
	(element: EventHandler, type: 'touchstart', useCapture?: boolean): _Event<TouchEvent>;
	(element: EventHandler, type: 'volumechange', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'waiting', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'webkitfullscreenchange', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'webkitfullscreenerror', useCapture?: boolean): _Event<Event>;
	(element: EventHandler, type: 'wheel', useCapture?: boolean): _Event<WheelEvent>;
112
	(element: EventHandler, type: string, useCapture?: boolean): _Event<any>;
J
Joao Moreno 已提交
113 114
}

B
Benjamin Pasero 已提交
115
export const domEvent: IDomEvent = (element: EventHandler, type: string, useCapture?: boolean) => {
J
Joao Moreno 已提交
116 117 118
	const fn = e => emitter.fire(e);
	const emitter = new Emitter<any>({
		onFirstListenerAdd: () => {
B
Benjamin Pasero 已提交
119
			element.addEventListener(type, fn, useCapture);
J
Joao Moreno 已提交
120 121
		},
		onLastListenerRemove: () => {
B
Benjamin Pasero 已提交
122
			element.removeEventListener(type, fn, useCapture);
J
Joao Moreno 已提交
123 124 125 126 127
		}
	});

	return emitter.event;
};
J
Joao Moreno 已提交
128 129 130 131 132 133 134 135

export function stop<T extends Event>(event: _Event<T>): _Event<T> {
	return mapEvent(event, e => {
		e.preventDefault();
		e.stopPropagation();
		return e;
	});
}