Files
Chamilo/web/assets/i18next/src/EventEmitter.js
2025-04-10 11:37:29 +02:00

42 lines
910 B
JavaScript

class EventEmitter {
constructor() {
this.observers = {};
}
on(events, listener) {
events.split(' ').forEach(event => {
this.observers[event] = this.observers[event] || [];
this.observers[event].push(listener);
});
return this;
}
off(event, listener) {
if (!this.observers[event]) return;
if (!listener) {
delete this.observers[event];
return;
}
this.observers[event] = this.observers[event].filter(l => l !== listener);
}
emit(event, ...args) {
if (this.observers[event]) {
const cloned = [].concat(this.observers[event]);
cloned.forEach(observer => {
observer(...args);
});
}
if (this.observers['*']) {
const cloned = [].concat(this.observers['*']);
cloned.forEach(observer => {
observer.apply(observer, [event, ...args]);
});
}
}
}
export default EventEmitter;