about summary refs log tree commit diff stats
path: root/src/html
diff options
context:
space:
mode:
Diffstat (limited to 'src/html')
-rw-r--r--src/html/chadombuilder.nim1
-rw-r--r--src/html/dom.nim3
-rw-r--r--src/html/enums.nim44
3 files changed, 46 insertions, 2 deletions
diff --git a/src/html/chadombuilder.nim b/src/html/chadombuilder.nim
index 23273747..f070fe8f 100644
--- a/src/html/chadombuilder.nim
+++ b/src/html/chadombuilder.nim
@@ -3,6 +3,7 @@ import options
 import streams
 
 import html/dom
+import html/enums
 import js/error
 import js/fromjs
 import js/javascript
diff --git a/src/html/dom.nim b/src/html/dom.nim
index acc8ae30..4fcc6c51 100644
--- a/src/html/dom.nim
+++ b/src/html/dom.nim
@@ -11,6 +11,7 @@ import css/cssparser
 import css/sheet
 import css/values
 import display/window
+import html/enums
 import html/event
 import img/bitmap
 import img/painter
@@ -2183,8 +2184,6 @@ proc reflectAttrs(element: Element, name, value: string) =
     let input = HTMLInputElement(element)
     input.reflect_str "value", value
     input.reflect_str "type", inputType, inputType
-    if input.inputType == INPUT_UNKNOWN:
-      input.inputType = INPUT_TEXT
     input.reflect_bool "checked", checked
   of TAG_OPTION:
     let option = HTMLOptionElement(element)
diff --git a/src/html/enums.nim b/src/html/enums.nim
new file mode 100644
index 00000000..54de6af6
--- /dev/null
+++ b/src/html/enums.nim
@@ -0,0 +1,44 @@
+import strutils
+import tables
+
+import chame/tags
+
+type
+  InputType* = enum
+    INPUT_TEXT, INPUT_BUTTON, INPUT_CHECKBOX, INPUT_COLOR, INPUT_DATE,
+    INPUT_DATETIME_LOCAL, INPUT_EMAIL, INPUT_FILE, INPUT_HIDDEN, INPUT_IMAGE,
+    INPUT_MONTH, INPUT_NUMBER, INPUT_PASSWORD, INPUT_RADIO, INPUT_RANGE,
+    INPUT_RESET, INPUT_SEARCH, INPUT_SUBMIT, INPUT_TEL, INPUT_TIME, INPUT_URL,
+    INPUT_WEEK
+
+  ButtonType* = enum
+    BUTTON_SUBMIT, BUTTON_RESET, BUTTON_BUTTON
+
+#TODO support all the other ones
+const SupportedFormAssociatedElements* = {
+  TAG_BUTTON, TAG_INPUT, TAG_SELECT, TAG_TEXTAREA
+}
+
+const InputTypeWithSize* = {
+  INPUT_SEARCH, INPUT_TEXT, INPUT_EMAIL, INPUT_PASSWORD, INPUT_URL, INPUT_TEL
+}
+
+const AutocapitalizeInheritingElements* = {
+  TAG_BUTTON, TAG_FIELDSET, TAG_INPUT, TAG_OUTPUT, TAG_SELECT, TAG_TEXTAREA
+}
+
+const LabelableElements* = {
+  # input only if type not hidden
+  TAG_BUTTON, TAG_INPUT, TAG_METER, TAG_OUTPUT, TAG_PROGRESS, TAG_SELECT, TAG_TEXTAREA
+}
+
+func getInputTypeMap(): Table[string, InputType] =
+  for i in InputType:
+    let enumname = $InputType(i)
+    let tagname = enumname.split('_')[1..^1].join("_").toLowerAscii()
+    result[tagname] = InputType(i)
+
+const inputTypeMap = getInputTypeMap()
+
+func inputType*(s: string): InputType =
+  return inputTypeMap.getOrDefault(s.toLowerAscii())