about summary refs log tree commit diff stats
path: root/src/server
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2023-09-30 19:18:22 +0200
committerbptato <nincsnevem662@gmail.com>2023-09-30 19:18:22 +0200
commit1b20a3f8fae0f0eaa4f0b9979dc25d5bd04b9b10 (patch)
tree9cae5df0e9c1b6a378799473d76ba64d4e3f1f17 /src/server
parent31fbd611aa107cc023dcf1e1358f19ff58f14075 (diff)
downloadchawan-1b20a3f8fae0f0eaa4f0b9979dc25d5bd04b9b10.tar.gz
Improve implicit form submission
* Implement the "default button" part of the standard.
* If the submitter is the form, formmethod may be called on it. Check if
  this is the case in the function, and if yes, return the form's method.
Diffstat (limited to 'src/server')
-rw-r--r--src/server/buffer.nim13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 1e97a4bb..24dc7d3d 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -1200,8 +1200,17 @@ type ReadSuccessResult* = object
   repaint*: bool
 
 func implicitSubmit(input: HTMLInputElement): Option[Request] =
-  if input.form != nil and input.form.canSubmitImplicitly():
-    return submitForm(input.form, input.form)
+  let form = input.form
+  if form != nil and form.canSubmitImplicitly():
+    var defaultButton: Element
+    for element in form.elements:
+      if element.isSubmitButton():
+        defaultButton = element
+        break
+    if defaultButton != nil:
+      return submitForm(form, defaultButton)
+    else:
+      return submitForm(form, form)
 
 proc readSuccess*(buffer: Buffer, s: string): ReadSuccessResult {.proxy.} =
   if buffer.document.focus != nil: