From 2b3f475cbeade689979ad8f546f190ab9ea539bb Mon Sep 17 00:00:00 2001 From: Andy Altepeter Date: Mon, 4 Dec 2023 13:01:34 -0600 Subject: [PATCH 1/2] #1173@patch: HTMLInputElement[type=submit] and HTMLButtonElement set form submitter on click. --- .../src/nodes/html-button-element/HTMLButtonElement.ts | 2 +- .../src/nodes/html-input-element/HTMLInputElement.ts | 2 +- .../nodes/html-button-element/HTMLButtonElement.test.ts | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/happy-dom/src/nodes/html-button-element/HTMLButtonElement.ts b/packages/happy-dom/src/nodes/html-button-element/HTMLButtonElement.ts index 65aa54fb7..14252f73a 100644 --- a/packages/happy-dom/src/nodes/html-button-element/HTMLButtonElement.ts +++ b/packages/happy-dom/src/nodes/html-button-element/HTMLButtonElement.ts @@ -211,7 +211,7 @@ export default class HTMLButtonElement extends HTMLElement implements IHTMLButto const form = this._formNode; switch (this.type) { case 'submit': - form.requestSubmit(); + form.requestSubmit(this); break; case 'reset': form.reset(); diff --git a/packages/happy-dom/src/nodes/html-input-element/HTMLInputElement.ts b/packages/happy-dom/src/nodes/html-input-element/HTMLInputElement.ts index 75781d48b..893bcf236 100644 --- a/packages/happy-dom/src/nodes/html-input-element/HTMLInputElement.ts +++ b/packages/happy-dom/src/nodes/html-input-element/HTMLInputElement.ts @@ -1205,7 +1205,7 @@ export default class HTMLInputElement extends HTMLElement implements IHTMLInputE } else if (inputType === 'submit') { const form = this._formNode; if (form) { - form.requestSubmit(); + form.requestSubmit(this); } } else if (inputType === 'reset' && this.isConnected) { const form = this._formNode; diff --git a/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts b/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts index 4aeef9956..f8e383a29 100644 --- a/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts +++ b/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts @@ -2,6 +2,7 @@ import Window from '../../../src/window/Window.js'; import Document from '../../../src/nodes/document/Document.js'; import IHTMLButtonElement from '../../../src/nodes/html-button-element/IHTMLButtonElement.js'; import Event from '../../../src/event/Event.js'; +import SubmitEvent from '../../../src/event/events/SubmitEvent'; import IHTMLElement from '../../../src/nodes/html-element/IHTMLElement.js'; import IHTMLFormElement from '../../../src/nodes/html-form-element/IHTMLFormElement.js'; import ValidityState from '../../../src/validity-state/ValidityState.js'; @@ -255,11 +256,16 @@ describe('HTMLButtonElement', () => { document.body.appendChild(form); - form.addEventListener('submit', () => submitTriggeredCount++); + let submitter: IHTMLElement | null = null; + form.addEventListener('submit', (event) => { + submitTriggeredCount++; + submitter = (event).submitter; + }); button.click(); expect(submitTriggeredCount).toBe(1); + expect(submitter).toEqual(button); }); it('Resets form if type is "reset" and is a "click" event.', () => { From 61577a0544c7280709498488c6215e3491169662 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 15 Jan 2024 01:41:13 +0100 Subject: [PATCH 2/2] #1173@trivial: Adds unit test for submitter to HTMLInputElement. --- .../nodes/html-button-element/HTMLButtonElement.test.ts | 2 +- .../nodes/html-input-element/HTMLInputElement.test.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts b/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts index f8e383a29..c03655228 100644 --- a/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts +++ b/packages/happy-dom/test/nodes/html-button-element/HTMLButtonElement.test.ts @@ -265,7 +265,7 @@ describe('HTMLButtonElement', () => { button.click(); expect(submitTriggeredCount).toBe(1); - expect(submitter).toEqual(button); + expect(submitter).toBe(button); }); it('Resets form if type is "reset" and is a "click" event.', () => { diff --git a/packages/happy-dom/test/nodes/html-input-element/HTMLInputElement.test.ts b/packages/happy-dom/test/nodes/html-input-element/HTMLInputElement.test.ts index 1c181aa39..977833147 100644 --- a/packages/happy-dom/test/nodes/html-input-element/HTMLInputElement.test.ts +++ b/packages/happy-dom/test/nodes/html-input-element/HTMLInputElement.test.ts @@ -10,6 +10,7 @@ import HTMLInputElementSelectionDirectionEnum from '../../../src/nodes/html-inpu import ValidityState from '../../../src/validity-state/ValidityState.js'; import IHTMLFormElement from '../../../src/nodes/html-form-element/IHTMLFormElement.js'; import DOMExceptionNameEnum from '../../../src/exception/DOMExceptionNameEnum.js'; +import SubmitEvent from '../../../src/event/events/SubmitEvent.js'; import { beforeEach, describe, it, expect } from 'vitest'; describe('HTMLInputElement', () => { @@ -1206,11 +1207,16 @@ describe('HTMLInputElement', () => { document.body.appendChild(form); - form.addEventListener('submit', () => submitTriggeredCount++); + let submitter: IHTMLInputElement | null = null; + form.addEventListener('submit', (event) => { + submitTriggeredCount++; + submitter = (event).submitter; + }); button.click(); expect(submitTriggeredCount).toBe(1); + expect(submitter).toBe(button); }); it('Resets form if type is "reset" and is a "click" event.', () => {