This commit is contained in:
Andreas Rumpf 2017-06-22 09:34:44 +02:00
commit 79270c3423

View file

@ -219,11 +219,11 @@ proc updateDom(newNode, oldNode: VNode) =
updateDom(newNode[i], oldNode[i]) updateDom(newNode[i], oldNode[i])
proc updateElement(parent, current: Node, newNode, oldNode: VNode; proc updateElement(parent, current: Node, newNode, oldNode: VNode;
kxi: KaraxInstance): bool = kxi: KaraxInstance): EqResult =
let res = eq(newNode, oldNode, deep=false) result = eq(newNode, oldNode, deep=false)
if res <= different: if result <= different:
var n: Node var n: Node
if res == changed: if result == changed:
assert oldNode.kind == VNodeKind.component assert oldNode.kind == VNodeKind.component
let x = VComponent(oldNode) let x = VComponent(oldNode)
let oldExpanded = x.expanded let oldExpanded = x.expanded
@ -232,13 +232,13 @@ proc updateElement(parent, current: Node, newNode, oldNode: VNode;
if oldExpanded == nil: if oldExpanded == nil:
n = vnodeToDom(x.expanded, kxi) n = vnodeToDom(x.expanded, kxi)
else: else:
if updateElement(parent, current, x.expanded, oldExpanded, kxi): if updateElement(parent, current, x.expanded, oldExpanded, kxi) >= similar:
n = x.expanded.dom x.expanded = oldExpanded
doAssert n != nil, "expanded.dom is nil"
else:
n = oldExpanded.dom n = oldExpanded.dom
doAssert n != nil, "old expanded.dom is nil" doAssert n != nil, "old expanded.dom is nil"
result = true else:
n = x.expanded.dom
doAssert n != nil, "expanded.dom is nil"
else: else:
detach(oldNode) detach(oldNode)
n = vnodeToDom(newNode, kxi) n = vnodeToDom(newNode, kxi)
@ -246,7 +246,7 @@ proc updateElement(parent, current: Node, newNode, oldNode: VNode;
replaceById(kxi.rootId, n) replaceById(kxi.rootId, n)
else: else:
parent.replaceChild(n, current) parent.replaceChild(n, current)
elif res == similar: elif result == similar:
updateStyles(newNode, oldNode, false) updateStyles(newNode, oldNode, false)
else: else:
newNode.dom = oldNode.dom newNode.dom = oldNode.dom
@ -295,7 +295,8 @@ proc updateElement(parent, current: Node, newNode, oldNode: VNode;
var pos = min(oldPos, newPos) + 1 var pos = min(oldPos, newPos) + 1
for i in commonPrefix..pos-1: for i in commonPrefix..pos-1:
if updateElement(current, current.childNodes[i], newNode[i], oldNode[i], kxi): if updateElement(current, current.childNodes[i],
newNode[i], oldNode[i], kxi) >= similar:
newNode[i] = oldNode[i] newNode[i] = oldNode[i]
var nextChildPos = oldPos + 1 var nextChildPos = oldPos + 1