diff --git a/.gitignore b/.gitignore index 55419af..96bc49b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ nimcache/ /tests/tester /tools/karun -*.code-workspace \ No newline at end of file +*.code-workspace +*.exe diff --git a/experiments/config.nims b/experiments/config.nims new file mode 100644 index 0000000..532b206 --- /dev/null +++ b/experiments/config.nims @@ -0,0 +1 @@ +--path: "../src" diff --git a/experiments/scrollapp_simple.nim b/experiments/scrollapp_simple.nim new file mode 100644 index 0000000..cdd19cd --- /dev/null +++ b/experiments/scrollapp_simple.nim @@ -0,0 +1,25 @@ +## Example that shows how to accomplish an "infinitely scrolling" app. + +include karax / prelude +import karax / [kdom, vstyles] + +var entries: seq[cstring] = @[] +for i in 1..500: + entries.add(cstring("Entry ") & &i) + +proc scrollEvent(ev: Event; n: VNode) = + let d = n.dom + if d != nil and inViewport(d.lastChild): + # "load" more data: + for i in 1..50: + entries.add(cstring("Loaded Entry ") & &i) + +proc createDom(): VNode = + result = buildHtml(): + tdiv(onscroll=scrollEvent, style=style( + (StyleAttr.height, cstring"400px"), (StyleAttr.overflow, cstring"scroll"))): + for x in entries: + tdiv: + text x + +setRenderer createDom diff --git a/karax/jwebsockets.nim b/karax/jwebsockets.nim index c662ad1..2b1412e 100644 --- a/karax/jwebsockets.nim +++ b/karax/jwebsockets.nim @@ -6,6 +6,7 @@ type WebSocket* {.importc.} = ref object onmessage*: proc (e: MessageEvent) + onopen*: proc (e: MessageEvent) proc newWebSocket*(url, key: cstring): WebSocket {.importcpp: "new WebSocket(@)".} diff --git a/karax/kajax.nim b/karax/kajax.nim index 2fd14fa..800d315 100644 --- a/karax/kajax.nim +++ b/karax/kajax.nim @@ -5,7 +5,7 @@ import karax -proc ajax(meth, url: cstring; headers: openarray[(cstring, cstring)]; +proc ajax*(meth, url: cstring; headers: openarray[(cstring, cstring)]; data: cstring; cont: proc (httpStatus: int; response: cstring); kxi: KaraxInstance = kxi, @@ -61,5 +61,17 @@ proc ajaxGet*(url: cstring; headers: openarray[(cstring, cstring)]; kxi: KaraxInstance = kxi) = ajax("GET", url, headers, nil, cont, kxi) +proc ajaxPut*(url: cstring; headers: openarray[(cstring, cstring)]; + data: cstring; + cont: proc (httpStatus: int, response: cstring); + kxi: KaraxInstance = kxi) = + ajax("PUT", url, headers, data, cont, kxi) + +proc ajaxDelete*(url: cstring; headers: openarray[(cstring, cstring)]; + cont: proc (httpStatus: int, response: cstring); + kxi: KaraxInstance = kxi) = + ajax("DELETE", url, headers, nil, cont, kxi) + + proc toJson*[T](data: T): cstring {.importc: "JSON.stringify".} proc fromJson*[T](blob: cstring): T {.importc: "JSON.parse".} diff --git a/karax/karax.nim b/karax/karax.nim index 0359e59..433f842 100644 --- a/karax/karax.nim +++ b/karax/karax.nim @@ -260,6 +260,7 @@ proc updateStyles(newNode, oldNode: VNode) = if oldNode.dom != nil: if newNode.style != nil: applyStyle(oldNode.dom, newNode.style) else: oldNode.dom.style = Style() + oldNode.dom.class = newNode.class oldNode.style = newNode.style oldNode.class = newNode.class