Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9ed9aa8

Browse filesBrowse files
jasnellRafaelGSS
authored andcommitted
lib: add ability to add separate event name to defineEventHandler
Adds an optional third argument to `defineEventHandler()` to specify an event name that is separate from the name used for the property. This will be used, for instance, by the quic implementation to support generating the `on...` events where the event name itself is hyphenated. For instance `defineEventHandler(target, 'streamreset', 'stream-reset')` Separated out from #44325 Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: #45032 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent 2105f09 commit 9ed9aa8
Copy full SHA for 9ed9aa8

File tree

Expand file treeCollapse file tree

2 files changed

+20
-11
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+20
-11
lines changed
Open diff view settings
Collapse file

‎lib/internal/event_target.js‎

Copy file name to clipboardExpand all lines: lib/internal/event_target.js
+11-11Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,12 +1022,12 @@ function makeEventHandler(handler) {
10221022
return eventHandler;
10231023
}
10241024

1025-
function defineEventHandler(emitter, name) {
1025+
function defineEventHandler(emitter, name, event = name) {
10261026
// 8.1.5.1 Event handlers - basically `on[eventName]` attributes
10271027
const propName = `on${name}`;
10281028
function get() {
10291029
validateInternalField(this, kHandlers, 'EventTarget');
1030-
return this[kHandlers]?.get(name)?.handler ?? null;
1030+
return this[kHandlers]?.get(event)?.handler ?? null;
10311031
}
10321032
ObjectDefineProperty(get, 'name', {
10331033
__proto__: null,
@@ -1036,24 +1036,24 @@ function defineEventHandler(emitter, name) {
10361036

10371037
function set(value) {
10381038
validateInternalField(this, kHandlers, 'EventTarget');
1039-
let wrappedHandler = this[kHandlers]?.get(name);
1039+
let wrappedHandler = this[kHandlers]?.get(event);
10401040
if (wrappedHandler) {
10411041
if (typeof wrappedHandler.handler === 'function') {
1042-
this[kEvents].get(name).size--;
1043-
const size = this[kEvents].get(name).size;
1044-
this[kRemoveListener](size, name, wrappedHandler.handler, false);
1042+
this[kEvents].get(event).size--;
1043+
const size = this[kEvents].get(event).size;
1044+
this[kRemoveListener](size, event, wrappedHandler.handler, false);
10451045
}
10461046
wrappedHandler.handler = value;
10471047
if (typeof wrappedHandler.handler === 'function') {
1048-
this[kEvents].get(name).size++;
1049-
const size = this[kEvents].get(name).size;
1050-
this[kNewListener](size, name, value, false, false, false, false);
1048+
this[kEvents].get(event).size++;
1049+
const size = this[kEvents].get(event).size;
1050+
this[kNewListener](size, event, value, false, false, false, false);
10511051
}
10521052
} else {
10531053
wrappedHandler = makeEventHandler(value);
1054-
this.addEventListener(name, wrappedHandler);
1054+
this.addEventListener(event, wrappedHandler);
10551055
}
1056-
this[kHandlers].set(name, wrappedHandler);
1056+
this[kHandlers].set(event, wrappedHandler);
10571057
}
10581058
ObjectDefineProperty(set, 'name', {
10591059
__proto__: null,
Collapse file

‎test/parallel/test-eventtarget.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-eventtarget.js
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,15 @@ let asyncTest = Promise.resolve();
614614
target.dispatchEvent(new Event('foo'));
615615
deepStrictEqual(output, [1, 2, 3, 4]);
616616
}
617+
{
618+
const target = new EventTarget();
619+
defineEventHandler(target, 'foo', 'bar');
620+
const output = [];
621+
target.addEventListener('bar', () => output.push(1));
622+
target.onfoo = () => output.push(2);
623+
target.dispatchEvent(new Event('bar'));
624+
deepStrictEqual(output, [1, 2]);
625+
}
617626
{
618627
const et = new EventTarget();
619628
const listener = common.mustNotCall();

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.