forked from NativeScript/canvas
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEventTarget.ts
More file actions
75 lines (62 loc) · 1.79 KB
/
EventTarget.ts
File metadata and controls
75 lines (62 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
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
import { Observable } from '@nativescript/core';
export class EventTarget {
_emitter?: WeakRef<Observable>;
addEventListener(event: string, handler: any, options: AddEventListenerOptions = {}) {
if (typeof options === 'boolean') {
options = { capture: options };
}
const { capture, once } = options;
if (capture) {
// debug("Bubble propagation is not supported");
}
if (once) {
const oldHandler = handler;
const self = this;
handler = (...args: any) => {
oldHandler.call(null, ...args);
self.removeEventListener(event, handler);
};
}
let emitter: Observable;
if (global.isAndroid) {
emitter = this._emitter?.get?.();
}
if (global.isIOS) {
emitter = this._emitter?.deref?.();
}
if (emitter !== null && emitter !== undefined) {
emitter.addEventListener(event, handler, this);
}
}
removeEventListener(event: string, handler?: any) {
let emitter: Observable;
if (global.isAndroid) {
emitter = this._emitter?.get?.();
}
if (global.isIOS) {
emitter = this._emitter?.deref?.();
}
if (emitter !== null && emitter !== undefined) {
emitter.removeEventListener(event, handler);
}
}
/**
* Dispatches an event to this EventTarget.
* https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent
* @param event
* @returns false if event is cancelable, and at least one of the event handlers which received event called Event.preventDefault(). Otherwise true.
*/
dispatchEvent(event): boolean {
let emitter: Observable;
if (global.isAndroid) {
emitter = this._emitter?.get?.();
}
if (global.isIOS) {
emitter = this._emitter?.deref?.();
}
if (emitter !== null && emitter !== undefined) {
emitter.notify({ ...event, eventName: event.type, object: emitter });
}
return !event?.defaultPrevented;
}
}