(ns pocketbook.example "Example: a simple todo app using Pocketbook." (:require [pocketbook.core :as pb] [cljs.core.async :refer [go Pocketbook Todos (" (count todos) ")" "
" "Pending sync: " (pb/pending-count todos-atom) "
")))) (defn- setup-handlers! [todos-atom] ;; We re-setup after each render (when-let [btn (js/document.getElementById "add-btn")] (.addEventListener btn "click" (fn [_] (let [input (js/document.getElementById "new-todo") text (.-value input)] (when (seq text) (let [id (str "todo:" (random-uuid))] (swap! todos-atom assoc id {:text text :done false}) (set! (.-value input) ""))))))) ;; Checkbox toggles (doseq [cb (array-seq (.querySelectorAll js/document "input[type=checkbox]"))] (.addEventListener cb "change" (fn [e] (let [id (.-id (.-dataset (.-target e)))] (swap! todos-atom update-in [id :done] not))))) ;; Delete buttons (doseq [btn (array-seq (.querySelectorAll js/document ".del-btn"))] (.addEventListener btn "click" (fn [e] (let [id (.-id (.-dataset (.-target e)))] (swap! todos-atom dissoc id)))))) (defn ^:export init [] (go (let [conn (