Fix TypeScript errors managing ol_lm on event targets
This commit is contained in:
+22
-11
@@ -78,27 +78,36 @@ export function findListener(listeners, listener, opt_this, opt_setDeleteIndex)
|
|||||||
* @return {Array<EventsKey>|undefined} Listeners.
|
* @return {Array<EventsKey>|undefined} Listeners.
|
||||||
*/
|
*/
|
||||||
export function getListeners(target, type) {
|
export function getListeners(target, type) {
|
||||||
const listenerMap = target.ol_lm;
|
const listenerMap = getListenerMap(target);
|
||||||
return listenerMap ? listenerMap[type] : undefined;
|
return listenerMap ? listenerMap[type] : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the lookup of listeners. If one does not exist on the target, it is
|
* Get the lookup of listeners.
|
||||||
* created.
|
* @param {Object} target Target.
|
||||||
* @param {import("./events/Target.js").EventTargetLike} target Target.
|
* @param {boolean=} opt_create If a map should be created if it doesn't exist.
|
||||||
* @return {!Object<string, Array<EventsKey>>} Map of
|
* @return {!Object<string, Array<EventsKey>>} Map of
|
||||||
* listeners by event type.
|
* listeners by event type.
|
||||||
*/
|
*/
|
||||||
function getListenerMap(target) {
|
function getListenerMap(target, opt_create) {
|
||||||
let listenerMap = target.ol_lm;
|
let listenerMap = target.ol_lm;
|
||||||
if (!listenerMap) {
|
if (!listenerMap && opt_create) {
|
||||||
listenerMap = target.ol_lm = {};
|
listenerMap = target.ol_lm = {};
|
||||||
}
|
}
|
||||||
return listenerMap;
|
return listenerMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the listener map from a target.
|
||||||
|
* @param {Object} target Target.
|
||||||
|
*/
|
||||||
|
function removeListenerMap(target) {
|
||||||
|
delete target.ol_lm;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean up all listener objects of the given type. All properties on the
|
* Clean up all listener objects of the given type. All properties on the
|
||||||
* listener objects will be removed, and if no listeners remain in the listener
|
* listener objects will be removed, and if no listeners remain in the listener
|
||||||
@@ -114,11 +123,11 @@ function removeListeners(target, type) {
|
|||||||
clear(listeners[i]);
|
clear(listeners[i]);
|
||||||
}
|
}
|
||||||
listeners.length = 0;
|
listeners.length = 0;
|
||||||
const listenerMap = target.ol_lm;
|
const listenerMap = getListenerMap(target);
|
||||||
if (listenerMap) {
|
if (listenerMap) {
|
||||||
delete listenerMap[type];
|
delete listenerMap[type];
|
||||||
if (Object.keys(listenerMap).length === 0) {
|
if (Object.keys(listenerMap).length === 0) {
|
||||||
delete target.ol_lm;
|
removeListenerMap(target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,7 +150,7 @@ function removeListeners(target, type) {
|
|||||||
* @return {EventsKey} Unique key for the listener.
|
* @return {EventsKey} Unique key for the listener.
|
||||||
*/
|
*/
|
||||||
export function listen(target, type, listener, opt_this, opt_once) {
|
export function listen(target, type, listener, opt_this, opt_once) {
|
||||||
const listenerMap = getListenerMap(target);
|
const listenerMap = getListenerMap(target, true);
|
||||||
let listeners = listenerMap[type];
|
let listeners = listenerMap[type];
|
||||||
if (!listeners) {
|
if (!listeners) {
|
||||||
listeners = listenerMap[type] = [];
|
listeners = listenerMap[type] = [];
|
||||||
@@ -252,7 +261,9 @@ export function unlistenByKey(key) {
|
|||||||
*/
|
*/
|
||||||
export function unlistenAll(target) {
|
export function unlistenAll(target) {
|
||||||
const listenerMap = getListenerMap(target);
|
const listenerMap = getListenerMap(target);
|
||||||
for (const type in listenerMap) {
|
if (listenerMap) {
|
||||||
removeListeners(target, type);
|
for (const type in listenerMap) {
|
||||||
|
removeListeners(target, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user