diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 5e6c415..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-# This is a basic workflow to help you get started with Actions
-
-name: CI
-
-# Controls when the action will run.
-on:
- # Triggers the workflow on push or pull request events but only for the master branch
- push:
- branches: [ master ]
- pull_request:
- branches: [ master ]
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel
-jobs:
- # This workflow contains a single job called "build"
- build:
- # The type of runner that the job will run on
- runs-on: ubuntu-latest
- container: nimlang/nim
- # Steps represent a sequence of tasks that will be executed as part of the job
- steps:
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- - uses: actions/checkout@v2
- # Runs a single command using the runners shell
- - name: Tests
- run: |
- nimble develop -y
- nim c -r tests/tester.nim
diff --git a/.gitignore b/.gitignore
index 842e140..acb4ec1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,3 @@ nimcache/
karax/tools/karun
*.code-workspace
*.exe
-app.js
-app.html
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..6e03ea9
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,20 @@
+sudo: false
+language: c
+os: linux
+install:
+ - git clone https://github.com/nim-lang/nim
+ - cd nim
+ - git clone --depth 1 https://github.com/nim-lang/csources.git
+ - cd csources
+ - sh build.sh
+ - cd ../
+ - bin/nim c koch
+ - ./koch boot -d:release
+ - ./koch tools
+ - cd ..
+before_script:
+ - set -e
+ - export PATH=$(pwd)/nim/bin:$(pwd):$PATH
+script:
+ - nimble develop
+ - nim c -r tests/tester.nim
diff --git a/docs/docs.rst b/docs/docs.rst
index 3eec1a4..8298ba9 100644
--- a/docs/docs.rst
+++ b/docs/docs.rst
@@ -10,17 +10,17 @@ and some extensions that allow for an efficient component system.
These extensions are:
``VNodeKind.int``
- The node has a single integer field.
+ The node havs a single integer field.
``VNodeKind.bool``
The node has a single boolean field.
-``VNodeKind.vthunk``
+``VNodeKint.vthunk``
The node is a `virtual thunk`:idx:. This means there is a
function attached to it that produces the ``VNode`` structure
on demand.
-``VNodeKind.dthunk``
+``VNodeKint.dthunk``
The node is a `DOM thunk`:idx:. This means there is a
function attached to it that produces the ``Node`` DOM structure
on demand.
@@ -53,6 +53,6 @@ Event system
Karax does not abstract over the event system the DOM offers much: The same
``Event`` structure is used. Every callback has the
-signature ``proc (ev: Event; n: VNode)`` or empty ``proc ()``.
+signature ``proc (ev: Event; n: VNode)``.
diff --git a/examples/button.nim b/examples/button.nim
index d86fa82..bd49dc3 100644
--- a/examples/button.nim
+++ b/examples/button.nim
@@ -1,3 +1,4 @@
+
include karax / prelude
var lines: seq[kstring] = @[]
diff --git a/examples/carousel/carousel.html b/examples/carousel/carousel.html
index 500e73a..979dd38 100644
--- a/examples/carousel/carousel.html
+++ b/examples/carousel/carousel.html
@@ -1,15 +1,15 @@
-
- Carousel app
-
+
+ Carousel app
+
-
+
-
+
-
+
-
+
diff --git a/examples/hellostyle.nim b/examples/hellostyle.nim
deleted file mode 100644
index 716c2f0..0000000
--- a/examples/hellostyle.nim
+++ /dev/null
@@ -1,17 +0,0 @@
-include karax / prelude
-import karax / vstyles
-
-proc createDom(): VNode =
- result = buildHtml(tdiv):
- tdiv(style = style(StyleAttr.color, "red".cstring)):
- text "red"
- tdiv(style = style(StyleAttr.color, "blue")):
- text "blue"
- # explicit `kstring` required for varargs overload
- tdiv(style = style((fontStyle, "italic".kstring), (color, "orange".kstring))):
- text "italic orange"
- # can use a string directly
- tdiv(style = "font-style: oblique; color: pink".toCss):
- text "oblique pink"
-
-setRenderer createDom
diff --git a/examples/hellouniverse.nim b/examples/hellouniverse.nim
index 8343d07..9d6ebc6 100644
--- a/examples/hellouniverse.nim
+++ b/examples/hellouniverse.nim
@@ -1,9 +1,10 @@
+
include karax / prelude
import random
proc createDom(): VNode =
result = buildHtml(tdiv):
- if rand(100) <= 50:
+ if random(100) <= 50:
text "Hello World!"
else:
text "Hello Universe"
diff --git a/examples/login.nim b/examples/login.nim
index 0350e23..6cc38b1 100644
--- a/examples/login.nim
+++ b/examples/login.nim
@@ -1,5 +1,6 @@
+
include karax / prelude
-from sugar import `=>`
+from future import `=>`
import karax / errors
proc loginField(desc, field, class: kstring;
@@ -17,7 +18,7 @@ const
proc validateNotEmpty(field: kstring): proc () =
result = proc () =
let x = getVNodeById(field)
- if x.text == "":
+ if x.text.isNil or x.text == "":
errors.setError(field, field & " must not be empty")
else:
errors.setError(field, "")
@@ -27,7 +28,7 @@ var loggedIn: bool
proc loginDialog(): VNode =
result = buildHtml(tdiv):
if not loggedIn:
- loginField("Name: ", username, "input", validateNotEmpty)
+ loginField("Name :", username, "input", validateNotEmpty)
loginField("Password: ", password, "password", validateNotEmpty)
button(onclick = () => (loggedIn = true), disabled = errors.disableOnError()):
text "Login"
diff --git a/examples/mediaplayer/playerapp.html b/examples/mediaplayer/playerapp.html
index a45a2e8..9e076e6 100644
--- a/examples/mediaplayer/playerapp.html
+++ b/examples/mediaplayer/playerapp.html
@@ -1,15 +1,15 @@
-
- Player app
-
+
+ Player app
+
-
+
-
+
-
+
-
+
diff --git a/examples/scrollapp/scrollapp.html b/examples/scrollapp/scrollapp.html
index 44d657e..1ff8b1b 100644
--- a/examples/scrollapp/scrollapp.html
+++ b/examples/scrollapp/scrollapp.html
@@ -1,15 +1,15 @@
-
- Todo app
-
+
+ Todo app
+
-
+
-
+
-
+
-
+
diff --git a/examples/todoapp/todoapp.html b/examples/todoapp/todoapp.html
index ab3daa7..488a3bf 100644
--- a/examples/todoapp/todoapp.html
+++ b/examples/todoapp/todoapp.html
@@ -1,16 +1,16 @@
-
- Todo app
-
-
+
+ Todo app
+
+
-
+
-
+
-
+
-
+
diff --git a/examples/todoapp/todoapp.nim b/examples/todoapp/todoapp.nim
index e3720fd..b944de5 100644
--- a/examples/todoapp/todoapp.nim
+++ b/examples/todoapp/todoapp.nim
@@ -9,7 +9,7 @@ var
selectedEntry = -1
filter: Filter
entriesLen: int
- doneswitch = true
+
const
contentSuffix = cstring"content"
completedSuffix = cstring"completed"
@@ -62,9 +62,9 @@ proc toggleEntry(ev: Event; n: VNode) =
markAsCompleted(id, not isCompleted(id))
proc onAllDone(ev: Event; n: VNode) =
- for i in 0..
-
+