]> git.proxmox.com Git - mirror_xterm.js.git/blob - src/EventEmitter.ts
Remove remaining removeListener ref
[mirror_xterm.js.git] / src / EventEmitter.ts
1 /**
2 * @license MIT
3 */
4
5 interface ListenerType {
6 (): void;
7 listener?: () => void;
8 };
9
10 export class EventEmitter {
11 private _events: {[type: string]: ListenerType[]};
12
13 constructor() {
14 this._events = {};
15 }
16
17 public on(type, listener): void {
18 this._events[type] = this._events[type] || [];
19 this._events[type].push(listener);
20 }
21
22 public off(type, listener): void {
23 if (!this._events[type]) {
24 return;
25 }
26
27 let obj = this._events[type];
28 let i = obj.length;
29
30 while (i--) {
31 if (obj[i] === listener || obj[i].listener === listener) {
32 obj.splice(i, 1);
33 return;
34 }
35 }
36 }
37
38 public removeAllListeners(type): void {
39 if (this._events[type]) {
40 delete this._events[type];
41 }
42 }
43
44 public once(type, listener): any {
45 function on() {
46 let args = Array.prototype.slice.call(arguments);
47 this.off(type, on);
48 return listener.apply(this, args);
49 }
50 (<any>on).listener = listener;
51 return this.on(type, on);
52 }
53
54 public emit(type): void {
55 if (!this._events[type]) {
56 return;
57 }
58
59 let args = Array.prototype.slice.call(arguments, 1);
60 let obj = this._events[type];
61
62 for (let i = 0; i < obj.length; i++) {
63 obj[i].apply(this, args);
64 }
65 }
66
67 public listeners(type): ListenerType[] {
68 return this._events[type] || [];
69 }
70 }