add front end interval stuff
This commit is contained in:
parent
7eacce84c7
commit
7b0b0673b4
8
deps.edn
8
deps.edn
@ -8,12 +8,16 @@
|
|||||||
:git/sha "376c4e2411706b942ea0ab937e4c6218d24fb30f"
|
:git/sha "376c4e2411706b942ea0ab937e4c6218d24fb30f"
|
||||||
:deps/root "sdk/clojure/adapter-ring"}
|
:deps/root "sdk/clojure/adapter-ring"}
|
||||||
datastar/expressions {:git/url "https://github.com/ramblurr/datastar-expressions/"
|
datastar/expressions {:git/url "https://github.com/ramblurr/datastar-expressions/"
|
||||||
:git/sha "8db9d4bf5a178912ca173f67671fd9dba6b14f90"}
|
:git/sha "79027495e385a92ce968494b748adbdc65a780a1"}
|
||||||
ring/ring-jetty-adapter {:mvn/version "1.13.0"}
|
ring/ring-jetty-adapter {:mvn/version "1.13.0"}
|
||||||
metosin/reitit {:mvn/version "0.7.2"}
|
metosin/reitit {:mvn/version "0.7.2"}
|
||||||
dev.onionpancakes/chassis {:mvn/version "1.0.365"}
|
dev.onionpancakes/chassis {:mvn/version "1.0.365"}
|
||||||
com.cnuernber/charred {:mvn/version "1.034"}
|
com.cnuernber/charred {:mvn/version "1.034"}
|
||||||
org.clojure/data.json {:mvn/version "2.5.1"}}
|
org.clojure/data.json {:mvn/version "2.5.1"}
|
||||||
|
ring-logger/ring-logger {:mvn/version "1.1.1"}
|
||||||
|
org.slf4j/slf4j-api {:mvn/version "2.0.17"}
|
||||||
|
org.slf4j/slf4j-simple {:mvn/version "2.0.17"}
|
||||||
|
}
|
||||||
|
|
||||||
:aliases
|
:aliases
|
||||||
{:repl {:extra-paths ["src/dev"]
|
{:repl {:extra-paths ["src/dev"]
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
(ns example.core
|
(ns example.core
|
||||||
(:require
|
(:require
|
||||||
[example.utils :refer [html->str defpage defaction defaction-async keep-open] :as u]
|
[example.utils
|
||||||
|
:refer [html->str defpage defaction defaction-async
|
||||||
|
keep-open action-on-click navigate-on-click]
|
||||||
|
:as u]
|
||||||
|
[starfederation.datastar.clojure.api :as d*]
|
||||||
[starfederation.datastar.clojure.expressions :refer [->expr]]
|
[starfederation.datastar.clojure.expressions :refer [->expr]]
|
||||||
[reitit.ring :as rr]
|
[reitit.ring :as rr]
|
||||||
[ring.util.response :as ruresp]))
|
[ring.util.response :as ruresp]))
|
||||||
@ -23,23 +27,34 @@
|
|||||||
(defpage home-page
|
(defpage home-page
|
||||||
(html->str
|
(html->str
|
||||||
[:main
|
[:main
|
||||||
|
[:pre {:data-json-signals true}]
|
||||||
[:div
|
[:div
|
||||||
[:input {:data-bind "msg"}]
|
[:h2 "server side fun:"]
|
||||||
[:div {:data-text "$msg"}]
|
[:div {:data-signal "msg"}]
|
||||||
[:button {:data-on-click (->expr (@post ~hello-world ~keep-open))}
|
[:p {:data-text "$msg"}]
|
||||||
|
[:button (action-on-click hello-world)
|
||||||
"click for text animation"]]
|
"click for text animation"]]
|
||||||
[:button {:data-on-click (->expr (@post ~page-2))}
|
[:div
|
||||||
"go to page 2"]]))
|
[:button (action-on-click say-hi)
|
||||||
|
"say hi to everyone"]]
|
||||||
|
[:a {:href page-2}
|
||||||
|
"go to back page 2"]]))
|
||||||
|
|
||||||
(defpage page-2
|
(defpage page-2
|
||||||
(html->str
|
(html->str
|
||||||
[:main
|
[:main
|
||||||
|
[:pre {:data-json-signals true}]
|
||||||
|
[:div {:data-signals (->expr {:count 0})}]
|
||||||
|
[:div {:data-on-interval__duration.500ms
|
||||||
|
(->expr (set! $count (inc (int $count))))}]
|
||||||
|
[:div {:data-computed-msg2 (->expr (.substring "hello, world!" 0 $count))}]
|
||||||
[:div
|
[:div
|
||||||
[:p "this is page2"]
|
[:h2 "client side fun:"]
|
||||||
[:button {:data-on-click (->expr (@post ~say-hi))}
|
[:p {:data-text "$msg2"}]
|
||||||
"say hi to everyone"]]
|
[:button {:data-on-click (->expr (set! $count 0))}
|
||||||
[:button {:data-on-click (->expr (@post ~home-page))}
|
"click for text animation"]]
|
||||||
"go back to home"]]))
|
[:a {:href home-page}
|
||||||
|
"go back home"]]))
|
||||||
|
|
||||||
;; http app server
|
;; http app server
|
||||||
(def routes
|
(def routes
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
(ns example.server
|
(ns example.server
|
||||||
(:require
|
(:require
|
||||||
[example.core :as c]
|
[example.core :as c]
|
||||||
[ring.adapter.jetty :as jetty])
|
[ring.adapter.jetty :as jetty]
|
||||||
|
[ring.logger :as logger])
|
||||||
(:import
|
(:import
|
||||||
org.eclipse.jetty.server.Server))
|
org.eclipse.jetty.server.Server))
|
||||||
|
|
||||||
@ -11,7 +12,7 @@
|
|||||||
(let [opts (merge {:port 80 :join? false}
|
(let [opts (merge {:port 80 :join? false}
|
||||||
opts)]
|
opts)]
|
||||||
(println "Starting server on port:" (:port opts))
|
(println "Starting server on port:" (:port opts))
|
||||||
(jetty/run-jetty handler opts)))
|
(jetty/run-jetty (logger/wrap-with-logger handler) opts)))
|
||||||
|
|
||||||
(defn stop! [server]
|
(defn stop! [server]
|
||||||
(println "Stopping server")
|
(println "Stopping server")
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
[ring.util.response :as ruresp]
|
[ring.util.response :as ruresp]
|
||||||
[starfederation.datastar.clojure.api :as d*]
|
[starfederation.datastar.clojure.api :as d*]
|
||||||
[starfederation.datastar.clojure.adapter.ring :refer [->sse-response on-open on-close] :as dr]
|
[starfederation.datastar.clojure.adapter.ring :refer [->sse-response on-open on-close] :as dr]
|
||||||
[clojure.data.json :as json]))
|
[clojure.data.json :as json]
|
||||||
|
[starfederation.datastar.clojure.expressions :refer [->expr]]
|
||||||
|
))
|
||||||
|
|
||||||
(declare conns add-elements! sse-navigate! disconnect-sse!)
|
(declare conns add-elements! sse-navigate! disconnect-sse!)
|
||||||
|
|
||||||
@ -38,6 +40,12 @@
|
|||||||
|
|
||||||
(def keep-open {:openWhenHidden true})
|
(def keep-open {:openWhenHidden true})
|
||||||
|
|
||||||
|
(defn navigate-on-click [url]
|
||||||
|
{:data-on-click (->expr (@get ~url))})
|
||||||
|
|
||||||
|
(defn action-on-click [url]
|
||||||
|
{:data-on-click (->expr (@post ~url ~keep-open))})
|
||||||
|
|
||||||
;; 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')"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user