From 5f516f71f9ad22e53009ec2e04c9affde3e66f0b Mon Sep 17 00:00:00 2001
From: insects <mail@liv.nrw>
Date: Fri, 7 Feb 2025 15:35:44 +0100
Subject: [PATCH] add changelog and logout functionality

---
 src/changelog.rs         | 25 +++++++++++++++++++++++++
 src/main.rs              | 12 ++++++++++++
 static/scripts/logout.js |  9 +++++++++
 static/style.css         |  3 ++-
 4 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 src/changelog.rs
 create mode 100644 static/scripts/logout.js

diff --git a/src/changelog.rs b/src/changelog.rs
new file mode 100644
index 0000000..9d98b68
--- /dev/null
+++ b/src/changelog.rs
@@ -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" }
+            }
+        }
+    })
+}
diff --git a/src/main.rs b/src/main.rs
index d8c6e46..f2c82f6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -12,9 +12,11 @@ use maud::{html, Markup};
 use nanoid::nanoid;
 use serde::Deserialize;
 use sqlx::{postgres::PgPoolOptions, Pool, Postgres};
+use templates::layout;
 use tower_http::{services::ServeDir, trace::TraceLayer};
 use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
 
+pub mod changelog;
 pub mod clock;
 pub mod data;
 pub mod db;
@@ -146,6 +148,16 @@ async fn main() {
         .route("/to", get(to_handler))
         .route("/{id}", get(main_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())
         .nest_service("/static", ServeDir::new("static"))
         .with_state(Arc::new(AppState {
diff --git a/static/scripts/logout.js b/static/scripts/logout.js
new file mode 100644
index 0000000..93b6356
--- /dev/null
+++ b/static/scripts/logout.js
@@ -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 = "/";
+}
diff --git a/static/style.css b/static/style.css
index 1f51142..2f58d9e 100644
--- a/static/style.css
+++ b/static/style.css
@@ -3,7 +3,8 @@ body {
     margin: 40px;
 }
 
-section {
+section.up,
+section.always-up {
     margin-bottom: 5px;
     display: grid;
     grid-template-columns: 1fr 1fr 1fr 1fr;