Page meta from frontmatter
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
use assetserver::Asset;
|
||||
use axum::Router;
|
||||
use maud::{DOCTYPE, PreEscaped, html};
|
||||
use maud::{DOCTYPE, Markup, PreEscaped, html};
|
||||
use tracing::info;
|
||||
|
||||
use crate::{components::misc::FarLink, page::PageServer, pages, routes::assets::Styles_Main};
|
||||
use crate::{
|
||||
components::misc::FarLink,
|
||||
page::{Page, PageServer},
|
||||
pages,
|
||||
routes::assets::Styles_Main,
|
||||
};
|
||||
|
||||
pub mod assets;
|
||||
|
||||
@@ -11,52 +16,64 @@ pub(super) fn router() -> Router<()> {
|
||||
let (asset_prefix, asset_router) = assets::asset_router();
|
||||
info!("Serving assets at {asset_prefix}");
|
||||
|
||||
let server = PageServer::new(Box::new(|page| {
|
||||
html! {
|
||||
(DOCTYPE)
|
||||
html {
|
||||
head {
|
||||
meta charset="UTF" {}
|
||||
meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" {}
|
||||
meta content="text/html; charset=UTF-8" http-equiv="content-type" {}
|
||||
meta property="og:type" content="website" {}
|
||||
let server = build_server().into_router();
|
||||
|
||||
link rel="stylesheet" href=(Styles_Main::URL) {}
|
||||
Router::new().merge(server).nest(asset_prefix, asset_router)
|
||||
}
|
||||
|
||||
(&page.meta)
|
||||
title { (PreEscaped(page.meta.title.clone())) }
|
||||
}
|
||||
fn build_server() -> PageServer {
|
||||
PageServer::new(Box::new(page_wrapper))
|
||||
.add_page("/", pages::index())
|
||||
.add_page("/links", pages::links())
|
||||
.add_page("/whats-a-betalupi", pages::betalupi())
|
||||
.add_page("/handouts", pages::handouts())
|
||||
}
|
||||
|
||||
body {
|
||||
div class="wrapper" {
|
||||
main { ( page.generate_html() ) }
|
||||
fn page_wrapper(page: &Page) -> Markup {
|
||||
html! {
|
||||
(DOCTYPE)
|
||||
html {
|
||||
head {
|
||||
meta charset="UTF" {}
|
||||
meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" {}
|
||||
meta content="text/html; charset=UTF-8" http-equiv="content-type" {}
|
||||
meta property="og:type" content="website" {}
|
||||
|
||||
footer {
|
||||
hr class = "footline" {}
|
||||
div class = "footContainer" {
|
||||
p {
|
||||
"This site was built by hand using "
|
||||
(FarLink("https://rust-lang.org", "Rust"))
|
||||
", "
|
||||
(FarLink("https://maud.lambda.xyz", "Maud"))
|
||||
", "
|
||||
(FarLink("https://github.com/connorskees/grass", "Grass"))
|
||||
", and "
|
||||
(FarLink("https://docs.rs/axum/latest/axum", "Axum"))
|
||||
"."
|
||||
}
|
||||
link rel="stylesheet" href=(Styles_Main::URL) {}
|
||||
|
||||
(&page.meta)
|
||||
title { (PreEscaped(page.meta.title.clone())) }
|
||||
}
|
||||
|
||||
body {
|
||||
div class="wrapper" {
|
||||
main { ( page.generate_html() ) }
|
||||
|
||||
footer {
|
||||
hr class = "footline" {}
|
||||
div class = "footContainer" {
|
||||
p {
|
||||
"This site was built by hand using "
|
||||
(FarLink("https://rust-lang.org", "Rust"))
|
||||
", "
|
||||
(FarLink("https://maud.lambda.xyz", "Maud"))
|
||||
", "
|
||||
(FarLink("https://github.com/connorskees/grass", "Grass"))
|
||||
", and "
|
||||
(FarLink("https://docs.rs/axum/latest/axum", "Axum"))
|
||||
"."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}))
|
||||
.add_page("/", pages::index::page())
|
||||
.add_page("/links", pages::links::page())
|
||||
.add_page("/whats-a-betalupi", pages::betalupi::page())
|
||||
.add_page("/handouts", pages::handouts::page())
|
||||
.into_router();
|
||||
|
||||
Router::new().merge(server).nest(asset_prefix, asset_router)
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn server_builds_without_panic() {
|
||||
// Catches some runtime errors thrown by axum,
|
||||
// e.g bad route nesting or routes not starting with "/"
|
||||
let _server = build_server().into_router();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user