From 0ac94c93ffb154c672df2982b1fded1b5c64ae44 Mon Sep 17 00:00:00 2001 From: Kevin Schmidt Date: Wed, 19 Sep 2018 13:24:44 -0600 Subject: [PATCH 1/2] Fix TypeScript errors managing ol_lm on event targets --- src/ol/events.js | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/ol/events.js b/src/ol/events.js index b52e17d2cb..a90ca99ac5 100644 --- a/src/ol/events.js +++ b/src/ol/events.js @@ -78,27 +78,36 @@ export function findListener(listeners, listener, opt_this, opt_setDeleteIndex) * @return {Array|undefined} Listeners. */ export function getListeners(target, type) { - const listenerMap = target.ol_lm; + const listenerMap = getListenerMap(target); return listenerMap ? listenerMap[type] : undefined; } /** - * Get the lookup of listeners. If one does not exist on the target, it is - * created. - * @param {import("./events/Target.js").EventTargetLike} target Target. + * Get the lookup of listeners. + * @param {Object} target Target. + * @param {boolean=} opt_create If a map should be created if it doesn't exist. * @return {!Object>} Map of * listeners by event type. */ -function getListenerMap(target) { +function getListenerMap(target, opt_create) { let listenerMap = target.ol_lm; - if (!listenerMap) { + if (!listenerMap && opt_create) { listenerMap = target.ol_lm = {}; } 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 * listener objects will be removed, and if no listeners remain in the listener @@ -114,11 +123,11 @@ function removeListeners(target, type) { clear(listeners[i]); } listeners.length = 0; - const listenerMap = target.ol_lm; + const listenerMap = getListenerMap(target); if (listenerMap) { delete listenerMap[type]; 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. */ export function listen(target, type, listener, opt_this, opt_once) { - const listenerMap = getListenerMap(target); + const listenerMap = getListenerMap(target, true); let listeners = listenerMap[type]; if (!listeners) { listeners = listenerMap[type] = []; @@ -252,7 +261,9 @@ export function unlistenByKey(key) { */ export function unlistenAll(target) { const listenerMap = getListenerMap(target); - for (const type in listenerMap) { - removeListeners(target, type); + if (listenerMap) { + for (const type in listenerMap) { + removeListeners(target, type); + } } } From 34323c06182eb8d40239ddf230d471bf85d931be Mon Sep 17 00:00:00 2001 From: Kevin Schmidt Date: Wed, 19 Sep 2018 14:22:20 -0600 Subject: [PATCH 2/2] Fix TypeScript error in Target --- src/ol/events/Target.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ol/events/Target.js b/src/ol/events/Target.js index 146a13948b..c9289f506e 100644 --- a/src/ol/events/Target.js +++ b/src/ol/events/Target.js @@ -72,7 +72,8 @@ class Target extends Disposable { * Object with a `type` property. * * @param {{type: string, - * target: (EventTargetLike|undefined)}| + * target: (EventTargetLike|undefined), + * propagationStopped: (boolean|undefined)}| * import("./Event.js").default|string} event Event object. * @return {boolean|undefined} `false` if anyone called preventDefault on the * event object or if any of the listeners returned false.