From e099257461014e06b7703db6f5251f4123558ad4 Mon Sep 17 00:00:00 2001 From: Lydia de Jongh Date: Tue, 10 Mar 2020 12:51:05 +0100 Subject: [PATCH] Add support for EventListener Object See: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener Support for native javascript eventListener.handleEvent() Typedef not correct yet. --- src/ol/events.js | 2 +- src/ol/events/Target.js | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ol/events.js b/src/ol/events.js index 5a64a185ce..de13619cc5 100644 --- a/src/ol/events.js +++ b/src/ol/events.js @@ -18,7 +18,7 @@ import {clear} from './obj.js'; * Listener function. This function is called with an event object as argument. * When the function returns `false`, event propagation will stop. * - * @typedef {function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction + * @typedef {EventListener|function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction * @api */ diff --git a/src/ol/events/Target.js b/src/ol/events/Target.js index 766a954479..5e84ef10b2 100644 --- a/src/ol/events/Target.js +++ b/src/ol/events/Target.js @@ -107,6 +107,17 @@ class Target extends Disposable { this.pendingRemovals_[type] = 0; } ++this.dispatching_[type]; + for (let i = 0, ii = listeners.length; i < ii; ++i) { + if (listeners[i].handleEvent) { + propagate = listeners[i].handleEvent(evt); + } else { + propagate = listeners[i].call(this, evt); + } + if (propagate === false || evt.propagationStopped) { + propagate = false; + break; + } + } for (let i = 0, ii = listeners.length; i < ii; ++i) { if (listeners[i].call(this, evt) === false || evt.propagationStopped) { propagate = false;