68 lines
1.7 KiB
Clojure
68 lines
1.7 KiB
Clojure
(ns example.core
|
|
(:require
|
|
[example.utils :refer [html->str defpage defaction defaction-async keep-open] :as u]
|
|
[starfederation.datastar.clojure.expressions :refer [->expr]]
|
|
[reitit.ring :as rr]
|
|
[ring.util.response :as ruresp]))
|
|
|
|
(declare home-page page-2 hello-world)
|
|
|
|
(def message "Hello, world!")
|
|
(def msg-count (count message))
|
|
|
|
;; actions
|
|
(defaction hello-world [sse]
|
|
(dotimes [i msg-count]
|
|
(u/patch-signals-edn! sse {:msg (subs message 0 (inc i))})
|
|
(Thread/sleep 500)))
|
|
|
|
(defaction say-hi [sse_]
|
|
(u/broadcast-signals! {:msg "hello from the great beyond!"}))
|
|
|
|
;; pages
|
|
(defpage home-page
|
|
(html->str
|
|
[:main
|
|
[:div
|
|
[:input {:data-bind "msg"}]
|
|
[:div {:data-text "$msg"}]
|
|
[:button {:data-on-click (->expr (@post ~hello-world ~keep-open))}
|
|
"click for text animation"]]
|
|
[:button {:data-on-click (->expr (@post ~page-2))}
|
|
"go to page 2"]]))
|
|
|
|
(defpage page-2
|
|
(html->str
|
|
[:main
|
|
[:div
|
|
[:p "this is page2"]
|
|
[:button {:data-on-click (->expr (@post ~say-hi))}
|
|
"say hi to everyone"]]
|
|
[:button {:data-on-click (->expr (@post ~home-page))}
|
|
"go back to home"]]))
|
|
|
|
;; http app server
|
|
(def routes
|
|
(concat
|
|
(u/app-routes home-page)
|
|
;; todo frameworkify the aysnc & broadcast stuffs then all the http things
|
|
(defaction-async "/connect" u/connect-sse! u/disconnect-sse!)))
|
|
(def router (rr/router routes))
|
|
(def handler (rr/ring-handler router))
|
|
|
|
;; repl it up ;P
|
|
(comment
|
|
routes
|
|
|
|
(u/broadcast-signals! {:msg "hi franz"})
|
|
(u/broadcast-signals! {:msg "hi ty"})
|
|
(u/broadcast! d*/console-log! "hi franz")
|
|
(u/broadcast-js! "console.log('test')")
|
|
(u/broadcast-reload!)
|
|
|
|
(u/kill-broadcast!)
|
|
|
|
(clojure.repl/dir d*)
|
|
(clojure.repl/doc d*/patch-signals!))
|
|
|