From ee653a8e0da20fbe6634b552c63f288b11b830a5 Mon Sep 17 00:00:00 2001 From: Edward Nash Date: Tue, 22 Oct 2019 08:33:31 +0200 Subject: [PATCH 1/2] Add regression test for event target on Control * Check possible name collision of target element with EventTarget --- test/spec/ol/control/control.test.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/spec/ol/control/control.test.js b/test/spec/ol/control/control.test.js index 1d94113d33..1d45772a2a 100644 --- a/test/spec/ol/control/control.test.js +++ b/test/spec/ol/control/control.test.js @@ -54,3 +54,25 @@ describe('ol.control.Control\'s target', function() { }); }); }); + +describe('ol.control.Control\'s event target', function() { + it('is the Control when the Control uses the default target', function() { + const ctrl = new Control({element: document.createElement('div')}); + ctrl.on('test-event', function(e) { + expect(e.target).to.be(ctrl); + }); + ctrl.dispatchEvent('test-event'); + ctrl.dispose(); + }); + it('is the Control when the Control has a custom target', function() { + const ctrl = new Control({ + element: document.createElement('div'), + target: document.createElement('div') + }); + ctrl.on('test-event', function(e) { + expect(e.target).to.be(ctrl); + }); + ctrl.dispatchEvent('test-event'); + ctrl.dispose(); + }); +}); From 9eb4816b27916334b4eface33b4c5c983c5fd999 Mon Sep 17 00:00:00 2001 From: Edward Nash Date: Tue, 22 Oct 2019 09:14:07 +0200 Subject: [PATCH 2/2] Fix property name collision target_ with Control * As described in #10158, Control uses the property target_ for a custom parent HTMLElement, leading to Events on the Control being dispatched with that as the target and not the Control itself. * Solved by renaming the target_ property on Target to eventTarget_ --- src/ol/events/Target.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/events/Target.js b/src/ol/events/Target.js index 04c65b846a..797f72610a 100644 --- a/src/ol/events/Target.js +++ b/src/ol/events/Target.js @@ -40,7 +40,7 @@ class Target extends Disposable { * @private * @type {*} */ - this.target_ = opt_target; + this.eventTarget_ = opt_target; /** * @private @@ -96,7 +96,7 @@ class Target extends Disposable { const evt = typeof event === 'string' ? new Event(event) : event; const type = evt.type; if (!evt.target) { - evt.target = this.target_ || this; + evt.target = this.eventTarget_ || this; } const listeners = this.listeners_[type]; let propagate;