@here/harp-mapview
Version:
Functionality needed to render a map.
127 lines • 3.97 kB
JavaScript
;
/*
* Copyright (C) 2020-2021 HERE Europe B.V.
* Licensed under Apache 2.0, see full license in LICENSE
* SPDX-License-Identifier: Apache-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventDispatcher = void 0;
/**
* JavaScript events for custom objects. Stores all listeners to allow removing all listeners for
* housekeeping.
*
* Will be replaced by `THREE.EventDispatcher` once https://github.com/mrdoob/three.js/pull/19844
* is released.
*/
class EventDispatcher {
constructor() {
this.m_listeners = new Map();
}
/**
* Destroy this `EventDispatcher` instance.
*
* Unregister all event handlers used. This is method should be called when you stop
* using `EventDispatcher`.
*/
dispose() {
this.removeAllEventListeners();
}
/**
* Checks if listener is added to an event type.
*
* @param type - The type of event to listen to.
* @param listener - The function that gets called when the event is fired.
*/
hasEventListener(type, listener) {
const listeners = this.m_listeners.get(type);
if (listeners === undefined) {
return false;
}
return listener !== undefined ? listeners.includes(listener) : true;
}
/**
* Add a new event listener to the event type.
*
* @param type - The type of event to listen to.
* @param listener - The function that gets called when the event is fired.
*/
addEventListener(type, listener) {
let listeners = this.m_listeners.get(type);
if (listeners === undefined) {
listeners = [];
this.m_listeners.set(type, listeners);
}
if (!listeners.includes(listener)) {
listeners.push(listener);
}
}
/**
* Remove the listener from the event type.
*
* @param type - The type of event to listen to.
* @param listener - The function that gets called when the event is fired. If the value is
* `undefined`, all listeners will be removed.
*/
removeEventListener(type, listener) {
const listeners = this.m_listeners.get(type);
if (listeners === undefined) {
return;
}
if (listener === undefined) {
this.m_listeners.delete(type);
}
else {
const index = listeners.indexOf(listener);
if (index !== -1) {
listeners.splice(index, 1);
if (listeners.length === 0) {
this.m_listeners.delete(type);
}
}
}
}
/**
* Remove all event listeners for housekeeping.
*/
removeAllEventListeners() {
const events = Array.from(this.m_listeners.keys());
for (const event of events) {
this.removeEventListener(event);
}
}
/**
* Retrieve the registered event types.
*
* @returns Array of event types.
*/
get eventTypes() {
return Array.from(this.m_listeners.keys());
}
/**
* Retrieve the registered listeners to the specified event.
*
* @param type - The type of event to listen to.
* @returns Array of event listeners.
*/
listeners(type) {
return this.m_listeners.get(type);
}
/**
* Dispatch the event to the registered listeners.
*
* @param event - The event to dispatch.
*/
dispatchEvent(event) {
const listeners = this.m_listeners.get(event.type);
if (listeners !== undefined) {
event.target = this;
// Make a copy, in case listeners are removed while iterating.
const array = listeners.slice(0);
for (let i = 0, l = array.length; i < l; i++) {
array[i].call(this, event);
}
}
}
}
exports.EventDispatcher = EventDispatcher;
//# sourceMappingURL=EventDispatcher.js.map