You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.6 KiB
JavaScript

class EventEmitter {
#delegate;
constructor() {
this.#delegate = document.createDocumentFragment();
}
/**
* Appends an event listener for events whose type attribute value is type. The callback
* argument sets the callback that will be invoked when the event is dispatched.
*
* The options argument sets listener-specific options.
*
* When set to true, options's passive indicates that the callback will not cancel
* the event by invoking preventDefault().
*
* When set to true, options's once indicates that the callback will only be invoked
* once after which the event listener will be removed.
*
* @param {string} type
* @param {EventListener} callback
* @param {{once?: boolean, passive?: boolean} | undefined} options
*/
addEventListener(type, callback, options = undefined) {
this.#delegate.addEventListener(type, callback, options);
}
/**
* Removes the event listener in target's event listener list with the same type, callback, and options.
* @param {string} type
* @param {EventListener} callback
* @param {{once?: boolean, passive?: boolean} | undefined} options
*/
removeEventListener(type, callback, options = undefined) {
this.#delegate.removeEventListener(type, callback, options);
}
/**
* Dispatches a synthetic event event to target and returns true if either event's cancelable
* attribute value is false or its preventDefault() method was not invoked, and false otherwise.
* @param {Event} event
* @returns {boolean}
*/
dispatchEvent(event) {
return this.#delegate.dispatchEvent(event);
}
}