import vdom, karax, karaxdsl, jdict, jstrutils, compact type Filter = enum all, active, completed var entries: seq[(cstring, bool)] visibleA = 0 visibleB = 10 selectedEntry = -1 filter: Filter proc onTodoEnter(ev: Event; n: VNode) = entries.add((n.value, false)) n.value = "" proc removeHandler(ev: Event; n: VNode) = entries[n.key] = (cstring(nil), false) proc editHandler(ev: Event; n: VNode) = selectedEntry = n.key proc focusLost(ev: Event; n: VNode) = selectedEntry = -1 proc editEntry(ev: Event; n: VNode) = entries[n.key][0] = n.value selectedEntry = -1 proc toggleEntry(ev: Event; n: VNode) = let id = n.key entries[id][1] = not entries[id][1] proc onAllDone(ev: Event; n: VNode) = entries = @[] selectedEntry = -1 proc clearCompleted(ev: Event, n: VNode) = for i in 0.. 0: # scroll downwards: visibleA = max(a-overshoot2, 0) visibleB = min(b+diff+overshoot1, entries.len-1) elif diff < 0: # scroll upwards: visibleA = max(a+diff-overshoot1, 0) visibleB = min(b+overshoot2, entries.len-1) ) setOnHashChange(proc(hash: cstring) = if hash == cstring"#/": filter = all elif hash == cstring"#/completed": filter = completed elif hash == cstring"#/active": filter = active ) setRenderer createDom proc onload(session: cstring) {.exportc.} = for i in 0..visibleB: entries.add((cstring"Entry " & &i, false)) init()