]>
Commit | Line | Data |
---|---|---|
e89eef94 PO |
1 | /* |
2 | * noVNC: HTML5 VNC client | |
3 | * Copyright 2017 Pierre Ossman for Cendio AB | |
4 | * Licensed under MPL 2.0 (see LICENSE.txt) | |
5 | * | |
6 | * See README.md for usage and integration instructions. | |
7 | */ | |
8 | ||
0e4808bf JD |
9 | export default class EventTargetMixin { |
10 | constructor() { | |
11 | this._listeners = null; | |
12 | } | |
e89eef94 | 13 | |
0e4808bf | 14 | addEventListener(type, callback) { |
e89eef94 PO |
15 | if (!this._listeners) { |
16 | this._listeners = new Map(); | |
17 | } | |
18 | if (!this._listeners.has(type)) { | |
19 | this._listeners.set(type, new Set()); | |
20 | } | |
21 | this._listeners.get(type).add(callback); | |
0e4808bf | 22 | } |
e89eef94 | 23 | |
0e4808bf | 24 | removeEventListener(type, callback) { |
e89eef94 PO |
25 | if (!this._listeners || !this._listeners.has(type)) { |
26 | return; | |
27 | } | |
28 | this._listeners.get(type).delete(callback); | |
0e4808bf | 29 | } |
e89eef94 | 30 | |
0e4808bf | 31 | dispatchEvent(event) { |
e89eef94 PO |
32 | if (!this._listeners || !this._listeners.has(event.type)) { |
33 | return true; | |
34 | } | |
651c23ec | 35 | this._listeners.get(event.type).forEach((callback) => { |
e89eef94 PO |
36 | callback.call(this, event); |
37 | }, this); | |
38 | return !event.defaultPrevented; | |
0e4808bf JD |
39 | } |
40 | } |