37 lines
880 B
JavaScript
37 lines
880 B
JavaScript
/**
|
|
* @abstract
|
|
* @implements {EventTarget}
|
|
*/
|
|
export class AbstractEventTarget {
|
|
constructor() {
|
|
this.listeners = {};
|
|
}
|
|
|
|
addEventListener(type, callback, _options) {
|
|
if (!this.listeners[type]) {
|
|
this.listeners[type] = [];
|
|
}
|
|
this.listeners[type].push(callback);
|
|
}
|
|
|
|
dispatchEvent(event) {
|
|
if (!this.listeners[event.type] || this.listeners[event.type].length === 0) {
|
|
return true;
|
|
}
|
|
this.listeners[event.type].forEach(listener => {
|
|
listener(event);
|
|
});
|
|
return true;
|
|
}
|
|
|
|
removeEventListener(type, callback, _options) {
|
|
if (!this.listeners[type]) {
|
|
return;
|
|
}
|
|
const index = this.listeners[type].indexOf(callback);
|
|
if (index !== -1) {
|
|
this.listeners[type].splice(index, 1);
|
|
}
|
|
}
|
|
}
|