main
1/*
2 * noVNC: HTML5 VNC client
3 * Copyright (C) 2019 The noVNC authors
4 * Licensed under MPL 2.0 (see LICENSE.txt)
5 *
6 * See README.md for usage and integration instructions.
7 */
8
9export default class EventTargetMixin {
10 constructor() {
11 this._listeners = new Map();
12 }
13
14 addEventListener(type, callback) {
15 if (!this._listeners.has(type)) {
16 this._listeners.set(type, new Set());
17 }
18 this._listeners.get(type).add(callback);
19 }
20
21 removeEventListener(type, callback) {
22 if (this._listeners.has(type)) {
23 this._listeners.get(type).delete(callback);
24 }
25 }
26
27 dispatchEvent(event) {
28 if (!this._listeners.has(event.type)) {
29 return true;
30 }
31 this._listeners.get(event.type)
32 .forEach(callback => callback.call(this, event));
33 return !event.defaultPrevented;
34 }
35}