Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit e83c09e

Browse files
committed
Add work around for X-Tag issue related to relatedTarget
1 parent 5bb221b commit e83c09e

2 files changed

Lines changed: 26 additions & 7 deletions

File tree

src/wrappers/events.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -294,13 +294,19 @@
294294

295295
if ('relatedTarget' in event) {
296296
var originalEvent = unwrap(event);
297-
var relatedTarget = wrap(originalEvent.relatedTarget);
298-
299-
var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);
300-
if (adjusted === target)
301-
return true;
302-
303-
relatedTargetTable.set(event, adjusted);
297+
// X-Tag sets relatedTarget on a CustomEvent. If they do that there is no
298+
// way to have relatedTarget return the adjusted target but worse is that
299+
// the originalEvent might not have a relatedTarget so we hit an assert
300+
// when we try to wrap it.
301+
if (originalEvent.relatedTarget) {
302+
var relatedTarget = wrap(originalEvent.relatedTarget);
303+
304+
var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);
305+
if (adjusted === target)
306+
return true;
307+
308+
relatedTargetTable.set(event, adjusted);
309+
}
304310
}
305311

306312
eventPhaseTable.set(event, phase);

test/js/events.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,4 +1277,17 @@ test('retarget order (multiple shadow roots)', function() {
12771277
text.dispatchEvent(new Event('x'));
12781278
});
12791279

1280+
test('manual relatedTarget', function() {
1281+
var ce = new CustomEvent('x');
1282+
ce.relatedTarget = 42;
1283+
var count = 0;
1284+
document.addEventListener('x', function f(e) {
1285+
count++;
1286+
assert.equal(e.relatedTarget, 42);
1287+
document.removeEventListener('x', f);
1288+
});
1289+
document.dispatchEvent(ce);
1290+
assert.equal(count, 1);
1291+
});
1292+
12801293
});

0 commit comments

Comments
 (0)