all repos — breadsite @ 28d25801570abc207e310b18e710fa24610cc2aa

Unnamed repository; edit this file 'description' to name the repository.

breading the site
confusedbread confuseddbread@gmail.com
Mon, 30 Jun 2025 05:14:12 +0200
commit

28d25801570abc207e310b18e710fa24610cc2aa

parent

20c1016ac4d03c879fbca96bf4aa6ad4f89037ac

2 files changed, 61 insertions(+), 52 deletions(-)

jump to
M src/main.rssrc/main.rs

@@ -1,12 +1,14 @@

-use actix_web::{get, App, HttpServer, Result as AwResult}; +use actix_web::{get, web, App, HttpServer, Result as AwResult}; use actix_files::Files; use maud::{DOCTYPE, html, Markup}; use std::io; use chrono::Local; +#[derive(Clone)] struct NavElement { name: String, href: String, + class: String } fn head(page_title: &str) -> Markup {

@@ -20,42 +22,35 @@ }

} } -fn nav_bar(elements: Vec<NavElement>) -> Markup { +fn nav_bar(mut elements: Vec<NavElement>, current: &str) -> Markup { + elements.first_mut().map(|e| e.class.push_str(" first")); + elements.last_mut().map(|e| e.class.push_str(" last")); + elements.iter_mut().filter(|e| e.href == current).for_each(|e| e.class.push_str(" current")); + html!( nav.navBar { @for (i, element) in elements.iter().enumerate() { - @if i == 0 { - ( nav_element("navElement first", i, element) ) - } @else if i == elements.len()-1 { - ( nav_element("navElement last", i, element) ) - } @else if i == 1 { - ( nav_element("navElement current", i, element) ) - } @else { - ( nav_element("navElement", i, element) ) - } + ( nav_element(i, element) ) } } ) } -fn nav_element(element_class: &str, id: usize, element: &NavElement) -> Markup { +fn nav_element(id: usize, element: &NavElement) -> Markup { html!( - a class={( element_class.to_string() )} id={(format!("navElement-{}", id))} href={( element.href )} {( element.name )} + a class={( element.class.to_string() )} id={(format!("navElement-{}", id))} href={( element.href )} {( element.name )} ) } -fn header() -> Markup{ - let time = Local::now(); +fn header(current: &str) -> Markup{ html!( header { (nav_bar(vec![ - NavElement{ name: "breadsite".to_string(), href: "/".to_string()}, - NavElement{ name: "test1".to_string(), href: "test1".to_string()}, - NavElement{ name: "test2".to_string(), href: "test2".to_string()}, - NavElement{ name: ":333".to_string(), href: ":3".to_string()}, - NavElement{ name: time.to_string(), href: time.to_string()}, - ])) + NavElement{ name: "breadsite".to_string(), href: "/".to_string(), class: String::from("navElement")}, + NavElement{ name: "test".to_string(), href: "/test".to_string(), class: String::from("navElement")}, + NavElement{ name: ":333".to_string(), href: "/3".to_string(), class: String::from("navElement")}, + ], current)) } ) }

@@ -68,34 +63,50 @@ }

} } -fn layout() -> Markup { +fn breadsite() -> Markup { html! { - (header()) h1 { "Hiiii" } - (pawer()) } } -fn page() -> Markup { +fn layout(page_title: &str, current: &str,site: Markup) -> Markup { html! { - (head("breadsite")) + (head(page_title)) body { - (layout()) + (header(current)) + (site) + (pawer()) } } } #[get("/")] -async fn index() -> AwResult<Markup> { +async fn breadsite_index() -> AwResult<Markup> { + Ok(html! { + (layout("breadsite", "/", breadsite())) + }) +} + +#[get("/test")] +async fn breadsite_test() -> AwResult<Markup> { + Ok(html! { + (layout("test", "/test", breadsite())) + }) +} + +#[get("/3")] +async fn breadsite_3() -> AwResult<Markup> { Ok(html! { - (page()) + (layout(":333", "/3", breadsite())) }) } #[actix_web::main] async fn main() -> io::Result<()> { HttpServer::new(|| App::new() - .service(index) + .service(breadsite_index) + .service(breadsite_test) + .service(breadsite_3) .service(Files::new("/static", "./static")) ) .bind(("localhost", 8080))?
M static/style.cssstatic/style.css

@@ -390,19 +390,19 @@ }

#navElement-0 { z-index:4; - &:hover{ + &:hover { height: 2.2rem !important; margin-bottom: 0 !important; position: relative; - &::before{ + &::before { content: ""; position: absolute; width: 100vw; - border: 0.1rem solid var(--nav-0); + border: 0.12rem solid var(--nav-0); bottom: 0; - right: 2rem; + right: 0.9rem; } box-shadow: inset -0.2rem -0.2rem var(--nav-0),

@@ -422,19 +422,19 @@ }

#navElement-1 { z-index:3; - &:hover{ + &:hover { height: 2.2rem !important; margin-bottom: 0 !important; position: relative; - &::before{ + &::before { content: ""; position: absolute; width: 100vw; - border: 0.1rem solid var(--nav-1); + border: 0.12rem solid var(--nav-1); bottom: 0; - right: 2rem; + right: 0.9rem; } box-shadow: inset -0.2rem -0.2rem var(--nav-1),

@@ -454,19 +454,19 @@ }

#navElement-2 { z-index:2; - &:hover{ + &:hover { height: 2.2rem !important; margin-bottom: 0 !important; position: relative; - &::before{ + &::before { content: ""; position: absolute; width: 100vw; - border: 0.1rem solid var(--nav-2); + border: 0.12rem solid var(--nav-2); bottom: 0; - right: 2rem; + right: 0.9rem; } box-shadow: inset -0.2rem -0.2rem var(--nav-2),

@@ -486,19 +486,18 @@ }

#navElement-3 { z-index:1; - &:hover{ + &:hover { height: 2.2rem !important; margin-bottom: 0 !important; - position: relative; - &::before{ + &::before { content: ""; position: absolute; width: 100vw; - border: 0.1rem solid var(--nav-3); + border: 0.12rem solid var(--nav-3); bottom: 0; - right: 2rem; + right: 0.9rem; } box-shadow: inset -0.2rem -0.2rem var(--nav-3),

@@ -518,19 +517,18 @@ }

#navElement-4 { z-index:0; - &:hover{ + &:hover { height: 2.2rem !important; margin-bottom: 0 !important; - position: relative; - &::before{ + &::before { content: ""; position: absolute; width: 100vw; - border: 0.1rem solid var(--nav-4); + border: 0.12rem solid var(--nav-4); bottom: 0; - right: 2rem; + right: 0.9rem; } box-shadow: inset -0.2rem -0.2rem var(--nav-4),