1 | export class EventDispatcher {
|
2 | constructor() {
|
3 | this._listeners = new Map();
|
4 | }
|
5 | addEventListener(type, listener) {
|
6 | var _a;
|
7 | this.removeEventListener(type, listener);
|
8 | if (!this._listeners.get(type)) {
|
9 | this._listeners.set(type, []);
|
10 | }
|
11 | (_a = this._listeners.get(type)) === null || _a === void 0 ? void 0 : _a.push(listener);
|
12 | }
|
13 | dispatchEvent(type, args) {
|
14 | var _a;
|
15 | (_a = this._listeners.get(type)) === null || _a === void 0 ? void 0 : _a.forEach((handler) => handler(args));
|
16 | }
|
17 | hasEventListener(type) {
|
18 | return !!this._listeners.get(type);
|
19 | }
|
20 | removeAllEventListeners(type) {
|
21 | if (!type) {
|
22 | this._listeners = new Map();
|
23 | }
|
24 | else {
|
25 | this._listeners.delete(type);
|
26 | }
|
27 | }
|
28 | removeEventListener(type, listener) {
|
29 | const arr = this._listeners.get(type);
|
30 | if (!arr) {
|
31 | return;
|
32 | }
|
33 | const length = arr.length, idx = arr.indexOf(listener);
|
34 | if (idx < 0) {
|
35 | return;
|
36 | }
|
37 | if (length === 1) {
|
38 | this._listeners.delete(type);
|
39 | }
|
40 | else {
|
41 | arr.splice(idx, 1);
|
42 | }
|
43 | }
|
44 | }
|