zomg livereload

This commit is contained in:
Daniel Flanagan 2023-11-10 23:50:21 -06:00
parent 9edcd1896d
commit 0dae560a39
Signed by: lytedev
GPG key ID: 5B2020A0F9921EF4
4 changed files with 89 additions and 28 deletions

15
Cargo.lock generated
View file

@ -319,6 +319,7 @@ dependencies = [
"serde", "serde",
"tokio", "tokio",
"tower-http", "tower-http",
"tower-livereload",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
] ]
@ -848,6 +849,20 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
[[package]]
name = "tower-livereload"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0120131157a67379cccab051900a0fba91ff3e0995fb345127470f06e8b998d"
dependencies = [
"bytes",
"http",
"http-body",
"pin-project-lite",
"tokio",
"tower",
]
[[package]] [[package]]
name = "tower-service" name = "tower-service"
version = "0.3.2" version = "0.3.2"

View file

@ -10,5 +10,6 @@ maud = "0.25.0"
serde = { version = "1.0.192", features = ["derive"] } serde = { version = "1.0.192", features = ["derive"] }
tokio = { version = "1.34.0", features = ["full"] } tokio = { version = "1.34.0", features = ["full"] }
tower-http = { version = "0.4.4", features = ["fs"] } tower-http = { version = "0.4.4", features = ["fs"] }
tower-livereload = "0.8.2"
tracing = "0.1.40" tracing = "0.1.40"
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }

View file

@ -108,37 +108,73 @@ a[class] {
:root { :root {
--font: monospace; --font: monospace;
--bg: #fff; /* catppuccin latte */
--bg2: #eee; --Rosewater: #dc8a78;
--primary: #8b5cf6; --Flamingo: #dd7878;
--text: #111; --Pink: #ea76cb;
--link: #04f; --Mauve: #8839ef;
--Red: #d20f39;
--Maroon: #e64553;
--Peach: #fe640b;
--Yellow: #df8e1d;
--Green: #40a02b;
--Teal: #179299;
--Sky: #04a5e5;
--Sapphire: #209fb5;
--Blue: #1e66f5;
--Lavender: #7287fd;
--Text: #4c4f69;
--Subtext1: #5c5f77;
--Subtext0: #6c6f85;
--Overlay2: #7c7f93;
--Overlay1: #8c8fa1;
--Overlay0: #9ca0b0;
--Surface2: #acb0be;
--Surface1: #bcc0cc;
--Surface0: #ccd0da;
--Base: #eff1f5;
--Mantle: #e6e9ef;
--Crust: #dce0e8;
--bg: var(--Base);
--bg2: var(--Surface0);
--primary: var(--Mauve);
--text: var(--Text);
--link-visited: var(--Lavender);
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
:root { :root {
--bg: #111; /* catppuccin mocha */
--bg2: #222; --Rosewater: #f5e0dc;
--primary: #8b5cf6; --Flamingo: #f2cdcd;
--text: #ccc; --Pink: #f5c2e7;
--link: #0af; --Mauve: #cba6f7;
--link-visited: #faf; --Red: #f38ba8;
--Maroon: #eba0ac;
--Peach: #fab387;
--Yellow: #f9e2af;
--Green: #a6e3a1;
--Teal: #94e2d5;
--Sky: #89dceb;
--Sapphire: #74c7ec;
--Blue: #89b4fa;
--Lavender: #b4befe;
--Text: #cdd6f4;
--Subtext1: #bac2de;
--Subtext0: #a6adc8;
--Overlay2: #9399b2;
--Overlay1: #7f849c;
--Overlay0: #6c7086;
--Surface2: #585b70;
--Surface1: #45475a;
--Surface0: #313244;
--Base: #1e1e2e;
--Mantle: #181825;
--Crust: #11111b;
} }
} }
a:not([class]) {
color: var(--link);
}
a:not([class]):visited {
color: var(--link-visited);
}
a.primary {
color: var(--primary);
text-decoration: none;
}
html { html {
background-color: var(--bg); background-color: var(--bg);
color: var(--text); color: var(--text);
@ -150,18 +186,20 @@ body>header {
justify-content: space-between; justify-content: space-between;
/* border-bottom: solid 1px var(--bg2); */ /* border-bottom: solid 1px var(--bg2); */
background-color: var(--bg); background-color: var(--bg);
box-shadow: 0 -1px 1ex rgba(0, 0, 0, 0.5); box-shadow: 0 -1px 1ex var(--Crust);
} }
body>header>nav { body>header>nav {
justify-content: space-between; justify-content: space-between;
} }
body>header a { body>header a:not([class]) {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 1ex; padding: 1ex;
transition: color 0.1s ease-out, background-color 0.1s ease-out; transition: color 0.1s ease-out, background-color 0.1s ease-out;
text-decoration: none;
color: var(--primary);
} }
body>header a:hover { body>header a:hover {

View file

@ -4,6 +4,7 @@ use axum::{response::Html, routing::get, Router};
use maud::html; use maud::html;
use std::net::SocketAddr; use std::net::SocketAddr;
use tower_http::services::ServeDir; use tower_http::services::ServeDir;
use tower_livereload::LiveReloadLayer;
use tracing::{info, instrument, trace}; use tracing::{info, instrument, trace};
use tracing_subscriber::{ use tracing_subscriber::{
filter::{Directive, LevelFilter}, filter::{Directive, LevelFilter},
@ -46,6 +47,7 @@ fn router() -> Router {
.nest("/app", app_router) .nest("/app", app_router)
.nest_service("/assets", assets_dir) .nest_service("/assets", assets_dir)
.route("/", get(index)) .route("/", get(index))
.layer(LiveReloadLayer::new())
} }
async fn listen(r: Router) { async fn listen(r: Router) {
@ -73,13 +75,18 @@ async fn index() -> Html<String> {
header class="flex" { header class="flex" {
nav class="flex" { nav class="flex" {
h1 { h1 {
a class="primary" href="/" { "lyrs" } a href="/" { "lyrs" }
}
ul class="flex"
{
a href="/login" { "Login" }
} }
} }
nav class="flex" { nav class="flex" {
ul class="flex" ul class="flex"
{ {
a class="primary" href="/login" { "Login" } a href="/register" { "Register" }
a href="/login" { "Login" }
} }
} }
} }