about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-05-08 23:03:16 +0200
committerbptato <nincsnevem662@gmail.com>2024-05-08 23:03:16 +0200
commit0ecdc3fcb376b62756c74c1e667002a5022863be (patch)
tree2bbde0814fb42f39813460241efdbacda57b5443 /src
parent264419bde7a73ba34095af65fd0f34ab88e7070a (diff)
downloadchawan-0ecdc3fcb376b62756c74c1e667002a5022863be.tar.gz
dom: simplify ButtonType
Diffstat (limited to 'src')
-rw-r--r--src/html/dom.nim14
-rw-r--r--src/html/enums.nim4
-rw-r--r--src/server/buffer.nim19
-rw-r--r--src/utils/twtstr.nim2
4 files changed, 19 insertions, 20 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim
index 3ee12f8d..5daba32e 100644
--- a/src/html/dom.nim
+++ b/src/html/dom.nim
@@ -2916,10 +2916,6 @@ proc reflectAttrs(element: Element; name: CAtom; value: string) =
     if name == n:
       element.val = element.document.toAtom(value)
       return
-  template reflect_str(element: Element; n: StaticAtom; val, fun: untyped) =
-    if name == n:
-      element.val = fun(value)
-      return
   template reflect_bool(element: Element; n: StaticAtom; val: untyped) =
     if name == n:
       element.val = true
@@ -2953,19 +2949,17 @@ proc reflectAttrs(element: Element; name: CAtom; value: string) =
   of TAG_INPUT:
     let input = HTMLInputElement(element)
     input.reflect_str satValue, value
-    input.reflect_str satType, inputType, inputType
     input.reflect_bool satChecked, checked
+    if name == satType:
+      input.inputType = inputType(value)
   of TAG_OPTION:
     let option = HTMLOptionElement(element)
     option.reflect_bool satSelected, selected
   of TAG_BUTTON:
     let button = HTMLButtonElement(element)
     button.reflect_str satValue, value
-    button.reflect_str satType, ctype, (func(s: string): ButtonType =
-      case s.toLowerAscii()
-      of "submit": return BUTTON_SUBMIT
-      of "reset": return BUTTON_RESET
-      of "button": return BUTTON_BUTTON)
+    if name == satType:
+      button.ctype = parseEnumNoCase[ButtonType](value).get(btSubmit)
   of TAG_LINK:
     let link = HTMLLinkElement(element)
     if name == satRel:
diff --git a/src/html/enums.nim b/src/html/enums.nim
index 1cac0742..925e3b68 100644
--- a/src/html/enums.nim
+++ b/src/html/enums.nim
@@ -29,7 +29,9 @@ type
     itWeek = "week"
 
   ButtonType* = enum
-    BUTTON_SUBMIT, BUTTON_RESET, BUTTON_BUTTON
+    btSubmit = "submit"
+    btReset = "reset"
+    btButton = "button"
 
   NodeType* = enum
     ELEMENT_NODE = 1,
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 52ac2830..b9ef513f 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -341,7 +341,7 @@ func canSubmitOnClick(fae: FormAssociatedElement): bool =
     return false
   if fae.form.canSubmitImplicitly():
     return true
-  if fae of HTMLButtonElement and HTMLButtonElement(fae).ctype == BUTTON_SUBMIT:
+  if fae of HTMLButtonElement and HTMLButtonElement(fae).ctype == btSubmit:
     return true
   if fae of HTMLInputElement and
       HTMLInputElement(fae).inputType in {itSubmit, itButton}:
@@ -1554,25 +1554,28 @@ proc click(buffer: Buffer; anchor: HTMLAnchorElement): ClickResult =
       repaint: repaint,
       open: some(newRequest(url, HTTP_GET))
     )
-  return ClickResult(
-    repaint: repaint
-  )
+  return ClickResult(repaint: repaint)
 
 proc click(buffer: Buffer; option: HTMLOptionElement): ClickResult =
   let select = option.select
   if select != nil:
     return buffer.click(select)
+  return ClickResult()
 
 proc click(buffer: Buffer; button: HTMLButtonElement): ClickResult =
   if button.form != nil:
+    var open = none(Request)
     case button.ctype
-    of BUTTON_SUBMIT: result.open = submitForm(button.form, button)
-    of BUTTON_RESET:
+    of btSubmit:
+      open = submitForm(button.form, button)
+    of btReset:
       button.form.reset()
       buffer.do_reshape()
       return ClickResult(repaint: true)
-    of BUTTON_BUTTON: discard
-    result.repaint = buffer.setFocus(button)
+    of btButton: discard
+    let repaint = buffer.setFocus(button)
+    return ClickResult(open: open, repaint: repaint)
+  return ClickResult()
 
 proc click(buffer: Buffer; textarea: HTMLTextAreaElement): ClickResult =
   let repaint = buffer.setFocus(textarea)
diff --git a/src/utils/twtstr.nim b/src/utils/twtstr.nim
index b1c6d1c9..da234982 100644
--- a/src/utils/twtstr.nim
+++ b/src/utils/twtstr.nim
@@ -675,7 +675,7 @@ func parseEnumNoCase*[T: enum](s: string): Opt[T] =
   # cmp when len is small enough, otherwise hashmap
   when {T.low..T.high}.len <= 4:
     for e in T.low .. T.high:
-      if $e.equalsIgnoreCase(s):
+      if ($e).equalsIgnoreCase(s):
         return ok(e)
   else:
     const tab = (func(): Table[string, T] =