piral-blazor 1.0.0-pre.2217 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +55 -12
- package/convert.d.ts +13 -10
- package/convert.js +17 -12
- package/esm/converter.d.ts +10 -6
- package/esm/converter.js +164 -48
- package/esm/converter.js.map +1 -1
- package/esm/create.d.ts +21 -1
- package/esm/create.js +29 -15
- package/esm/create.js.map +1 -1
- package/esm/dependencies.d.ts +6 -3
- package/esm/dependencies.js +104 -14
- package/esm/dependencies.js.map +1 -1
- package/esm/events.d.ts +6 -0
- package/esm/events.js +145 -0
- package/esm/events.js.map +1 -0
- package/esm/interop.d.ts +29 -0
- package/esm/interop.js +205 -0
- package/esm/interop.js.map +1 -0
- package/esm/navigation.d.ts +2 -0
- package/esm/navigation.js +30 -0
- package/esm/navigation.js.map +1 -0
- package/esm/types.d.ts +97 -4
- package/infra.codegen +53 -68
- package/lib/converter.d.ts +10 -6
- package/lib/converter.js +164 -48
- package/lib/converter.js.map +1 -1
- package/lib/create.d.ts +21 -1
- package/lib/create.js +31 -17
- package/lib/create.js.map +1 -1
- package/lib/dependencies.d.ts +6 -3
- package/lib/dependencies.js +104 -14
- package/lib/dependencies.js.map +1 -1
- package/lib/events.d.ts +6 -0
- package/lib/events.js +154 -0
- package/lib/events.js.map +1 -0
- package/lib/index.js +1 -1
- package/lib/interop.d.ts +29 -0
- package/lib/interop.js +226 -0
- package/lib/interop.js.map +1 -0
- package/lib/navigation.d.ts +2 -0
- package/lib/navigation.js +35 -0
- package/lib/navigation.js.map +1 -0
- package/lib/types.d.ts +97 -4
- package/package.json +26 -13
- package/src/converter.ts +237 -57
- package/src/create.ts +53 -9
- package/src/dependencies.ts +122 -14
- package/src/events.ts +174 -0
- package/src/interop.ts +273 -0
- package/src/navigation.ts +36 -0
- package/src/types.ts +115 -4
- package/convert.ts +0 -17
- package/esm/internal/Environment.d.ts +0 -3
- package/esm/internal/Environment.js +0 -6
- package/esm/internal/Environment.js.map +0 -1
- package/esm/internal/Platform/BootConfig.d.ts +0 -20
- package/esm/internal/Platform/BootConfig.js +0 -10
- package/esm/internal/Platform/BootConfig.js.map +0 -1
- package/esm/internal/Platform/Mono/MonoDebugger.d.ts +0 -3
- package/esm/internal/Platform/Mono/MonoDebugger.js +0 -43
- package/esm/internal/Platform/Mono/MonoDebugger.js.map +0 -1
- package/esm/internal/Platform/Mono/MonoPlatform.d.ts +0 -2
- package/esm/internal/Platform/Mono/MonoPlatform.js +0 -403
- package/esm/internal/Platform/Mono/MonoPlatform.js.map +0 -1
- package/esm/internal/Platform/Mono/TimezoneDataFile.d.ts +0 -1
- package/esm/internal/Platform/Mono/TimezoneDataFile.js +0 -51
- package/esm/internal/Platform/Mono/TimezoneDataFile.js.map +0 -1
- package/esm/internal/Platform/Platform.d.ts +0 -31
- package/esm/internal/Platform/Platform.js +0 -2
- package/esm/internal/Platform/Platform.js.map +0 -1
- package/esm/internal/Platform/Url.d.ts +0 -2
- package/esm/internal/Platform/Url.js +0 -11
- package/esm/internal/Platform/Url.js.map +0 -1
- package/esm/internal/Platform/WebAssemblyConfigLoader.d.ts +0 -4
- package/esm/internal/Platform/WebAssemblyConfigLoader.js +0 -64
- package/esm/internal/Platform/WebAssemblyConfigLoader.js.map +0 -1
- package/esm/internal/Platform/WebAssemblyResourceLoader.d.ts +0 -24
- package/esm/internal/Platform/WebAssemblyResourceLoader.js +0 -223
- package/esm/internal/Platform/WebAssemblyResourceLoader.js.map +0 -1
- package/esm/internal/Platform/WebAssemblyStartOptions.d.ts +0 -13
- package/esm/internal/Platform/WebAssemblyStartOptions.js +0 -2
- package/esm/internal/Platform/WebAssemblyStartOptions.js.map +0 -1
- package/esm/internal/Rendering/BrowserRenderer.d.ts +0 -38
- package/esm/internal/Rendering/BrowserRenderer.js +0 -458
- package/esm/internal/Rendering/BrowserRenderer.js.map +0 -1
- package/esm/internal/Rendering/ElementReferenceCapture.d.ts +0 -1
- package/esm/internal/Rendering/ElementReferenceCapture.js +0 -24
- package/esm/internal/Rendering/ElementReferenceCapture.js.map +0 -1
- package/esm/internal/Rendering/EventDelegator.d.ts +0 -20
- package/esm/internal/Rendering/EventDelegator.js +0 -236
- package/esm/internal/Rendering/EventDelegator.js.map +0 -1
- package/esm/internal/Rendering/EventFieldInfo.d.ts +0 -6
- package/esm/internal/Rendering/EventFieldInfo.js +0 -32
- package/esm/internal/Rendering/EventFieldInfo.js.map +0 -1
- package/esm/internal/Rendering/EventForDotNet.d.ts +0 -10
- package/esm/internal/Rendering/EventForDotNet.js +0 -194
- package/esm/internal/Rendering/EventForDotNet.js.map +0 -1
- package/esm/internal/Rendering/LogicalElements.d.ts +0 -19
- package/esm/internal/Rendering/LogicalElements.js +0 -250
- package/esm/internal/Rendering/LogicalElements.js.map +0 -1
- package/esm/internal/Rendering/RenderBatch/BinaryDecoder.d.ts +0 -5
- package/esm/internal/Rendering/RenderBatch/BinaryDecoder.js +0 -34
- package/esm/internal/Rendering/RenderBatch/BinaryDecoder.js.map +0 -1
- package/esm/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.d.ts +0 -18
- package/esm/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.js +0 -190
- package/esm/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.js.map +0 -1
- package/esm/internal/Rendering/RenderBatch/RenderBatch.d.ts +0 -87
- package/esm/internal/Rendering/RenderBatch/RenderBatch.js +0 -26
- package/esm/internal/Rendering/RenderBatch/RenderBatch.js.map +0 -1
- package/esm/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.d.ts +0 -52
- package/esm/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.js +0 -103
- package/esm/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.js.map +0 -1
- package/esm/internal/Rendering/RenderBatch/Utf8Decoder.d.ts +0 -1
- package/esm/internal/Rendering/RenderBatch/Utf8Decoder.js +0 -63
- package/esm/internal/Rendering/RenderBatch/Utf8Decoder.js.map +0 -1
- package/esm/internal/Rendering/Renderer.d.ts +0 -8
- package/esm/internal/Rendering/Renderer.js +0 -69
- package/esm/internal/Rendering/Renderer.js.map +0 -1
- package/esm/internal/Rendering/RendererEventDispatcher.d.ts +0 -4
- package/esm/internal/Rendering/RendererEventDispatcher.js +0 -11
- package/esm/internal/Rendering/RendererEventDispatcher.js.map +0 -1
- package/esm/internal/Services/NavigationManager.d.ts +0 -16
- package/esm/internal/Services/NavigationManager.js +0 -138
- package/esm/internal/Services/NavigationManager.js.map +0 -1
- package/esm/internal/globals.d.ts +0 -1
- package/esm/internal/globals.js +0 -5
- package/esm/internal/globals.js.map +0 -1
- package/esm/internal/index.d.ts +0 -15
- package/esm/internal/index.js +0 -152
- package/esm/internal/index.js.map +0 -1
- package/lib/internal/Environment.d.ts +0 -3
- package/lib/internal/Environment.js +0 -9
- package/lib/internal/Environment.js.map +0 -1
- package/lib/internal/Platform/BootConfig.d.ts +0 -20
- package/lib/internal/Platform/BootConfig.js +0 -13
- package/lib/internal/Platform/BootConfig.js.map +0 -1
- package/lib/internal/Platform/Mono/MonoDebugger.d.ts +0 -3
- package/lib/internal/Platform/Mono/MonoDebugger.js +0 -48
- package/lib/internal/Platform/Mono/MonoDebugger.js.map +0 -1
- package/lib/internal/Platform/Mono/MonoPlatform.d.ts +0 -2
- package/lib/internal/Platform/Mono/MonoPlatform.js +0 -406
- package/lib/internal/Platform/Mono/MonoPlatform.js.map +0 -1
- package/lib/internal/Platform/Mono/TimezoneDataFile.d.ts +0 -1
- package/lib/internal/Platform/Mono/TimezoneDataFile.js +0 -55
- package/lib/internal/Platform/Mono/TimezoneDataFile.js.map +0 -1
- package/lib/internal/Platform/Platform.d.ts +0 -31
- package/lib/internal/Platform/Platform.js +0 -3
- package/lib/internal/Platform/Platform.js.map +0 -1
- package/lib/internal/Platform/Url.d.ts +0 -2
- package/lib/internal/Platform/Url.js +0 -16
- package/lib/internal/Platform/Url.js.map +0 -1
- package/lib/internal/Platform/WebAssemblyConfigLoader.d.ts +0 -4
- package/lib/internal/Platform/WebAssemblyConfigLoader.js +0 -67
- package/lib/internal/Platform/WebAssemblyConfigLoader.js.map +0 -1
- package/lib/internal/Platform/WebAssemblyResourceLoader.d.ts +0 -24
- package/lib/internal/Platform/WebAssemblyResourceLoader.js +0 -226
- package/lib/internal/Platform/WebAssemblyResourceLoader.js.map +0 -1
- package/lib/internal/Platform/WebAssemblyStartOptions.d.ts +0 -13
- package/lib/internal/Platform/WebAssemblyStartOptions.js +0 -3
- package/lib/internal/Platform/WebAssemblyStartOptions.js.map +0 -1
- package/lib/internal/Rendering/BrowserRenderer.d.ts +0 -38
- package/lib/internal/Rendering/BrowserRenderer.js +0 -461
- package/lib/internal/Rendering/BrowserRenderer.js.map +0 -1
- package/lib/internal/Rendering/ElementReferenceCapture.d.ts +0 -1
- package/lib/internal/Rendering/ElementReferenceCapture.js +0 -28
- package/lib/internal/Rendering/ElementReferenceCapture.js.map +0 -1
- package/lib/internal/Rendering/EventDelegator.d.ts +0 -20
- package/lib/internal/Rendering/EventDelegator.js +0 -239
- package/lib/internal/Rendering/EventDelegator.js.map +0 -1
- package/lib/internal/Rendering/EventFieldInfo.d.ts +0 -6
- package/lib/internal/Rendering/EventFieldInfo.js +0 -35
- package/lib/internal/Rendering/EventFieldInfo.js.map +0 -1
- package/lib/internal/Rendering/EventForDotNet.d.ts +0 -10
- package/lib/internal/Rendering/EventForDotNet.js +0 -197
- package/lib/internal/Rendering/EventForDotNet.js.map +0 -1
- package/lib/internal/Rendering/LogicalElements.d.ts +0 -19
- package/lib/internal/Rendering/LogicalElements.js +0 -265
- package/lib/internal/Rendering/LogicalElements.js.map +0 -1
- package/lib/internal/Rendering/RenderBatch/BinaryDecoder.d.ts +0 -5
- package/lib/internal/Rendering/RenderBatch/BinaryDecoder.js +0 -42
- package/lib/internal/Rendering/RenderBatch/BinaryDecoder.js.map +0 -1
- package/lib/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.d.ts +0 -18
- package/lib/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.js +0 -193
- package/lib/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.js.map +0 -1
- package/lib/internal/Rendering/RenderBatch/RenderBatch.d.ts +0 -87
- package/lib/internal/Rendering/RenderBatch/RenderBatch.js +0 -29
- package/lib/internal/Rendering/RenderBatch/RenderBatch.js.map +0 -1
- package/lib/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.d.ts +0 -52
- package/lib/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.js +0 -106
- package/lib/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.js.map +0 -1
- package/lib/internal/Rendering/RenderBatch/Utf8Decoder.d.ts +0 -1
- package/lib/internal/Rendering/RenderBatch/Utf8Decoder.js +0 -66
- package/lib/internal/Rendering/RenderBatch/Utf8Decoder.js.map +0 -1
- package/lib/internal/Rendering/Renderer.d.ts +0 -8
- package/lib/internal/Rendering/Renderer.js +0 -76
- package/lib/internal/Rendering/Renderer.js.map +0 -1
- package/lib/internal/Rendering/RendererEventDispatcher.d.ts +0 -4
- package/lib/internal/Rendering/RendererEventDispatcher.js +0 -16
- package/lib/internal/Rendering/RendererEventDispatcher.js.map +0 -1
- package/lib/internal/Services/NavigationManager.d.ts +0 -16
- package/lib/internal/Services/NavigationManager.js +0 -144
- package/lib/internal/Services/NavigationManager.js.map +0 -1
- package/lib/internal/globals.d.ts +0 -1
- package/lib/internal/globals.js +0 -7
- package/lib/internal/globals.js.map +0 -1
- package/lib/internal/index.d.ts +0 -15
- package/lib/internal/index.js +0 -161
- package/lib/internal/index.js.map +0 -1
- package/src/internal/Environment.ts +0 -11
- package/src/internal/Platform/BootConfig.ts +0 -21
- package/src/internal/Platform/Mono/MonoDebugger.ts +0 -48
- package/src/internal/Platform/Mono/MonoPlatform.ts +0 -494
- package/src/internal/Platform/Mono/MonoTypes.d.ts +0 -27
- package/src/internal/Platform/Mono/TimezoneDataFile.ts +0 -46
- package/src/internal/Platform/Platform.ts +0 -40
- package/src/internal/Platform/Url.ts +0 -11
- package/src/internal/Platform/WebAssemblyConfigLoader.ts +0 -34
- package/src/internal/Platform/WebAssemblyResourceLoader.ts +0 -234
- package/src/internal/Platform/WebAssemblyStartOptions.ts +0 -22
- package/src/internal/Rendering/BrowserRenderer.ts +0 -616
- package/src/internal/Rendering/ElementReferenceCapture.ts +0 -27
- package/src/internal/Rendering/EventDelegator.ts +0 -293
- package/src/internal/Rendering/EventFieldInfo.ts +0 -31
- package/src/internal/Rendering/EventForDotNet.ts +0 -370
- package/src/internal/Rendering/LogicalElements.ts +0 -289
- package/src/internal/Rendering/RenderBatch/BinaryDecoder.ts +0 -43
- package/src/internal/Rendering/RenderBatch/OutOfProcessRenderBatch.ts +0 -244
- package/src/internal/Rendering/RenderBatch/RenderBatch.ts +0 -100
- package/src/internal/Rendering/RenderBatch/SharedMemoryRenderBatch.ts +0 -137
- package/src/internal/Rendering/RenderBatch/Utf8Decoder.ts +0 -66
- package/src/internal/Rendering/Renderer.ts +0 -98
- package/src/internal/Rendering/RendererEventDispatcher.ts +0 -20
- package/src/internal/Services/NavigationManager.ts +0 -157
- package/src/internal/globals.ts +0 -5
- package/src/internal/index.ts +0 -170
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { EventForDotNet, UIEventArgs } from './EventForDotNet';
|
|
2
|
-
import { EventFieldInfo } from './EventFieldInfo';
|
|
3
|
-
|
|
4
|
-
const nonBubblingEvents = toLookup([
|
|
5
|
-
'abort',
|
|
6
|
-
'blur',
|
|
7
|
-
'change',
|
|
8
|
-
'error',
|
|
9
|
-
'focus',
|
|
10
|
-
'load',
|
|
11
|
-
'loadend',
|
|
12
|
-
'loadstart',
|
|
13
|
-
'mouseenter',
|
|
14
|
-
'mouseleave',
|
|
15
|
-
'progress',
|
|
16
|
-
'reset',
|
|
17
|
-
'scroll',
|
|
18
|
-
'submit',
|
|
19
|
-
'unload',
|
|
20
|
-
'DOMNodeInsertedIntoDocument',
|
|
21
|
-
'DOMNodeRemovedFromDocument',
|
|
22
|
-
]);
|
|
23
|
-
|
|
24
|
-
const disableableEventNames = toLookup(['click', 'dblclick', 'mousedown', 'mousemove', 'mouseup']);
|
|
25
|
-
|
|
26
|
-
export interface OnEventCallback {
|
|
27
|
-
(
|
|
28
|
-
event: Event,
|
|
29
|
-
eventHandlerId: number,
|
|
30
|
-
eventArgs: EventForDotNet<UIEventArgs>,
|
|
31
|
-
eventFieldInfo: EventFieldInfo | null,
|
|
32
|
-
): void;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Responsible for adding/removing the eventInfo on an expando property on DOM elements, and
|
|
36
|
-
// calling an EventInfoStore that deals with registering/unregistering the underlying delegated
|
|
37
|
-
// event listeners as required (and also maps actual events back to the given callback).
|
|
38
|
-
export class EventDelegator {
|
|
39
|
-
private static nextEventDelegatorId = 0;
|
|
40
|
-
|
|
41
|
-
private readonly eventsCollectionKey: string;
|
|
42
|
-
|
|
43
|
-
private readonly afterClickCallbacks: ((event: MouseEvent) => void)[] = [];
|
|
44
|
-
|
|
45
|
-
private eventInfoStore: EventInfoStore;
|
|
46
|
-
|
|
47
|
-
constructor(private onEvent: OnEventCallback) {
|
|
48
|
-
const eventDelegatorId = ++EventDelegator.nextEventDelegatorId;
|
|
49
|
-
this.eventsCollectionKey = `_blazorEvents_${eventDelegatorId}`;
|
|
50
|
-
this.eventInfoStore = new EventInfoStore(this.onGlobalEvent.bind(this));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public setListener(element: Element, eventName: string, eventHandlerId: number, renderingComponentId: number) {
|
|
54
|
-
const infoForElement = this.getEventHandlerInfosForElement(element, true)!;
|
|
55
|
-
const existingHandler = infoForElement.getHandler(eventName);
|
|
56
|
-
|
|
57
|
-
if (existingHandler) {
|
|
58
|
-
// We can cheaply update the info on the existing object and don't need any other housekeeping
|
|
59
|
-
// Note that this also takes care of updating the eventHandlerId on the existing handler object
|
|
60
|
-
this.eventInfoStore.update(existingHandler.eventHandlerId, eventHandlerId);
|
|
61
|
-
} else {
|
|
62
|
-
// Go through the whole flow which might involve registering a new global handler
|
|
63
|
-
const newInfo = { element, eventName, eventHandlerId, renderingComponentId };
|
|
64
|
-
this.eventInfoStore.add(newInfo);
|
|
65
|
-
infoForElement.setHandler(eventName, newInfo);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
public removeListener(eventHandlerId: number) {
|
|
70
|
-
// This method gets called whenever the .NET-side code reports that a certain event handler
|
|
71
|
-
// has been disposed. However we will already have disposed the info about that handler if
|
|
72
|
-
// the eventHandlerId for the (element,eventName) pair was replaced during diff application.
|
|
73
|
-
const info = this.eventInfoStore.remove(eventHandlerId);
|
|
74
|
-
if (info) {
|
|
75
|
-
// Looks like this event handler wasn't already disposed
|
|
76
|
-
// Remove the associated data from the DOM element
|
|
77
|
-
const element = info.element;
|
|
78
|
-
const elementEventInfos = this.getEventHandlerInfosForElement(element, false);
|
|
79
|
-
if (elementEventInfos) {
|
|
80
|
-
elementEventInfos.removeHandler(info.eventName);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
public notifyAfterClick(callback: (event: MouseEvent) => void) {
|
|
86
|
-
// This is extremely special-case. It's needed so that navigation link click interception
|
|
87
|
-
// can be sure to run *after* our synthetic bubbling process. If a need arises, we can
|
|
88
|
-
// generalise this, but right now it's a purely internal detail.
|
|
89
|
-
this.afterClickCallbacks.push(callback);
|
|
90
|
-
this.eventInfoStore.addGlobalListener('click'); // Ensure we always listen for this
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
public setStopPropagation(element: Element, eventName: string, value: boolean) {
|
|
94
|
-
const infoForElement = this.getEventHandlerInfosForElement(element, true)!;
|
|
95
|
-
infoForElement.stopPropagation(eventName, value);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
public setPreventDefault(element: Element, eventName: string, value: boolean) {
|
|
99
|
-
const infoForElement = this.getEventHandlerInfosForElement(element, true)!;
|
|
100
|
-
infoForElement.preventDefault(eventName, value);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
private onGlobalEvent(evt: Event) {
|
|
104
|
-
if (!(evt.target instanceof Element)) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Scan up the element hierarchy, looking for any matching registered event handlers
|
|
109
|
-
let candidateElement = evt.target as Element | null;
|
|
110
|
-
let eventArgs: EventForDotNet<UIEventArgs> | null = null; // Populate lazily
|
|
111
|
-
const eventIsNonBubbling = nonBubblingEvents.hasOwnProperty(evt.type);
|
|
112
|
-
let stopPropagationWasRequested = false;
|
|
113
|
-
while (candidateElement) {
|
|
114
|
-
const handlerInfos = this.getEventHandlerInfosForElement(candidateElement, false);
|
|
115
|
-
if (handlerInfos) {
|
|
116
|
-
const handlerInfo = handlerInfos.getHandler(evt.type);
|
|
117
|
-
if (handlerInfo && !eventIsDisabledOnElement(candidateElement, evt.type)) {
|
|
118
|
-
// We are going to raise an event for this element, so prepare info needed by the .NET code
|
|
119
|
-
if (!eventArgs) {
|
|
120
|
-
eventArgs = EventForDotNet.fromDOMEvent(evt);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
const eventFieldInfo = EventFieldInfo.fromEvent(handlerInfo.renderingComponentId, evt);
|
|
124
|
-
this.onEvent(evt, handlerInfo.eventHandlerId, eventArgs, eventFieldInfo);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (handlerInfos.stopPropagation(evt.type)) {
|
|
128
|
-
stopPropagationWasRequested = true;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (handlerInfos.preventDefault(evt.type)) {
|
|
132
|
-
evt.preventDefault();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
candidateElement = eventIsNonBubbling || stopPropagationWasRequested ? null : candidateElement.parentElement;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Special case for navigation interception
|
|
140
|
-
if (evt.type === 'click') {
|
|
141
|
-
this.afterClickCallbacks.forEach((callback) => callback(evt as MouseEvent));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
private getEventHandlerInfosForElement(
|
|
146
|
-
element: Element,
|
|
147
|
-
createIfNeeded: boolean,
|
|
148
|
-
): EventHandlerInfosForElement | null {
|
|
149
|
-
if (element.hasOwnProperty(this.eventsCollectionKey)) {
|
|
150
|
-
return element[this.eventsCollectionKey];
|
|
151
|
-
} else if (createIfNeeded) {
|
|
152
|
-
return (element[this.eventsCollectionKey] = new EventHandlerInfosForElement());
|
|
153
|
-
} else {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Responsible for adding and removing the global listener when the number of listeners
|
|
160
|
-
// for a given event name changes between zero and nonzero
|
|
161
|
-
class EventInfoStore {
|
|
162
|
-
private infosByEventHandlerId: { [eventHandlerId: number]: EventHandlerInfo } = {};
|
|
163
|
-
|
|
164
|
-
private countByEventName: { [eventName: string]: number } = {};
|
|
165
|
-
|
|
166
|
-
constructor(private globalListener: EventListener) {}
|
|
167
|
-
|
|
168
|
-
public add(info: EventHandlerInfo) {
|
|
169
|
-
if (this.infosByEventHandlerId[info.eventHandlerId]) {
|
|
170
|
-
// Should never happen, but we want to know if it does
|
|
171
|
-
throw new Error(`Event ${info.eventHandlerId} is already tracked`);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
this.infosByEventHandlerId[info.eventHandlerId] = info;
|
|
175
|
-
|
|
176
|
-
this.addGlobalListener(info.eventName);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
public addGlobalListener(eventName: string) {
|
|
180
|
-
if (this.countByEventName.hasOwnProperty(eventName)) {
|
|
181
|
-
this.countByEventName[eventName]++;
|
|
182
|
-
} else {
|
|
183
|
-
this.countByEventName[eventName] = 1;
|
|
184
|
-
|
|
185
|
-
// To make delegation work with non-bubbling events, register a 'capture' listener.
|
|
186
|
-
// We preserve the non-bubbling behavior by only dispatching such events to the targeted element.
|
|
187
|
-
const useCapture = nonBubblingEvents.hasOwnProperty(eventName);
|
|
188
|
-
document.addEventListener(eventName, this.globalListener, useCapture);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
public update(oldEventHandlerId: number, newEventHandlerId: number) {
|
|
193
|
-
if (this.infosByEventHandlerId.hasOwnProperty(newEventHandlerId)) {
|
|
194
|
-
// Should never happen, but we want to know if it does
|
|
195
|
-
throw new Error(`Event ${newEventHandlerId} is already tracked`);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Since we're just updating the event handler ID, there's no need to update the global counts
|
|
199
|
-
const info = this.infosByEventHandlerId[oldEventHandlerId];
|
|
200
|
-
delete this.infosByEventHandlerId[oldEventHandlerId];
|
|
201
|
-
info.eventHandlerId = newEventHandlerId;
|
|
202
|
-
this.infosByEventHandlerId[newEventHandlerId] = info;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
public remove(eventHandlerId: number): EventHandlerInfo {
|
|
206
|
-
const info = this.infosByEventHandlerId[eventHandlerId];
|
|
207
|
-
if (info) {
|
|
208
|
-
delete this.infosByEventHandlerId[eventHandlerId];
|
|
209
|
-
|
|
210
|
-
const eventName = info.eventName;
|
|
211
|
-
if (--this.countByEventName[eventName] === 0) {
|
|
212
|
-
delete this.countByEventName[eventName];
|
|
213
|
-
document.removeEventListener(eventName, this.globalListener);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return info;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
class EventHandlerInfosForElement {
|
|
222
|
-
// Although we *could* track multiple event handlers per (element, eventName) pair
|
|
223
|
-
// (since they have distinct eventHandlerId values), there's no point doing so because
|
|
224
|
-
// our programming model is that you declare event handlers as attributes. An element
|
|
225
|
-
// can only have one attribute with a given name, hence only one event handler with
|
|
226
|
-
// that name at any one time.
|
|
227
|
-
// So to keep things simple, only track one EventHandlerInfo per (element, eventName)
|
|
228
|
-
private handlers: { [eventName: string]: EventHandlerInfo } = {};
|
|
229
|
-
private preventDefaultFlags: { [eventName: string]: boolean } | null = null;
|
|
230
|
-
private stopPropagationFlags: { [eventName: string]: boolean } | null = null;
|
|
231
|
-
|
|
232
|
-
public getHandler(eventName: string): EventHandlerInfo | null {
|
|
233
|
-
return this.handlers.hasOwnProperty(eventName) ? this.handlers[eventName] : null;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
public setHandler(eventName: string, handler: EventHandlerInfo) {
|
|
237
|
-
this.handlers[eventName] = handler;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
public removeHandler(eventName: string) {
|
|
241
|
-
delete this.handlers[eventName];
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
public preventDefault(eventName: string, setValue?: boolean): boolean {
|
|
245
|
-
if (setValue !== undefined) {
|
|
246
|
-
this.preventDefaultFlags = this.preventDefaultFlags || {};
|
|
247
|
-
this.preventDefaultFlags[eventName] = setValue;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
return this.preventDefaultFlags ? this.preventDefaultFlags[eventName] : false;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
public stopPropagation(eventName: string, setValue?: boolean): boolean {
|
|
254
|
-
if (setValue !== undefined) {
|
|
255
|
-
this.stopPropagationFlags = this.stopPropagationFlags || {};
|
|
256
|
-
this.stopPropagationFlags[eventName] = setValue;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
return this.stopPropagationFlags ? this.stopPropagationFlags[eventName] : false;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
interface EventHandlerInfo {
|
|
264
|
-
element: Element;
|
|
265
|
-
eventName: string;
|
|
266
|
-
eventHandlerId: number;
|
|
267
|
-
|
|
268
|
-
// The component whose tree includes the event handler attribute frame, *not* necessarily the
|
|
269
|
-
// same component that will be re-rendered after the event is handled (since we re-render the
|
|
270
|
-
// component that supplied the delegate, not the one that rendered the event handler frame)
|
|
271
|
-
renderingComponentId: number;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
function toLookup(items: string[]): { [key: string]: boolean } {
|
|
275
|
-
const result = {};
|
|
276
|
-
items.forEach((value) => {
|
|
277
|
-
result[value] = true;
|
|
278
|
-
});
|
|
279
|
-
return result;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
function eventIsDisabledOnElement(element: Element, eventName: string): boolean {
|
|
283
|
-
// We want to replicate the normal DOM event behavior that, for 'interactive' elements
|
|
284
|
-
// with a 'disabled' attribute, certain mouse events are suppressed
|
|
285
|
-
return (
|
|
286
|
-
(element instanceof HTMLButtonElement ||
|
|
287
|
-
element instanceof HTMLInputElement ||
|
|
288
|
-
element instanceof HTMLTextAreaElement ||
|
|
289
|
-
element instanceof HTMLSelectElement) &&
|
|
290
|
-
disableableEventNames.hasOwnProperty(eventName) &&
|
|
291
|
-
element.disabled
|
|
292
|
-
);
|
|
293
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export class EventFieldInfo {
|
|
2
|
-
constructor(public componentId: number, public fieldValue: string | boolean) {}
|
|
3
|
-
|
|
4
|
-
public static fromEvent(componentId: number, event: Event): EventFieldInfo | null {
|
|
5
|
-
const elem = event.target;
|
|
6
|
-
if (elem instanceof Element) {
|
|
7
|
-
const fieldData = getFormFieldData(elem);
|
|
8
|
-
if (fieldData) {
|
|
9
|
-
return new EventFieldInfo(componentId, fieldData.value);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// This event isn't happening on a form field that we can reverse-map back to some incoming attribute
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function getFormFieldData(elem: Element) {
|
|
19
|
-
// The logic in here should be the inverse of the logic in BrowserRenderer's tryApplySpecialProperty.
|
|
20
|
-
// That is, we're doing the reverse mapping, starting from an HTML property and reconstructing which
|
|
21
|
-
// "special" attribute would have been mapped to that property.
|
|
22
|
-
if (elem instanceof HTMLInputElement) {
|
|
23
|
-
return elem.type && elem.type.toLowerCase() === 'checkbox' ? { value: elem.checked } : { value: elem.value };
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (elem instanceof HTMLSelectElement || elem instanceof HTMLTextAreaElement) {
|
|
27
|
-
return { value: elem.value };
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
export class EventForDotNet<TData extends UIEventArgs> {
|
|
2
|
-
public constructor(public readonly type: EventArgsType, public readonly data: TData) {}
|
|
3
|
-
|
|
4
|
-
public static fromDOMEvent(event: Event): EventForDotNet<UIEventArgs> {
|
|
5
|
-
const element = event.target as Element;
|
|
6
|
-
switch (event.type) {
|
|
7
|
-
case 'input':
|
|
8
|
-
case 'change': {
|
|
9
|
-
if (isTimeBasedInput(element)) {
|
|
10
|
-
const normalizedValue = normalizeTimeBasedValue(element);
|
|
11
|
-
return new EventForDotNet<UIChangeEventArgs>('change', { type: event.type, value: normalizedValue });
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const targetIsCheckbox = isCheckbox(element);
|
|
15
|
-
const newValue = targetIsCheckbox ? !!element['checked'] : element['value'];
|
|
16
|
-
return new EventForDotNet<UIChangeEventArgs>('change', { type: event.type, value: newValue });
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
case 'copy':
|
|
20
|
-
case 'cut':
|
|
21
|
-
case 'paste':
|
|
22
|
-
return new EventForDotNet<UIClipboardEventArgs>('clipboard', { type: event.type });
|
|
23
|
-
|
|
24
|
-
case 'drag':
|
|
25
|
-
case 'dragend':
|
|
26
|
-
case 'dragenter':
|
|
27
|
-
case 'dragleave':
|
|
28
|
-
case 'dragover':
|
|
29
|
-
case 'dragstart':
|
|
30
|
-
case 'drop':
|
|
31
|
-
return new EventForDotNet<UIDragEventArgs>('drag', parseDragEvent(event));
|
|
32
|
-
|
|
33
|
-
case 'focus':
|
|
34
|
-
case 'blur':
|
|
35
|
-
case 'focusin':
|
|
36
|
-
case 'focusout':
|
|
37
|
-
return new EventForDotNet<UIFocusEventArgs>('focus', { type: event.type });
|
|
38
|
-
|
|
39
|
-
case 'keydown':
|
|
40
|
-
case 'keyup':
|
|
41
|
-
case 'keypress':
|
|
42
|
-
return new EventForDotNet<UIKeyboardEventArgs>('keyboard', parseKeyboardEvent(event as KeyboardEvent));
|
|
43
|
-
|
|
44
|
-
case 'contextmenu':
|
|
45
|
-
case 'click':
|
|
46
|
-
case 'mouseover':
|
|
47
|
-
case 'mouseout':
|
|
48
|
-
case 'mousemove':
|
|
49
|
-
case 'mousedown':
|
|
50
|
-
case 'mouseup':
|
|
51
|
-
case 'dblclick':
|
|
52
|
-
return new EventForDotNet<UIMouseEventArgs>('mouse', parseMouseEvent(event as MouseEvent));
|
|
53
|
-
|
|
54
|
-
case 'error':
|
|
55
|
-
return new EventForDotNet<UIErrorEventArgs>('error', parseErrorEvent(event as ErrorEvent));
|
|
56
|
-
|
|
57
|
-
case 'loadstart':
|
|
58
|
-
case 'timeout':
|
|
59
|
-
case 'abort':
|
|
60
|
-
case 'load':
|
|
61
|
-
case 'loadend':
|
|
62
|
-
case 'progress':
|
|
63
|
-
return new EventForDotNet<UIProgressEventArgs>('progress', parseProgressEvent(event as ProgressEvent));
|
|
64
|
-
|
|
65
|
-
case 'touchcancel':
|
|
66
|
-
case 'touchend':
|
|
67
|
-
case 'touchmove':
|
|
68
|
-
case 'touchenter':
|
|
69
|
-
case 'touchleave':
|
|
70
|
-
case 'touchstart':
|
|
71
|
-
return new EventForDotNet<UITouchEventArgs>('touch', parseTouchEvent(event as TouchEvent));
|
|
72
|
-
|
|
73
|
-
case 'gotpointercapture':
|
|
74
|
-
case 'lostpointercapture':
|
|
75
|
-
case 'pointercancel':
|
|
76
|
-
case 'pointerdown':
|
|
77
|
-
case 'pointerenter':
|
|
78
|
-
case 'pointerleave':
|
|
79
|
-
case 'pointermove':
|
|
80
|
-
case 'pointerout':
|
|
81
|
-
case 'pointerover':
|
|
82
|
-
case 'pointerup':
|
|
83
|
-
return new EventForDotNet<UIPointerEventArgs>('pointer', parsePointerEvent(event as PointerEvent));
|
|
84
|
-
|
|
85
|
-
case 'wheel':
|
|
86
|
-
case 'mousewheel':
|
|
87
|
-
return new EventForDotNet<UIWheelEventArgs>('wheel', parseWheelEvent(event as WheelEvent));
|
|
88
|
-
|
|
89
|
-
default:
|
|
90
|
-
return new EventForDotNet<UIEventArgs>('unknown', { type: event.type });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function parseDragEvent(event: any) {
|
|
96
|
-
return {
|
|
97
|
-
...parseMouseEvent(event),
|
|
98
|
-
dataTransfer: event.dataTransfer,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function parseWheelEvent(event: WheelEvent) {
|
|
103
|
-
return {
|
|
104
|
-
...parseMouseEvent(event),
|
|
105
|
-
deltaX: event.deltaX,
|
|
106
|
-
deltaY: event.deltaY,
|
|
107
|
-
deltaZ: event.deltaZ,
|
|
108
|
-
deltaMode: event.deltaMode,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function parseErrorEvent(event: ErrorEvent) {
|
|
113
|
-
return {
|
|
114
|
-
type: event.type,
|
|
115
|
-
message: event.message,
|
|
116
|
-
filename: event.filename,
|
|
117
|
-
lineno: event.lineno,
|
|
118
|
-
colno: event.colno,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function parseProgressEvent(event: ProgressEvent) {
|
|
123
|
-
return {
|
|
124
|
-
type: event.type,
|
|
125
|
-
lengthComputable: event.lengthComputable,
|
|
126
|
-
loaded: event.loaded,
|
|
127
|
-
total: event.total,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function parseTouchEvent(event: TouchEvent) {
|
|
132
|
-
function parseTouch(touchList: TouchList) {
|
|
133
|
-
const touches: UITouchPoint[] = [];
|
|
134
|
-
|
|
135
|
-
for (let i = 0; i < touchList.length; i++) {
|
|
136
|
-
const touch = touchList[i];
|
|
137
|
-
touches.push({
|
|
138
|
-
identifier: touch.identifier,
|
|
139
|
-
clientX: touch.clientX,
|
|
140
|
-
clientY: touch.clientY,
|
|
141
|
-
screenX: touch.screenX,
|
|
142
|
-
screenY: touch.screenY,
|
|
143
|
-
pageX: touch.pageX,
|
|
144
|
-
pageY: touch.pageY,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
return touches;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return {
|
|
151
|
-
type: event.type,
|
|
152
|
-
detail: event.detail,
|
|
153
|
-
touches: parseTouch(event.touches),
|
|
154
|
-
targetTouches: parseTouch(event.targetTouches),
|
|
155
|
-
changedTouches: parseTouch(event.changedTouches),
|
|
156
|
-
ctrlKey: event.ctrlKey,
|
|
157
|
-
shiftKey: event.shiftKey,
|
|
158
|
-
altKey: event.altKey,
|
|
159
|
-
metaKey: event.metaKey,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function parseKeyboardEvent(event: KeyboardEvent) {
|
|
164
|
-
return {
|
|
165
|
-
type: event.type,
|
|
166
|
-
key: event.key,
|
|
167
|
-
code: event.code,
|
|
168
|
-
location: event.location,
|
|
169
|
-
repeat: event.repeat,
|
|
170
|
-
ctrlKey: event.ctrlKey,
|
|
171
|
-
shiftKey: event.shiftKey,
|
|
172
|
-
altKey: event.altKey,
|
|
173
|
-
metaKey: event.metaKey,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function parsePointerEvent(event: PointerEvent) {
|
|
178
|
-
return {
|
|
179
|
-
...parseMouseEvent(event),
|
|
180
|
-
pointerId: event.pointerId,
|
|
181
|
-
width: event.width,
|
|
182
|
-
height: event.height,
|
|
183
|
-
pressure: event.pressure,
|
|
184
|
-
tiltX: event.tiltX,
|
|
185
|
-
tiltY: event.tiltY,
|
|
186
|
-
pointerType: event.pointerType,
|
|
187
|
-
isPrimary: event.isPrimary,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
function parseMouseEvent(event: MouseEvent) {
|
|
192
|
-
return {
|
|
193
|
-
type: event.type,
|
|
194
|
-
detail: event.detail,
|
|
195
|
-
screenX: event.screenX,
|
|
196
|
-
screenY: event.screenY,
|
|
197
|
-
clientX: event.clientX,
|
|
198
|
-
clientY: event.clientY,
|
|
199
|
-
button: event.button,
|
|
200
|
-
buttons: event.buttons,
|
|
201
|
-
ctrlKey: event.ctrlKey,
|
|
202
|
-
shiftKey: event.shiftKey,
|
|
203
|
-
altKey: event.altKey,
|
|
204
|
-
metaKey: event.metaKey,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function isCheckbox(element: Element | null): boolean {
|
|
209
|
-
return !!element && element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const timeBasedInputs = ['date', 'datetime-local', 'month', 'time', 'week'];
|
|
213
|
-
|
|
214
|
-
function isTimeBasedInput(element: Element): element is HTMLInputElement {
|
|
215
|
-
return timeBasedInputs.indexOf(element.getAttribute('type')!) !== -1;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function normalizeTimeBasedValue(element: HTMLInputElement): string {
|
|
219
|
-
const value = element.value;
|
|
220
|
-
const type = element.type;
|
|
221
|
-
switch (type) {
|
|
222
|
-
case 'date':
|
|
223
|
-
case 'datetime-local':
|
|
224
|
-
case 'month':
|
|
225
|
-
return value;
|
|
226
|
-
case 'time':
|
|
227
|
-
return value.length === 5 ? value + ':00' : value; // Convert hh:mm to hh:mm:00
|
|
228
|
-
case 'week':
|
|
229
|
-
// For now we are not going to normalize input type week as it is not trivial
|
|
230
|
-
return value;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
throw new Error(`Invalid element type '${type}'.`);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// The following interfaces must be kept in sync with the UIEventArgs C# classes
|
|
237
|
-
|
|
238
|
-
export type EventArgsType =
|
|
239
|
-
| 'change'
|
|
240
|
-
| 'clipboard'
|
|
241
|
-
| 'drag'
|
|
242
|
-
| 'error'
|
|
243
|
-
| 'focus'
|
|
244
|
-
| 'keyboard'
|
|
245
|
-
| 'mouse'
|
|
246
|
-
| 'pointer'
|
|
247
|
-
| 'progress'
|
|
248
|
-
| 'touch'
|
|
249
|
-
| 'unknown'
|
|
250
|
-
| 'wheel';
|
|
251
|
-
|
|
252
|
-
export interface UIEventArgs {
|
|
253
|
-
type: string;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
interface UIChangeEventArgs extends UIEventArgs {
|
|
257
|
-
value: string | boolean;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
interface UIClipboardEventArgs extends UIEventArgs {}
|
|
261
|
-
|
|
262
|
-
interface UIDragEventArgs extends UIEventArgs {
|
|
263
|
-
detail: number;
|
|
264
|
-
dataTransfer: UIDataTransfer;
|
|
265
|
-
screenX: number;
|
|
266
|
-
screenY: number;
|
|
267
|
-
clientX: number;
|
|
268
|
-
clientY: number;
|
|
269
|
-
button: number;
|
|
270
|
-
buttons: number;
|
|
271
|
-
ctrlKey: boolean;
|
|
272
|
-
shiftKey: boolean;
|
|
273
|
-
altKey: boolean;
|
|
274
|
-
metaKey: boolean;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
interface UIDataTransfer {
|
|
278
|
-
dropEffect: string;
|
|
279
|
-
effectAllowed: string;
|
|
280
|
-
files: string[];
|
|
281
|
-
items: UIDataTransferItem[];
|
|
282
|
-
types: string[];
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
interface UIDataTransferItem {
|
|
286
|
-
kind: string;
|
|
287
|
-
type: string;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
interface UIErrorEventArgs extends UIEventArgs {
|
|
291
|
-
message: string;
|
|
292
|
-
filename: string;
|
|
293
|
-
lineno: number;
|
|
294
|
-
colno: number;
|
|
295
|
-
|
|
296
|
-
// omitting 'error' here since we'd have to serialize it, and it's not clear we will want to
|
|
297
|
-
// do that. https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
interface UIFocusEventArgs extends UIEventArgs {}
|
|
301
|
-
|
|
302
|
-
interface UIKeyboardEventArgs extends UIEventArgs {
|
|
303
|
-
key: string;
|
|
304
|
-
code: string;
|
|
305
|
-
location: number;
|
|
306
|
-
repeat: boolean;
|
|
307
|
-
ctrlKey: boolean;
|
|
308
|
-
shiftKey: boolean;
|
|
309
|
-
altKey: boolean;
|
|
310
|
-
metaKey: boolean;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
interface UIMouseEventArgs extends UIEventArgs {
|
|
314
|
-
detail: number;
|
|
315
|
-
screenX: number;
|
|
316
|
-
screenY: number;
|
|
317
|
-
clientX: number;
|
|
318
|
-
clientY: number;
|
|
319
|
-
button: number;
|
|
320
|
-
buttons: number;
|
|
321
|
-
ctrlKey: boolean;
|
|
322
|
-
shiftKey: boolean;
|
|
323
|
-
altKey: boolean;
|
|
324
|
-
metaKey: boolean;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
interface UIPointerEventArgs extends UIMouseEventArgs {
|
|
328
|
-
pointerId: number;
|
|
329
|
-
width: number;
|
|
330
|
-
height: number;
|
|
331
|
-
pressure: number;
|
|
332
|
-
tiltX: number;
|
|
333
|
-
tiltY: number;
|
|
334
|
-
pointerType: string;
|
|
335
|
-
isPrimary: boolean;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
interface UIProgressEventArgs extends UIEventArgs {
|
|
339
|
-
lengthComputable: boolean;
|
|
340
|
-
loaded: number;
|
|
341
|
-
total: number;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
interface UITouchEventArgs extends UIEventArgs {
|
|
345
|
-
detail: number;
|
|
346
|
-
touches: UITouchPoint[];
|
|
347
|
-
targetTouches: UITouchPoint[];
|
|
348
|
-
changedTouches: UITouchPoint[];
|
|
349
|
-
ctrlKey: boolean;
|
|
350
|
-
shiftKey: boolean;
|
|
351
|
-
altKey: boolean;
|
|
352
|
-
metaKey: boolean;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
interface UITouchPoint {
|
|
356
|
-
identifier: number;
|
|
357
|
-
screenX: number;
|
|
358
|
-
screenY: number;
|
|
359
|
-
clientX: number;
|
|
360
|
-
clientY: number;
|
|
361
|
-
pageX: number;
|
|
362
|
-
pageY: number;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
interface UIWheelEventArgs extends UIMouseEventArgs {
|
|
366
|
-
deltaX: number;
|
|
367
|
-
deltaY: number;
|
|
368
|
-
deltaZ: number;
|
|
369
|
-
deltaMode: number;
|
|
370
|
-
}
|