Make input value and checked state get updated

Fixes #186
Fixes #61
This commit is contained in:
Joey Yakimowich-Payne 2021-05-16 20:54:51 -06:00
commit 0b43ee44d9
3 changed files with 17 additions and 0 deletions

View file

@ -472,10 +472,18 @@ proc diff(newNode, oldNode: VNode; parent, current: Node; kxi: KaraxInstance) =
if result == similar:
updateStyles(newNode, oldNode)
updateAttributes(newNode, oldNode)
if oldNode.kind == VNodeKind.text:
oldNode.text = newNode.text
oldNode.dom.nodeValue = newNode.text
# Set the value of the input field to update
if oldNode.kind == VNodeKind.input:
oldNode.dom.value = newNode.text
let checked = newNode.getAttr("checked")
oldNode.dom.checked = if checked.isNil: false else: true
if newNode.events.len != 0 or oldNode.events.len != 0:
mergeEvents(newNode, oldNode, kxi)

View file

@ -7,4 +7,10 @@ when not declared(dom.DomApiVersion):
else:
import dom
when not declared(dom.checked):
proc checked*(n: Node): bool {.importcpp: "#.checked", nodecl.}
when not declared(dom.`checked=`):
proc `checked=`*(n: Node; v: bool) {.importcpp: "#.checked = #", nodecl.}
export dom

View file

@ -1203,6 +1203,9 @@ proc `class=`*(n: Node; v: cstring) {.importcpp: "#.className = #", nodecl.}
proc value*(n: Node): cstring {.importcpp: "#.value", nodecl.}
proc `value=`*(n: Node; v: cstring) {.importcpp: "#.value = #", nodecl.}
proc checked*(n: Node): bool {.importcpp: "#.checked", nodecl.}
proc `checked=`*(n: Node; v: bool) {.importcpp: "#.checked = #", nodecl.}
proc `disabled=`*(n: Node; v: bool) {.importcpp: "#.disabled = #", nodecl.}
proc getElementsByClass*(n: Node; name: cstring): seq[Node] {.