FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

events: allow an event to be dispatched multiple times by lpinca · Pull Request #39395 · nodejs/node · GitHub

/ node Public

events: allow an event to be dispatched multiple times - #39395

Closed
lpinca wants to merge 1 commit into
nodejs:masterfrom
lpinca:fix/target-reset
Closed

events: allow an event to be dispatched multiple times#39395
lpinca wants to merge 1 commit into
nodejs:masterfrom
lpinca:fix/target-reset

Conversation

lpinca commented Jul 15, 2021
edited
Loading

Copy link
Copy Markdown
Member

Use a different flag to prevent recursive dispatching.

nodejs-github-bot added the needs-ci PRs that need a full CI run. label Jul 15, 2021
Comment thread test/parallel/test-eventtarget.js Outdated
Use a different flag to prevent recursive dispatching.
lpinca force-pushed the fix/target-reset branch from 38a7c5c to 8a78837 Compare July 21, 2021 09:26
lpinca changed the title events: reset the event target to null events: allow an event to be dispatched multiple times Jul 21, 2021

lpinca commented Jul 21, 2021

Copy link
Copy Markdown
Member Author

@aduh95 PTAL.

// API completeness.

composedPath() { return this[kTarget] ? [this[kTarget]] : []; }
composedPath() { return this[kIsBeingDispatched] ? [this[kTarget]] : []; }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Unrelated to this PR: Chromium and Safari both return an empty array when dispatching an event. Firefox has the same behavior as Node.js. I couldn't find which behavior is spec compliant.

{
  // Same event dispatched multiple times.
  const event = new Event('foo');
  const eventTarget1 = new EventTarget();
  const eventTarget2 = new EventTarget();

  eventTarget1.addEventListener('foo', ((event) => {
    console.log(event.target===eventTarget1, event.eventPhase===Event.AT_TARGET); // true true
    const path = event.composedPath();
    console.log(path.length === 1, path[0]===eventTarget1); // depends on the browser:
    // On Firefox + Node.js: true true
    // On Safari + Chromium : false false
  }));

  eventTarget2.addEventListener('foo', ((event) => {
    console.log(event.target===eventTarget2, event.eventPhase===Event.AT_TARGET); // true true
    const path = event.composedPath();
    console.log(path.length === 1, path[0]===eventTarget2); // depends on the browser
  }));

  eventTarget1.dispatchEvent(event);
  console.log(event.target===eventTarget1, event.eventPhase===Event.NONE); // true true
  console.log(event.composedPath().length === 0); // true

  eventTarget2.dispatchEvent(event);
  console.log(event.target===eventTarget2, event.eventPhase===Event.NONE); // true true
  console.log(event.composedPath().length === 0); // true
}

aduh95 added author ready PRs that have at least one approval, no outstanding review comments, and a CI started. request-ci Add this label to start a Jenkins CI on a PR. labels Jul 21, 2021
github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jul 21, 2021

Copy link
Copy Markdown
Collaborator

Copy link
Copy Markdown
Collaborator

Copy link
Copy Markdown
Collaborator

lpinca added the eventtarget Issues and PRs related to the EventTarget implementation. label Jul 25, 2021
lpinca added a commit that referenced this pull request Jul 25, 2021
Use a different flag to prevent recursive dispatching.

PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>

lpinca commented Jul 25, 2021

Copy link
Copy Markdown
Member Author

Landed in 5c4e673.

lpinca closed this Jul 25, 2021
lpinca deleted the fix/target-reset branch July 25, 2021 14:18
targos pushed a commit that referenced this pull request Jul 26, 2021
Use a different flag to prevent recursive dispatching.

PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
BethGriggs mentioned this pull request Jul 26, 2021
BethGriggs pushed a commit that referenced this pull request Jul 29, 2021
Use a different flag to prevent recursive dispatching.

PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
mrbbot added a commit to mrbbot/node that referenced this pull request Aug 15, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.

Refs: nodejs#39395
lpinca pushed a commit that referenced this pull request Sep 26, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.

PR-URL: #39772
Refs: #39395
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
targos pushed a commit that referenced this pull request Oct 4, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.

PR-URL: #39772
Refs: #39395
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author ready PRs that have at least one approval, no outstanding review comments, and a CI started. eventtarget Issues and PRs related to the EventTarget implementation. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants


Back | FazBrowse Home | New Git URL