2 * Copyright (c) 2019 The xterm.js authors. All rights reserved.
6 import { IDisposable } from 'common/Types';
8 interface IListener<T> {
12 export interface IEvent<T> {
13 (listener: (e: T) => any): IDisposable;
16 export interface IEventEmitter<T> {
21 export class EventEmitter<T> implements IEventEmitter<T> {
22 private _listeners: IListener<T>[] = [];
23 private _event?: IEvent<T>;
25 public get event(): IEvent<T> {
27 this._event = (listener: (e: T) => any) => {
28 this._listeners.push(listener);
31 for (let i = 0; i < this._listeners.length; i++) {
32 if (this._listeners[i] === listener) {
33 this._listeners.splice(i, 1);
45 public fire(data: T): void {
46 const queue: IListener<T>[] = [];
47 for (let i = 0; i < this._listeners.length; i++) {
48 queue.push(this._listeners[i]);
50 for (let i = 0; i < queue.length; i++) {
51 queue[i].call(undefined, data);