Skip to content

Commit

Permalink
Allow Drive to submit a form when spot-enabled but submitter is null (#…
Browse files Browse the repository at this point in the history
…406)

* Do not consider submitter's attrs if it is null

* Attempt to add test
  • Loading branch information
terracatta committed Sep 24, 2021
1 parent 77c4f0b commit 157d423
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/core/session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ export class Session implements FormSubmitObserverDelegate, HistoryDelegate, Lin
// Form submit observer delegate

willSubmitForm(form: HTMLFormElement, submitter?: HTMLElement): boolean {
return this.elementDriveEnabled(form) && this.elementDriveEnabled(submitter)
return this.elementDriveEnabled(form) && (!submitter || this.elementDriveEnabled(submitter))
}

formSubmitted(form: HTMLFormElement, submitter?: HTMLElement) {
Expand Down
19 changes: 19 additions & 0 deletions src/tests/fixtures/drive_disabled.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
<title>Drive (Disabled by Default)</title>
<script src="/dist/turbo.es2017-umd.js" data-turbo-track="reload"></script>
<script src="/src/tests/fixtures/test.js"></script>
<script type="module">
addEventListener("click", event => {
if (event.target.id == "requestSubmit") {
event.preventDefault()
const form = event.target.closest('form')
if(typeof form.requestSubmit === "function"){
form.requestSubmit()
} else {
form.submit()
}
}
})
</script>
<script>
Turbo.session.drive = false
</script>
Expand All @@ -19,5 +32,11 @@ <h1>Drive (Disabled by Default)</h1>
<div>
<a id="drive_disabled" href="/src/tests/fixtures/drive_disabled.html">Drive disabled link</a>
</div>

<form action="/__turbo/redirect" method="post" id="no_submitter_drive_enabled" data-turbo="true">
<input type="hidden" name="path" value="/src/tests/fixtures/form.html">
<input type="hidden" name="greeting" value="Hello from a redirect">
<a href="#" id="requestSubmit">Drive enabled submit via JS</a>
</form>
</body>
</html>
16 changes: 16 additions & 0 deletions src/tests/functional/drive_disabled_tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,22 @@ export class DriveDisabledTests extends TurboDriveTestCase {
this.assert.equal(await this.pathname, this.path)
this.assert.equal(await this.visitAction, "advance")
}

async "test drive disabled by default; submit form inside data-turbo='true'"() {
await this.remote.execute(() => {
addEventListener("turbo:submit-start", () => document.documentElement.setAttribute("data-form-submitted", ""), { once: true })
})
this.clickSelector("#no_submitter_drive_enabled a#requestSubmit")
await this.nextBody
this.assert.ok(await this.formSubmitted)
this.assert.equal(await this.pathname, "/src/tests/fixtures/form.html")
this.assert.equal(await this.visitAction, "advance")
this.assert.equal(await this.getSearchParam("greeting"), "Hello from a redirect")
}

get formSubmitted(): Promise<boolean> {
return this.hasSelector("html[data-form-submitted]")
}
}


Expand Down

0 comments on commit 157d423

Please sign in to comment.