Skip to content

Commit 697e317

Browse files
authored
Merge pull request #35 from strfx/feat/include-submitter-info
feat: include submitter info.
2 parents b417792 + 23e9722 commit 697e317

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/index.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ export type RemoteFormHandler = (form: HTMLFormElement, kicker: Kicker, req: Sim
6565
// element.
6666
type Installable = string | HTMLFormElement
6767

68+
// Any element that submits a <form>
69+
type HTMLSubmitElement = HTMLButtonElement | HTMLInputElement
70+
6871
let formHandlers: Map<Installable, RemoteFormHandler[]>
6972
type Handler = (form: HTMLFormElement) => void
7073

@@ -133,7 +136,16 @@ function handleSubmit(event: Event) {
133136
return
134137
}
135138

136-
const req = buildRequest(form)
139+
let submitter
140+
141+
if (event instanceof SubmitEvent) {
142+
submitter = event.submitter as HTMLSubmitElement
143+
} else {
144+
submitter = null
145+
}
146+
147+
const req = buildRequest(form, submitter)
148+
137149
const [kickerPromise, ultimateResolve, ultimateReject] = makeDeferred<SimpleResponse>()
138150

139151
event.preventDefault()
@@ -202,9 +214,9 @@ async function processHandlers(
202214
return kickerWasCalled
203215
}
204216

205-
function buildRequest(form: HTMLFormElement): SimpleRequest {
217+
function buildRequest(form: HTMLFormElement, submitter: HTMLSubmitElement | null): SimpleRequest {
206218
const req: SimpleRequest = {
207-
method: form.method || 'GET',
219+
method: submitter?.formMethod || form.method || 'GET',
208220
url: form.action,
209221
headers: new Headers({'X-Requested-With': 'XMLHttpRequest'}),
210222
body: null

test/test.js

+11
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,15 @@ describe('remoteForm', function () {
164164
assert.isFalse(handlerCalled)
165165
document.removeEventListener('submit', defaultPreventHandler, {capture: true})
166166
})
167+
168+
it('overwrites form method with buttons formmethod', function (done) {
169+
remoteForm(htmlForm, async (form, wants, req) => {
170+
assert.equal(req.method.toUpperCase(), 'GET')
171+
done()
172+
})
173+
174+
const button = document.querySelector('button[type=submit]')
175+
button.formMethod = 'get'
176+
button.click()
177+
})
167178
})

0 commit comments

Comments
 (0)