diff --git a/src/core/drive/form_submission.ts b/src/core/drive/form_submission.ts index 3f90629a8..ff203f5e7 100644 --- a/src/core/drive/form_submission.ts +++ b/src/core/drive/form_submission.ts @@ -108,7 +108,7 @@ export class FormSubmission { } get confirmationMessage() { - return this.formElement.getAttribute("data-turbo-confirm") + return this.submitter?.getAttribute("data-turbo-confirm") || this.formElement.getAttribute("data-turbo-confirm") } get needsConfirmation() { diff --git a/src/tests/fixtures/form.html b/src/tests/fixtures/form.html index e4c48088d..30eb182dd 100644 --- a/src/tests/fixtures/form.html +++ b/src/tests/fixtures/form.html @@ -75,6 +75,7 @@

Form

+

diff --git a/src/tests/functional/form_submission_tests.ts b/src/tests/functional/form_submission_tests.ts index 31261323c..15d2f27b9 100644 --- a/src/tests/functional/form_submission_tests.ts +++ b/src/tests/functional/form_submission_tests.ts @@ -26,6 +26,7 @@ export class FormSubmissionTests extends TurboDriveTestCase { this.assert.equal(await this.getAlertText(), "Are you sure?") await this.acceptAlert() this.assert.ok(await this.formSubmitStarted) + this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html") } async "test form submission with confirmation cancelled"() { @@ -36,6 +37,25 @@ export class FormSubmissionTests extends TurboDriveTestCase { this.assert.notOk(await this.formSubmitStarted) } + async "test form submission with secondary submitter click - confirmation confirmed"() { + await this.clickSelector("#standard form.confirm #secondary_submitter") + + this.assert.equal(await this.getAlertText(), "Are you really sure?") + await this.acceptAlert() + this.assert.ok(await this.formSubmitStarted) + this.assert.equal(await this.pathname, "/src/tests/fixtures/one.html") + this.assert.equal(await this.visitAction, "advance") + this.assert.equal(await this.getSearchParam("greeting"), "secondary_submitter") + } + + async "test form submission with secondary submitter click - confirmation cancelled"() { + await this.clickSelector("#standard form.confirm #secondary_submitter") + + this.assert.equal(await this.getAlertText(), "Are you really sure?") + await this.dismissAlert() + this.assert.notOk(await this.formSubmitStarted) + } + async "test from submission with confirmation overriden"() { await this.remote.execute(() => window.Turbo.setConfirmMethod(() => confirm("Overriden message")))