From 79c351bc5a5904c1a7ba86414480e0875f53e9cb Mon Sep 17 00:00:00 2001 From: Jon Jensen Date: Mon, 9 Jan 2023 23:42:43 -0700 Subject: [PATCH] Add SubmitEvent's submitter Fixes #3117. --- lib/jsdom/living/events/SubmitEvent-impl.js | 13 ++++++ lib/jsdom/living/events/SubmitEvent.webidl | 11 +++++ lib/jsdom/living/interfaces.js | 1 + .../living/nodes/HTMLFormElement-impl.js | 7 +-- .../forms/form-submission-0/submit-event.html | 43 +++++++++++++++++++ 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 lib/jsdom/living/events/SubmitEvent-impl.js create mode 100644 lib/jsdom/living/events/SubmitEvent.webidl create mode 100644 test/web-platform-tests/to-upstream/html/semantics/forms/form-submission-0/submit-event.html diff --git a/lib/jsdom/living/events/SubmitEvent-impl.js b/lib/jsdom/living/events/SubmitEvent-impl.js new file mode 100644 index 0000000000..2a9886e136 --- /dev/null +++ b/lib/jsdom/living/events/SubmitEvent-impl.js @@ -0,0 +1,13 @@ +"use strict"; + +const EventImpl = require("./Event-impl").implementation; + +const SubmitEventInit = require("../generated/SubmitEventInit"); + +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-submitevent-interface +class SubmitEventImpl extends EventImpl {} +SubmitEventImpl.defaultInit = SubmitEventInit.convert(undefined, undefined); + +module.exports = { + implementation: SubmitEventImpl +}; diff --git a/lib/jsdom/living/events/SubmitEvent.webidl b/lib/jsdom/living/events/SubmitEvent.webidl new file mode 100644 index 0000000000..2d245bbde5 --- /dev/null +++ b/lib/jsdom/living/events/SubmitEvent.webidl @@ -0,0 +1,11 @@ +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-submitevent-interface +[Exposed=Window] +interface SubmitEvent : Event { + constructor(DOMString type, optional SubmitEventInit eventInitDict = {}); + + readonly attribute HTMLElement? submitter; +}; + +dictionary SubmitEventInit : EventInit { + HTMLElement? submitter = null; +}; diff --git a/lib/jsdom/living/interfaces.js b/lib/jsdom/living/interfaces.js index d64eafb729..9c766b0dd0 100644 --- a/lib/jsdom/living/interfaces.js +++ b/lib/jsdom/living/interfaces.js @@ -130,6 +130,7 @@ const generatedInterfaces = { StorageEvent: require("./generated/StorageEvent"), ProgressEvent: require("./generated/ProgressEvent"), PageTransitionEvent: require("./generated/PageTransitionEvent"), + SubmitEvent: require("./generated/SubmitEvent"), UIEvent: require("./generated/UIEvent"), FocusEvent: require("./generated/FocusEvent"), diff --git a/lib/jsdom/living/nodes/HTMLFormElement-impl.js b/lib/jsdom/living/nodes/HTMLFormElement-impl.js index 1ab508a6f2..d611fa3243 100644 --- a/lib/jsdom/living/nodes/HTMLFormElement-impl.js +++ b/lib/jsdom/living/nodes/HTMLFormElement-impl.js @@ -9,6 +9,7 @@ const { formOwner, isListed, isSubmittable, isSubmitButton } = require("../helpe const HTMLFormControlsCollection = require("../generated/HTMLFormControlsCollection"); const notImplemented = require("../../browser/not-implemented"); const { parseURLToResultingURLRecord } = require("../helpers/document-base-url"); +const SubmitEvent = require("../generated/SubmitEvent"); const encTypes = new Set([ "application/x-www-form-urlencoded", @@ -87,8 +88,8 @@ class HTMLFormElementImpl extends HTMLElementImpl { notImplemented("HTMLFormElement.prototype.submit", this._ownerDocument._defaultView); } - requestSubmit(submitter = undefined) { - if (submitter !== undefined) { + requestSubmit(submitter = null) { + if (submitter !== null) { if (!isSubmitButton(submitter)) { throw new TypeError("The specified element is not a submit button"); } @@ -106,7 +107,7 @@ class HTMLFormElementImpl extends HTMLElementImpl { return; } - if (!fireAnEvent("submit", this, undefined, { bubbles: true, cancelable: true })) { + if (!fireAnEvent("submit", this, SubmitEvent, { bubbles: true, cancelable: true, submitter })) { return; } diff --git a/test/web-platform-tests/to-upstream/html/semantics/forms/form-submission-0/submit-event.html b/test/web-platform-tests/to-upstream/html/semantics/forms/form-submission-0/submit-event.html new file mode 100644 index 0000000000..5456b63fac --- /dev/null +++ b/test/web-platform-tests/to-upstream/html/semantics/forms/form-submission-0/submit-event.html @@ -0,0 +1,43 @@ + + +HTML Test: form submit event + + + + + +