From 4571e203180afbf0b9ad412c08109bba013b08a8 Mon Sep 17 00:00:00 2001 From: u <@> Date: Tue, 10 Mar 2026 08:23:57 +0200 Subject: a --- src/lib.rs | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/lib.rs (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..6401829 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,211 @@ +use maud::{html, Markup, PreEscaped, DOCTYPE}; +use regex::Regex; +use worker::*; + +pub mod solar; +use crate::solar::{dow, ganzhi, solar, SexagenaryDate, Term, TERMS}; + +#[event(fetch)] +async fn fetch(req: Request, env: Env, _ctx: Context) -> Result { + let r = Router::new(); + let re = |r: Request, _| Response::redirect(r.url()?.join("shitpit")?); + Router::new() + .get("/journal", re) + .get("/diary", re) + .get("/index.html", |req, _| { + Response::redirect(req.url()?.join("/")?) + }) + .get_async("/shitpit", |req, ctx| async move { + let u = req.url()?; + let a = ctx.env.assets("ASSETS")?; + let mut a = a.fetch(u.join("/_/diary")?, None).await?; + let a = a.text().await?; + let re = Regex::new( + r"(0[1-9]|[1-9]|1[0-2])\/(0[1-9]|[1-9]|1\d|2\d|3[01])\/(\d{2})$", + ).unwrap(); + let mut a: Vec = + a.split('\n').map(|s| s.trim().to_string()).collect(); + bone("shitpit", "look in the sky! it's a bird! it's a plane! no it's superego!", html! { + pre { + @for x in a.into_iter().map(|l| { + if let Some(c) = re.captures(&l) { + let (m, d, y) = (c.get(1), c.get(2), c.get(3)); + let f = |x: Option| x.unwrap().as_str().parse().unwrap(); + let (y, m, d): (usize, usize, usize) = (f(y) + 2000, f(m), f(d)); + let s = solar(y, m, d); + let (dowc, dowl) = dow(y, m, d); + let (y, m, d, t) = (s.year, s.month, s.day, s.term); + let href = l.replace("/", "_"); + html! { + (PreEscaped("")) + a name=(href) { } + a class="sec" href=(format!("#{href}")) { + (format!("{l} {dowl}. {y}年 {m}月 {d}日 ({dowc})")) + @if let Some((t, _)) = t { + (t) + } + } + (PreEscaped("
"))
+                            }
+                        } else {
+                            html! { (PreEscaped(l)) "\n" }
+                        }
+                    }) {
+                        (x)
+                    }
+                }
+            })
+        })
+        .get("/", |_, _| {
+            bone("home", "ataxia.moe: like i heard a transmission from Apollo 13", html! {
+                p style="padding: 1vw" {
+                    "No. Stop." br; br; "Check out "
+                    a href="/shitpit" { "the shitpit" }
+                    " in the meantime."
+                }
+            })
+        })
+        .get("/about", |_, _| {
+            bone("about", "And they completely goddamn disrespected me! Little idiots! Idiots!", html! {
+                p style="padding: 1vw" {
+                    "Ataxia is a nervous system dysfunction consisting of poor coördination of muscle movements such as gait abnormalities, slurring of speech, and eye movement issues."
+                    br; br;
+                    "Hosted on "
+                    a href="https://developers.cloudflare.com/workers/" { "Cloudflare Workers" }
+                    ". Source available once I sort the mess out."
+                }
+            })
+        })
+        .or_else_any_method("/*catchall", |_, _| {
+            Ok(bone("", "404 Not Found", html! {
+                p style="padding: 1vw" { "what?" }
+            })?.with_status(404))
+        })
+        .run(req, env)
+        .await
+}
+
+fn header() -> Markup {
+    let css = r#"/* i dont know css im so fucking sorry ill fix it l8r */
+pre {
+  white-space: pre-wrap;
+  white-space: -moz-pre-wrap;
+  white-space: -pre-wrap;
+  white-space: -o-pre-wrap;
+  word-wrap: break-word;
+}
+.remark {
+  box-sizing: content-box;
+  border-top: 0px solid #000;
+  border-left: 0px solid #000;
+  border-right: 0px solid #000;
+  border-bottom: 1px solid #000;
+  padding: 1vw;
+  padding-top: 0;
+}
+.nav {
+  border-bottom: 1px solid #000;
+  padding: 1vw;
+  padding-top: 0;
+}
+main {
+  border: 1px #000 solid;
+}
+body {
+  background-color: #eee;
+}
+
+@media only screen and (min-width: 800px) {
+
+  p, a.sec, pre {
+    padding: 0 4vw;
+/*align: center;
+display:flex;
+align-items: center;
+justify-content: center;*/
+  }
+}
+pre {
+  font-size: 12pt;
+}
+a, p { font-size: 14pt; }
+a.splink { color: #005953; font-size: inherit; }
+a.sec, a.menu, a.menuon {
+  color: #005953;
+  font-family: 'Iansui', serif;
+  font-size: 1.5em;
+}
+a.sec:link, a.sec:visited, a.sec:active {
+   text-decoration: none;
+}
+a.sec:hover, a.sec:focus {
+   text-decoration: underline;
+}
+a.menu:link, a.menu:visited, a.menu:active {
+   text-decoration: none;
+}
+a.menu:hover, a.menu:focus {
+   text-decoration: underline;
+}
+@media (prefers-color-scheme: dark) {
+  body {
+    background-color: #222;
+    color: #dcdccc;
+  }
+  .nav, .remark {
+    border-bottom: 1px solid #dcdccc;
+  }
+  main {
+    border: 1px #dcdccc solid;
+  }
+  a.splink, a.sec, a.menu, a.menuon { color: #51bd96; }
+}
+@font-face {
+  font-family: 'Iansui';
+  font-style: normal;
+  font-display: swap;
+  font-weight: 400;
+  src: url(/_/iansui.woff2) format('woff2');
+  unicode-range: U+3000-303F,U+3105-312F,U+4E00-9FFF;
+}
+body {
+  max-width: 960px;
+  margin-left: auto;
+  margin-right: auto;
+}"#;
+    html! {
+        (DOCTYPE)
+        style { (PreEscaped(css)) }
+        (PreEscaped(r#""#))
+    }
+}
+
+fn menu(nav: &str) -> Markup {
+    html! {
+        div class="nav" {
+            @let navs = ["home", "shitpit", "about"];
+            @for (i, &n) in navs.iter().enumerate() {
+                a class=({if n == nav { "menuon" } else { "menu" }}) href={"/" (n)} {
+                    (n)
+                }
+                @if i != navs.len() - 1 {
+                    " / "
+                }
+            }
+        }
+    }
+}
+
+fn bone(wh: &str, rm: &str, b: Markup) -> Result {
+    Response::from_html(
+        (html! {
+            (header())
+            main id="content" {
+                h2 class="remark" { (rm) }
+                (menu(wh))
+                (b)
+            }
+        })
+        .into_string(),
+    )
+}
-- 
cgit v1.2.3