update examples. fix bugs
This commit is contained in:
+16
-15
@@ -1,36 +1,37 @@
|
||||
(ns examples.counter
|
||||
"Simple counter example - demonstrates basic Elm architecture.
|
||||
Mirrors bubbletea's simple example."
|
||||
(:require [tui.core :as tui]))
|
||||
(:require [tui.core :as tui]
|
||||
[tui.events :as ev]))
|
||||
|
||||
;; === Model ===
|
||||
(def initial-model
|
||||
{:count 0})
|
||||
|
||||
;; === Update ===
|
||||
(defn update-model [model msg]
|
||||
(defn update-fn [{:keys [model event]}]
|
||||
(cond
|
||||
;; Quit on q or ctrl+c
|
||||
(or (tui/key= msg "q")
|
||||
(tui/key= msg [:ctrl \c]))
|
||||
[model tui/quit]
|
||||
(or (ev/key= event \q)
|
||||
(ev/key= event \c #{:ctrl}))
|
||||
{:model model :events [(ev/quit)]}
|
||||
|
||||
;; Increment on up/k
|
||||
(or (tui/key= msg :up)
|
||||
(tui/key= msg "k"))
|
||||
[(update model :count inc) nil]
|
||||
(or (ev/key= event :up)
|
||||
(ev/key= event \k))
|
||||
{:model (update model :count inc)}
|
||||
|
||||
;; Decrement on down/j
|
||||
(or (tui/key= msg :down)
|
||||
(tui/key= msg "j"))
|
||||
[(update model :count dec) nil]
|
||||
(or (ev/key= event :down)
|
||||
(ev/key= event \j))
|
||||
{:model (update model :count dec)}
|
||||
|
||||
;; Reset on r
|
||||
(tui/key= msg "r")
|
||||
[(assoc model :count 0) nil]
|
||||
(ev/key= event \r)
|
||||
{:model (assoc model :count 0)}
|
||||
|
||||
:else
|
||||
[model nil]))
|
||||
{:model model}))
|
||||
|
||||
;; === View ===
|
||||
(defn view [{:keys [count]} _size]
|
||||
@@ -51,6 +52,6 @@
|
||||
(defn -main [& _args]
|
||||
(println "Starting counter...")
|
||||
(let [final-model (tui/run {:init initial-model
|
||||
:update update-model
|
||||
:update update-fn
|
||||
:view view})]
|
||||
(println "Final count:" (:count final-model))))
|
||||
|
||||
Reference in New Issue
Block a user