Skip to content

Commit

Permalink
event: cancelBubble is a property
Browse files Browse the repository at this point in the history
Event#cancelBubble is property (and not a function). Change
Event#cancelBubble to a property and add a test.

PR-URL: #33613
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
  • Loading branch information
benjamingr authored and Benjamin Gruenbaum committed May 31, 2020
1 parent 8ae28ff commit f643cf4
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
13 changes: 9 additions & 4 deletions lib/internal/event_target.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@ class Event {
#cancelable = false;
#timestamp = perf_hooks.performance.now();

// Neither of these are currently used in the Node.js implementation
// None of these are currently used in the Node.js implementation
// of EventTarget because there is no concept of bubbling or
// composition. We preserve their values in Event but they are
// non-ops and do not carry any semantics in Node.js
#bubbles = false;
#composed = false;
#propagationStopped = false;


constructor(type, options) {
Expand All @@ -54,6 +55,7 @@ class Event {
this.#cancelable = !!cancelable;
this.#bubbles = !!bubbles;
this.#composed = !!composed;
this.#propagationStopped = false;
this.#type = String(type);
// isTrusted is special (LegacyUnforgeable)
Object.defineProperty(this, 'isTrusted', {
Expand Down Expand Up @@ -113,11 +115,14 @@ class Event {
get eventPhase() {
return this[kTarget] ? 2 : 0; // Equivalent to AT_TARGET or NONE
}
cancelBubble() {
// Non-op in Node.js. Alias for stopPropagation
get cancelBubble() { return this.#propagationStopped; }
set cancelBubble(value) {
if (value) {
this.stopPropagation();
}
}
stopPropagation() {
// Non-op in Node.js
this.#propagationStopped = true;
}

get [Symbol.toStringTag]() { return 'Event'; }
Expand Down
19 changes: 19 additions & 0 deletions test/parallel/test-eventtarget.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ ok(EventTarget);
strictEqual(ev.composed, false);
strictEqual(ev.isTrusted, false);
strictEqual(ev.eventPhase, 0);
strictEqual(ev.cancelBubble, false);

// Not cancelable
ev.preventDefault();
Expand All @@ -50,6 +51,24 @@ ok(EventTarget);
const ev = new Event('foo', {}, {});
strictEqual(ev.type, 'foo');
}
{
const ev = new Event('foo');
strictEqual(ev.cancelBubble, false);
ev.cancelBubble = true;
strictEqual(ev.cancelBubble, true);
}
{
const ev = new Event('foo');
strictEqual(ev.cancelBubble, false);
ev.stopPropagation();
strictEqual(ev.cancelBubble, true);
}
{
const ev = new Event('foo');
strictEqual(ev.cancelBubble, false);
ev.cancelBubble = 'some-truthy-value';
strictEqual(ev.cancelBubble, true);
}
{
const ev = new Event('foo', { cancelable: true });
strictEqual(ev.type, 'foo');
Expand Down

0 comments on commit f643cf4

Please sign in to comment.