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>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
  • Loading branch information
benjamingr authored and codebytere committed Jun 18, 2020
1 parent 16b6981 commit c9dec0c
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 @@ -35,12 +35,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 @@ -51,6 +52,7 @@ class Event {
this.#bubbles = !!bubbles;
this.#composed = !!composed;
this.#type = `${type}`;
this.#propagationStopped = false;
// isTrusted is special (LegacyUnforgeable)
Object.defineProperty(this, 'isTrusted', {
get() { return false; },
Expand Down Expand Up @@ -109,11 +111,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 @@ -35,11 +35,30 @@ ok(EventTarget);
strictEqual(ev.composed, false);
strictEqual(ev.isTrusted, false);
strictEqual(ev.eventPhase, 0);
strictEqual(ev.cancelBubble, false);

// Not cancelable
ev.preventDefault();
strictEqual(ev.defaultPrevented, false);
}
{
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 });
Expand Down

0 comments on commit c9dec0c

Please sign in to comment.