mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-23 10:07:35 +00:00
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
// TODO: Merge with the Webamp emitter
|
|
export default class Emitter {
|
|
_hooks: { [eventName: string]: Array<(...args: any[]) => void> };
|
|
_globalHooks: Array<(eventName: string, ...args: any[]) => void>;
|
|
constructor() {
|
|
this._hooks = {};
|
|
// TODO: Rename this property
|
|
this._globalHooks = [];
|
|
}
|
|
|
|
listen(eventName: string, cb: (...args: any[]) => void) {
|
|
if (this._hooks[eventName] == null) {
|
|
this._hooks[eventName] = [];
|
|
}
|
|
this._hooks[eventName].push(cb);
|
|
return () => {
|
|
this._hooks[eventName] = this._hooks[eventName].filter(
|
|
hookCb => hookCb !== cb
|
|
);
|
|
};
|
|
}
|
|
|
|
trigger(eventName: string, ...args: any[]) {
|
|
this._globalHooks.map(cb => cb(eventName, ...args));
|
|
if (this._hooks[eventName] == null) {
|
|
return;
|
|
}
|
|
this._hooks[eventName].map(cb => cb(...args));
|
|
}
|
|
|
|
listenToAll(cb: (eventName: string, ...args: any[]) => void) {
|
|
this._globalHooks.push(cb);
|
|
return () => {
|
|
this._globalHooks = this._globalHooks.filter(hookCb => hookCb !== cb);
|
|
};
|
|
}
|
|
|
|
dispose() {
|
|
// Note: This will cause any future trigger or hook to cause a runtime error.
|
|
this._hooks = {};
|
|
this._globalHooks = [];
|
|
}
|
|
}
|