Merge pull request #8680 from schmidtk/ts-events-fixes
TypeScript fixes for ol/events
This commit is contained in:
@@ -78,27 +78,36 @@ export function findListener(listeners, listener, opt_this, opt_setDeleteIndex)
|
||||
* @return {Array<EventsKey>|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<string, Array<EventsKey>>} 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user