Files
packager/rust/src/components/mod.rs

73 lines
2.3 KiB
Rust
Raw Normal View History

2023-05-08 22:31:01 +02:00
use maud::{html, Markup, DOCTYPE};
2023-05-08 00:05:45 +02:00
pub mod home;
pub mod inventory;
pub mod triplist;
pub use home::*;
pub use inventory::*;
pub use triplist::*;
pub struct Root {
2023-05-08 22:31:01 +02:00
doc: Markup,
2023-05-08 00:05:45 +02:00
}
pub enum TopLevelPage {
Inventory,
Trips,
None,
}
impl Root {
2023-05-10 01:02:37 +02:00
pub fn build(body: Markup, active_page: &TopLevelPage) -> Self {
2023-05-08 00:05:45 +02:00
let doc = html!(
2023-05-08 22:31:01 +02:00
(DOCTYPE)
html {
head {
title { "Packager" }
script src="https://unpkg.com/htmx.org@1.7.0" {}
script src="https://cdn.tailwindcss.com" {}
script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.js" defer {}
link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css";
script { (include_str!(concat!(env!("CARGO_MANIFEST_DIR"),"/js/app.js"))) }
}
body {
header
."bg-gray-200"
."p-5"
."flex"
."flex-row"
."flex-nowrap"
."justify-between"
."items-center"
hx-boost="true"
{
span ."text-xl" ."font-semibold" {
a href="/" { "Packager" }
}
nav ."grow" ."flex" ."flex-row" ."justify-center" ."gap-x-6" {
a href="/inventory/" class={@match active_page {
TopLevelPage::Inventory => "text-lg font-bold underline",
_ => "text-lg",
}} { "Inventory" }
a href="/trips/" class={@match active_page {
TopLevelPage::Trips => "text-lg font-bold underline",
_ => "text-lg",
}} { "Trips" }
}
}
2023-05-17 17:31:48 +02:00
div hx-boost="true" {
2023-05-08 22:31:01 +02:00
(body)
}
}
}
2023-05-08 00:05:45 +02:00
);
Self { doc }
}
2023-05-10 00:48:25 +02:00
pub fn into_string(self) -> String {
2023-05-08 22:31:01 +02:00
self.doc.into_string()
2023-05-08 00:05:45 +02:00
}
}