Merge pull request #8680 from schmidtk/ts-events-fixes
TypeScript fixes for ol/events
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ class Target extends Disposable {
|
|||||||
* Object with a `type` property.
|
* Object with a `type` property.
|
||||||
*
|
*
|
||||||
* @param {{type: string,
|
* @param {{type: string,
|
||||||
* target: (EventTargetLike|undefined)}|
|
* target: (EventTargetLike|undefined),
|
||||||
|
* propagationStopped: (boolean|undefined)}|
|
||||||
* import("./Event.js").default|string} event Event object.
|
* import("./Event.js").default|string} event Event object.
|
||||||
* @return {boolean|undefined} `false` if anyone called preventDefault on the
|
* @return {boolean|undefined} `false` if anyone called preventDefault on the
|
||||||
* event object or if any of the listeners returned false.
|
* event object or if any of the listeners returned false.
|
||||||
|
|||||||
Reference in New Issue
Block a user