nextgen uses the karax DSL and DOM diffing

This commit is contained in:
Andreas Rumpf 2017-08-17 08:36:17 +02:00
commit bfb9985754
2 changed files with 11 additions and 18 deletions

View file

@ -1,5 +1,5 @@
import kdom, jdict, jstrutils import vdom, kdom, vstyles, karax, karaxdsl, jdict, jstrutils
type type
Message = enum Message = enum
@ -155,27 +155,19 @@ type
var gu = newReactive(User(firstname: "Some", lastname: "Body")) var gu = newReactive(User(firstname: "Some", lastname: "Body"))
proc renderUser(u: Reactive[User]): Node = proc renderUser(u: Reactive[User]): VNode =
result = document.createElement("button") result = buildHtml(button):
result.appendChild document.createTextNode(u.now.firstname & " " & u.now.lastname) text u.now.firstname & " " & u.now.lastname
result.addEventListener "click", proc (ev: Event) = proc onclick(ev: Event; n: VNode) =
gu <- User(firstname: "Another", lastname: "Guy") gu <- User(firstname: "Another", lastname: "Guy")
proc replaceById(id: cstring; newTree: Node) = template track(r: ReactiveBase; a, b: VNode) =
let x = document.getElementById(id)
x.parentNode.replaceChild(newTree, x)
newTree.id = id
template track(r: ReactiveBase; a, b: Node) =
r.addSink proc(m: Message; pos: int) = r.addSink proc(m: Message; pos: int) =
if m == Changed: if m == Changed:
a.parentNode.replaceChild(b, a) runDiff(kxi, a, b)
proc main(): Node = proc main(): VNode =
result = renderUser(gu) result = renderUser(gu)
track gu, result, renderUser(gu) track gu, result, renderUser(gu)
proc init(ev: Event) = setInitializer(main)
replaceById("ROOT", main())
window.onload = init

View file

@ -187,6 +187,7 @@ proc same(n: VNode, e: Node; nesting = 0): bool =
proc replaceById(id: cstring; newTree: Node) = proc replaceById(id: cstring; newTree: Node) =
let x = document.getElementById(id) let x = document.getElementById(id)
x.parentNode.replaceChild(newTree, x) x.parentNode.replaceChild(newTree, x)
newTree.id = id
type type
EqResult = enum EqResult = enum