diff --git a/src/karax.nim b/src/karax.nim index 0b1d8db..5ea7d62 100644 --- a/src/karax.nim +++ b/src/karax.nim @@ -48,8 +48,9 @@ template keyeventBody() = # Do not call redraw() here! That is already done # by ``karax.addEventHandler``. -proc wrapEvent(d: Node; n: VNode; k: EventKind; action: EventHandler) = - proc stdWrapper(): (proc (ev: Event)) = +proc wrapEvent(d: Node; n: VNode; k: EventKind; + action: EventHandler): NativeEventHandler = + proc stdWrapper(): NativeEventHandler = let action = action let n = n result = proc (ev: Event) = @@ -57,13 +58,13 @@ proc wrapEvent(d: Node; n: VNode; k: EventKind; action: EventHandler) = keyeventBody() else: action(ev, n) - proc enterWrapper(): (proc (ev: Event)) = + proc enterWrapper(): NativeEventHandler = let action = action let n = n result = proc (ev: Event) = if ev.keyCode == 13: keyeventBody() - proc laterWrapper(): (proc (ev: Event)) = + proc laterWrapper(): NativeEventHandler = let action = action let n = n var timer: Timeout @@ -74,11 +75,14 @@ proc wrapEvent(d: Node; n: VNode; k: EventKind; action: EventHandler) = case k of EventKind.onkeyuplater: - d.addEventListener("keyup", laterWrapper()) + result = laterWrapper() + d.addEventListener("keyup", result) of EventKind.onkeyupenter: - d.addEventListener("keyup", enterWrapper()) + result = enterWrapper() + d.addEventListener("keyup", result) else: - d.addEventListener(toEventName[k], stdWrapper()) + result = stdWrapper() + d.addEventListener(toEventName[k], result) # --------------------- DOM diff ----------------------------------------- @@ -90,6 +94,11 @@ template detach(n: VNode) = template attach(n: VNode) = n.dom = result +proc applyEvents(n: VNode; kxi: KaraxInstance) = + let dest = n.dom + for i in 0..