use maud::{html, Markup, PreEscaped, DOCTYPE};
pub mod home;
pub mod inventory;
pub mod trip;
pub use home::*;
pub use inventory::*;
pub use trip::*;
pub struct Root;
pub enum TopLevelPage {
Inventory,
Trips,
None,
}
impl Root {
pub fn build(body: &Markup, active_page: &TopLevelPage) -> Markup {
html!(
(DOCTYPE)
html {
head {
title { "Packager" }
script src="https://unpkg.com/htmx.org@1.9.2" {}
script src="https://unpkg.com/alpinejs@3.12.1" defer {}
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";
link rel="shortcut icon" type="image/svg+xml" href="/favicon.svg";
script { (PreEscaped(include_str!(concat!(env!("CARGO_MANIFEST_DIR"),"/js/app.js")))) }
}
body
hx-boost="true"
{
header
."h-full"
."bg-gray-200"
."p-5"
."flex"
."flex-row"
."flex-nowrap"
."justify-between"
."items-center"
{
span
."text-xl"
."font-semibold"
."flex"
."flex-row"
."items-center"
."gap-3"
{
img ."h-12" src="/assets/luggage.svg";
a href="/" { "Packager" }
}
nav
."grow"
."flex"
."flex-row"
."justify-center"
."gap-x-10"
."content-stretch"
{
a href="/inventory/"
."h-full"
."text-lg"
."font-bold"[matches!(active_page, TopLevelPage::Inventory)]
."underline"[matches!(active_page, TopLevelPage::Inventory)]
{ "Inventory" }
a href="/trips/"
."h-full"
."text-lg"
."font-bold"[matches!(active_page, TopLevelPage::Trips)]
."underline"[matches!(active_page, TopLevelPage::Trips)]
{ "Trips" }
}
}
(body)
}
}
)
}
}
pub struct ErrorPage;
impl ErrorPage {
pub fn build(message: &str) -> Markup {
html!(
(DOCTYPE)
html {
head {
title { "Packager" }
}
body {
h1 { "Error" }
p { (message) }
}
}
)
}
}