adds an indicator

This commit is contained in:
Victor Martinez 2023-07-19 16:52:12 +02:00
parent 9818cc3c7e
commit aec22d1947
6 changed files with 107 additions and 5 deletions

63
Cargo.lock generated
View file

@ -94,7 +94,7 @@ checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
dependencies = [
"async-trait",
"axum-core",
"bitflags",
"bitflags 1.3.2",
"bytes",
"futures-util",
"http",
@ -145,6 +145,7 @@ dependencies = [
"config",
"serde",
"tokio",
"tower-http",
]
[[package]]
@ -183,6 +184,12 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
[[package]]
name = "block-buffer"
version = "0.10.4"
@ -294,6 +301,12 @@ version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
[[package]]
name = "futures-sink"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
[[package]]
name = "futures-task"
version = "0.3.28"
@ -376,6 +389,12 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "http-range-header"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
[[package]]
name = "httparse"
version = "1.8.0"
@ -720,7 +739,7 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags",
"bitflags 1.3.2",
]
[[package]]
@ -730,7 +749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
dependencies = [
"base64",
"bitflags",
"bitflags 1.3.2",
"serde",
]
@ -925,6 +944,19 @@ dependencies = [
"syn",
]
[[package]]
name = "tokio-util"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"pin-project-lite",
"tokio",
]
[[package]]
name = "toml"
version = "0.5.11"
@ -950,6 +982,31 @@ dependencies = [
"tracing",
]
[[package]]
name = "tower-http"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ac8060a61f8758a61562f6fb53ba3cbe1ca906f001df2e53cccddcdbee91e7c"
dependencies = [
"bitflags 2.3.3",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-range-header",
"httpdate",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite",
"tokio",
"tokio-util",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-layer"
version = "0.3.2"

View file

@ -12,3 +12,4 @@ serde = { version = "1.0.167", features = ["derive", "rc"] }
tokio = { version = "1.29.1", features = ["full"] }
anyhow = "1.0.71"
askama = "0.12.0"
tower-http = { version = "0.4.2", features = ["fs"] }

View file

@ -0,0 +1,33 @@
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
<svg width="120" height="30" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#c4a7e7">
<circle cx="15" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="60" cy="15" r="9" fill-opacity="0.3">
<animate attributeName="r" from="9" to="9"
begin="0s" dur="0.8s"
values="9;15;9" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="0.5" to="0.5"
begin="0s" dur="0.8s"
values=".5;1;.5" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="105" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -8,6 +8,7 @@ use axum::{
};
use pages::counter::CounterState;
use std::sync::Arc;
use tower_http::services::ServeDir;
struct AppState {
counter: Arc<CounterState>,
@ -23,6 +24,7 @@ fn router(state: AppState) -> Router {
"/counter/increment",
post(pages::counter::increment).with_state(state.counter),
)
.nest_service("/assets", ServeDir::new("assets"))
}
#[tokio::main]

View file

@ -4,7 +4,10 @@ use axum::{
extract::State,
response::{Html, IntoResponse},
};
use std::sync::{atomic::AtomicUsize, Arc};
use std::{
sync::{atomic::AtomicUsize, Arc},
time::Duration,
};
pub struct CounterState(AtomicUsize);
@ -32,5 +35,8 @@ pub async fn increment(State(state): State<Arc<CounterState>>) -> impl IntoRespo
let previous = state
.0
.fetch_add(increment, std::sync::atomic::Ordering::Relaxed);
tokio::time::sleep(Duration::from_secs(1)).await;
Html(format!("{}", previous + increment))
}

View file

@ -13,9 +13,12 @@
<body>
<div>
<button hx-post="/counter/increment" hx-trigger="click" hx-target="#count">
<button hx-post="/counter/increment" hx-trigger="click" hx-target="#count" hx-indicator="#indicator">
Click Me!
</button>
<div id="indicator" class="htmx-indicator">
<img src="/assets/three-dots-loader.svg">
</div>
<div id="count">{{ count }}</div>
</div>
</body>