abstract @get('...')
This commit is contained in:
parent
bd6bd11519
commit
a967de6d75
@ -4,39 +4,50 @@
|
|||||||
[reitit.ring :as rr]
|
[reitit.ring :as rr]
|
||||||
[ring.util.response :as ruresp]))
|
[ring.util.response :as ruresp]))
|
||||||
|
|
||||||
|
(declare home-page page-2 hello-world)
|
||||||
|
|
||||||
;; views
|
;; views
|
||||||
(defn home-view [_]
|
(def home-page
|
||||||
(html->str
|
{:url "/"
|
||||||
[:main
|
:view
|
||||||
[:div
|
(fn home-view [_]
|
||||||
[:input {:data-bind "msg"}]
|
(html->str
|
||||||
[:div {:data-text "$msg"}]
|
[:main
|
||||||
[:button {:data-on-click "@get('/hello-world')"} "click for text animation"]]
|
[:div
|
||||||
[:button {:data-on-click "@get('/page2')"} "go to page 2"]]))
|
[:input {:data-bind "msg"}]
|
||||||
|
[:div {:data-text "$msg"}]
|
||||||
|
[:button {:data-on-click (u/at-get hello-world)}
|
||||||
|
"click for text animation"]]
|
||||||
|
[:button {:data-on-click (u/at-get page-2)} "go to page 2"]]))})
|
||||||
|
|
||||||
|
(def page-2
|
||||||
(defn page2-view [_]
|
{:url "/page2"
|
||||||
(html->str
|
:view
|
||||||
[:main
|
(fn page2-view [_]
|
||||||
[:p "this is page2"]
|
(html->str
|
||||||
[:button {:data-on-click "@get('/')"} "go back to home"]]))
|
[:main
|
||||||
|
[:p "this is page2"]
|
||||||
|
[:button {:data-on-click (u/at-get home-page)}
|
||||||
|
"go back to home"]]))})
|
||||||
|
|
||||||
;; hello world animation
|
;; hello world animation
|
||||||
(def message "Hello, world!")
|
(def message "Hello, world!")
|
||||||
|
|
||||||
(def msg-count (count message))
|
(def msg-count (count message))
|
||||||
|
|
||||||
(defn hello-world [sse]
|
(def hello-world
|
||||||
(dotimes [i msg-count]
|
{:url "/hello-world"
|
||||||
(u/patch-signals-edn! sse {:msg (subs message 0 (inc i))})
|
:fn (fn hello-world [sse]
|
||||||
(Thread/sleep 500)))
|
(dotimes [i msg-count]
|
||||||
|
(u/patch-signals-edn! sse {:msg (subs message 0 (inc i))})
|
||||||
|
(Thread/sleep 500)))})
|
||||||
|
|
||||||
|
|
||||||
(def routes
|
(def routes
|
||||||
(concat
|
(concat
|
||||||
(defpage "/" home-view)
|
(defpage home-page)
|
||||||
(defpage "/page2" page2-view)
|
(defpage page-2)
|
||||||
(defaction "/hello-world" hello-world)
|
(defaction hello-world)
|
||||||
(defaction-async "/connect" u/connect-sse! u/disconnect-sse!)))
|
(defaction-async "/connect" u/connect-sse! u/disconnect-sse!)))
|
||||||
|
|
||||||
(def router (rr/router routes))
|
(def router (rr/router routes))
|
||||||
|
@ -33,6 +33,9 @@
|
|||||||
(str "<div data-on-load=\"@get('connect')\"></div>")
|
(str "<div data-on-load=\"@get('connect')\"></div>")
|
||||||
(string/replace "%%content%%" content)))
|
(string/replace "%%content%%" content)))
|
||||||
|
|
||||||
|
(defn at-get [page-or-action]
|
||||||
|
(format "@get('%s')" (:url page-or-action)))
|
||||||
|
|
||||||
;; fix. use replaceState api? or push some real state? back button doesn't work yet
|
;; fix. use replaceState api? or push some real state? back button doesn't work yet
|
||||||
(defn update-url-frag [url]
|
(defn update-url-frag [url]
|
||||||
(html->str [:script (format "history.pushState({page:1}, 'Title', '%s')"
|
(html->str [:script (format "history.pushState({page:1}, 'Title', '%s')"
|
||||||
@ -73,17 +76,6 @@
|
|||||||
(d*/patch-elements! sse elems #:d*.elements{:patch-mode "replace"
|
(d*/patch-elements! sse elems #:d*.elements{:patch-mode "replace"
|
||||||
:selector "main"}))
|
:selector "main"}))
|
||||||
|
|
||||||
(defn defaction-async [url on-open-f on-close-f]
|
|
||||||
(let [sse-handler
|
|
||||||
(fn [request respond raise_]
|
|
||||||
(respond
|
|
||||||
(->sse-response
|
|
||||||
request
|
|
||||||
{on-open on-open-f
|
|
||||||
on-close on-close-f})))]
|
|
||||||
[[url sse-handler]
|
|
||||||
[(str "/sse" url) sse-handler]]))
|
|
||||||
|
|
||||||
|
|
||||||
;; broadcast utils
|
;; broadcast utils
|
||||||
(defn try!
|
(defn try!
|
||||||
@ -127,21 +119,38 @@
|
|||||||
(swap! conns disj conn)))
|
(swap! conns disj conn)))
|
||||||
|
|
||||||
;; http stuffs
|
;; http stuffs
|
||||||
(defn defaction [url f]
|
(defn defpage
|
||||||
|
([page]
|
||||||
|
(defpage (:url page) (:view page)))
|
||||||
|
([endpoint view]
|
||||||
|
[[endpoint
|
||||||
|
{:handler (fn [request respond _]
|
||||||
|
(page request respond endpoint view))}]
|
||||||
|
[(str "/sse" endpoint)
|
||||||
|
{:handler (fn [request respond _]
|
||||||
|
(page request respond endpoint view))}]]))
|
||||||
|
|
||||||
|
(defn defaction
|
||||||
|
([action]
|
||||||
|
(defaction (:url action) (:fn action)))
|
||||||
|
([url f]
|
||||||
|
(let [sse-handler
|
||||||
|
(fn [request respond raise_]
|
||||||
|
(respond
|
||||||
|
(->sse-response
|
||||||
|
request
|
||||||
|
{on-open #(d*/with-open-sse % (f %))})))]
|
||||||
|
[[url sse-handler]
|
||||||
|
[(str "/sse" url) sse-handler]])))
|
||||||
|
|
||||||
|
(defn defaction-async [url on-open-f on-close-f]
|
||||||
(let [sse-handler
|
(let [sse-handler
|
||||||
(fn [request respond raise_]
|
(fn [request respond raise_]
|
||||||
(respond
|
(respond
|
||||||
(->sse-response
|
(->sse-response
|
||||||
request
|
request
|
||||||
{on-open #(d*/with-open-sse % (f %))})))]
|
{on-open on-open-f
|
||||||
|
on-close on-close-f})))]
|
||||||
[[url sse-handler]
|
[[url sse-handler]
|
||||||
[(str "/sse" url) sse-handler]]))
|
[(str "/sse" url) sse-handler]]))
|
||||||
|
|
||||||
|
|
||||||
(defn defpage [endpoint view]
|
|
||||||
[[endpoint
|
|
||||||
{:handler (fn [request respond _]
|
|
||||||
(page request respond endpoint view))}]
|
|
||||||
[(str "/sse" endpoint)
|
|
||||||
{:handler (fn [request respond _]
|
|
||||||
(page request respond endpoint view))}]])
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user