Skip to content
This repository was archived by the owner on Sep 20, 2019. It is now read-only.

Commit 1bb8d72

Browse files
author
Steve Orvell
authored
Merge pull request #140 from webcomponents/fix-139
Fixes #139
2 parents 4d2aad8 + c8178eb commit 1bb8d72

5 files changed

Lines changed: 29 additions & 10 deletions

File tree

‎shadydom.min.js‎

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎shadydom.min.js.map‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/patch-builtins.js‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ function getAssignedSlot(node) {
2525

2626
let windowMixin = {
2727

28-
addEventListener: addEventListener,
28+
// NOTE: ensure these methods are bound to `window` so that `this` is correct
29+
// when called directly from global context without a receiver; e.g.
30+
// `addEventListener(...)`.
31+
addEventListener: addEventListener.bind(window),
32+
33+
removeEventListener: removeEventListener.bind(window)
2934

30-
removeEventListener: removeEventListener
3135
};
3236

3337
let nodeMixin = {

‎src/patch-events.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ export function addEventListener(type, fnOrObj, optionsOrCapture) {
294294
// hack to let ShadyRoots have event listeners
295295
// event listener will be on host, but `currentTarget`
296296
// will be set to shadyroot for event listener
297-
let target = optionsOrCapture && optionsOrCapture.__shadyTarget || this;
297+
let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;
298298

299299
if (fnOrObj.__eventWrappers) {
300300
// Stop if the wrapper function has already been created.
@@ -392,7 +392,7 @@ export function removeEventListener(type, fnOrObj, optionsOrCapture) {
392392
once = false;
393393
passive = false;
394394
}
395-
let target = optionsOrCapture && optionsOrCapture.__shadyTarget || this;
395+
let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;
396396
// Search the wrapped function.
397397
let wrapperFn = undefined;
398398
if (fnOrObj.__eventWrappers) {

‎tests/event-path.html‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,20 @@
313313
el.parentNode.removeChild(el);
314314
});
315315

316+
test('implicit window add/remove event listener', function() {
317+
var el = createEnabledElement('x-event-scoped-window');
318+
var listener = function(e) {
319+
el.windowListenerEvents = el.windowListenerEvents ? el.windowListenerEvents+1 : 1;
320+
};
321+
addEventListener("composed", listener);
322+
el.fireComposed();
323+
assert.equal(1, el.windowListenerEvents);
324+
removeEventListener("composed", listener);
325+
el.fireComposed();
326+
assert.equal(1, el.windowListenerEvents);
327+
el.parentNode.removeChild(el);
328+
});
329+
316330
test('scoped event does not reach window', function() {
317331
var el = createEnabledElement('x-event-scoped-window');
318332
el.fireScoped();

0 commit comments

Comments
 (0)