Compare commits

...

3 commits

5 changed files with 67 additions and 1 deletions

25
src/changelog.rs Normal file
View file

@ -0,0 +1,25 @@
use maud::{html, Markup};
use crate::templates::layout;
pub fn changelog_page() -> Markup {
layout(html! {
h1 { "Beacon Changelog" }
section {
h2 { "1.1.0, 07.02.2025" }
ul {
li { "Fish now directly display their non-relative dates for their next or current window" }
li { "Additionally, fish that are up now display the starting time for the subsequent window" }
li { "The site now saves your account ID in your browser storage, and automatically redirects you on page visit" }
}
}
section {
h2 { "1.0.0, 06.02.2025" }
ul {
li { "Initial release" }
}
}
})
}

View file

@ -12,9 +12,11 @@ use maud::{html, Markup};
use nanoid::nanoid; use nanoid::nanoid;
use serde::Deserialize; use serde::Deserialize;
use sqlx::{postgres::PgPoolOptions, Pool, Postgres}; use sqlx::{postgres::PgPoolOptions, Pool, Postgres};
use templates::layout;
use tower_http::{services::ServeDir, trace::TraceLayer}; use tower_http::{services::ServeDir, trace::TraceLayer};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
pub mod changelog;
pub mod clock; pub mod clock;
pub mod data; pub mod data;
pub mod db; pub mod db;
@ -146,6 +148,16 @@ async fn main() {
.route("/to", get(to_handler)) .route("/to", get(to_handler))
.route("/{id}", get(main_handler)) .route("/{id}", get(main_handler))
.route("/{acc_id}/catch/{fish_id}", post(insert_cf_handler)) .route("/{acc_id}/catch/{fish_id}", post(insert_cf_handler))
.route("/changelog", get(|| async { changelog::changelog_page() }))
.route(
"/logout",
get(|| async {
layout(html! {
h1 { "Logging you out, please wait to be redirected..." }
script src="/static/scripts/logout.js" type="text/javascript" {}
})
}),
)
.layer(TraceLayer::new_for_http()) .layer(TraceLayer::new_for_http())
.nest_service("/static", ServeDir::new("static")) .nest_service("/static", ServeDir::new("static"))
.with_state(Arc::new(AppState { .with_state(Arc::new(AppState {

View file

@ -156,9 +156,15 @@ pub fn main_page(
}; };
let template = html! { let template = html! {
span style="display: none;" id="account-id" { (acc_id) }
.header { .header {
div {} div {}
.side { .side {
.menu {
span { "Beacon " (env!("CARGO_PKG_VERSION")) }
a href="/changelog" { "Changelog" }
a href="/logout" { "Log out" }
}
details { details {
summary { "Filters" } summary { "Filters" }
form { form {
@ -202,6 +208,8 @@ pub fn main_page(
div id="list" hx-get="" hx-trigger="every 10s" hx-swap="innerHTML" hx-target="this" hx-on="changeDates" { div id="list" hx-get="" hx-trigger="every 10s" hx-swap="innerHTML" hx-target="this" hx-on="changeDates" {
(list) (list)
} }
script src="/static/scripts/save.js" type="text/javascript" {}
}; };
if only_list { if only_list {

9
static/scripts/logout.js Normal file
View file

@ -0,0 +1,9 @@
// Removes the local storage entry, and redirects to the index page.
const ls = window.localStorage;
if (ls.getItem("beacon:account-id")) {
console.log("a");
ls.removeItem("beacon:account-id");
window.location.pathname = "/";
} else {
window.location.pathname = "/";
}

View file

@ -3,7 +3,8 @@ body {
margin: 40px; margin: 40px;
} }
section { section.up,
section.always-up {
margin-bottom: 5px; margin-bottom: 5px;
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr 1fr;
@ -17,6 +18,12 @@ section {
align-items: center; align-items: center;
} }
.side {
display: flex;
flex-direction: column;
align-items: end;
}
select { select {
width: 100%; width: 100%;
} }
@ -145,3 +152,8 @@ h2.clock {
summary:hover { summary:hover {
cursor: pointer; cursor: pointer;
} }
.menu {
display: flex;
gap: 5px;
}