diff --git a/experiments/config.nims b/experiments/config.nims index 4071d27..86673aa 100644 --- a/experiments/config.nims +++ b/experiments/config.nims @@ -1 +1,2 @@ --path: "../karax" +--path: ".." diff --git a/experiments/nativenodes.nim b/experiments/nativenodes.nim new file mode 100644 index 0000000..9d255ee --- /dev/null +++ b/experiments/nativenodes.nim @@ -0,0 +1,18 @@ + + +include karax / prelude +import karax / kdom + +proc myInput: VNode = + result = buildHtml: + input() + +var inp = vnodeToDom(myInput()) + +proc myAwesomeComponent(x: Node): VNode = + result = dthunk(x) + +proc main: VNode = + result = myAwesomeComponent(inp) + +setRenderer main diff --git a/karax/compact.nim b/karax/compact.nim index 7a7664d..3363802 100644 --- a/karax/compact.nim +++ b/karax/compact.nim @@ -8,18 +8,15 @@ import macros, vdom, tables, strutils, kbase when defined(js): var vcomponents* = newJDict[cstring, proc(args: seq[VNode]): VNode]() - dcomponents* = newJDict[cstring, proc(args: seq[VNode]): Node]() else: var vcomponents* = newTable[kstring, proc(args: seq[VNode]): VNode]() - dcomponents* = newTable[kstring, proc(args: seq[VNode]): Node]() type ComponentKind* {.pure.} = enum None, Tag, - VNode, - Node + VNode var allcomponents {.compileTime.} = initTable[string, ComponentKind]() @@ -84,10 +81,8 @@ when defined(js): var isvirtual = ComponentKind.None if rettype == "VNode": isvirtual = ComponentKind.VNode - elif rettype == "Node": - isvirtual = ComponentKind.Node else: - error "component must return VNode or Node", params[0] + error "component must return VNode", params[0] let realName = if name.kind == nnkPostfix: name[1] else: name let nn = $realName n[0] = ident("inner" & nn) @@ -105,26 +100,15 @@ when defined(js): proc pname(args: seq[VNode]): VNode = unpackCall - template dwrapper(pname, unpackCall) {.dirty.} = - proc pname(args: seq[VNode]): Node = - unpackCall - template vregister(key, val) = bind jdict.`[]=` `[]=`(vcomponents, kstring(key), val) - template dregister(key, val) = - bind jdict.`[]=` - `[]=`(dcomponents, kstring(key), val) - result = newTree(nnkStmtList, n) if isvirtual == ComponentKind.VNode: result.add getAst(vwrapper(newname name, unpackCall)) result.add getAst(vregister(newLit(nn), realName)) - else: - result.add getAst(dwrapper(newname name, unpackCall)) - result.add getAst(dregister(newLit(nn), realName)) allcomponents[nn] = isvirtual when defined(debugKaraxDsl): echo repr result diff --git a/karax/karax.nim b/karax/karax.nim index e353597..2fc8632 100644 --- a/karax/karax.nim +++ b/karax/karax.nim @@ -123,7 +123,7 @@ template attach(n: VNode) = n.dom = result if n.id != nil: kxi.byId[n.id] = n -proc applyEvents(n: VNode; kxi: KaraxInstance) = +proc applyEvents(n: VNode) = let dest = n.dom for i in 0..