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;
|
2023-05-18 00:11:52 +02:00
|
|
|
pub mod trip;
|
2023-05-17 17:47:26 +02:00
|
|
|
|
2023-05-08 00:05:45 +02:00
|
|
|
pub use home::*;
|
|
|
|
|
pub use inventory::*;
|
2023-05-18 00:11:52 +02:00
|
|
|
pub use trip::*;
|
2023-05-08 00:05:45 +02:00
|
|
|
|
2023-08-29 21:33:59 +02:00
|
|
|
pub struct Root;
|
2023-05-08 00:05:45 +02:00
|
|
|
|
|
|
|
|
pub enum TopLevelPage {
|
|
|
|
|
Inventory,
|
|
|
|
|
Trips,
|
|
|
|
|
None,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Root {
|
2023-08-29 21:33:59 +02:00
|
|
|
pub fn build(body: Markup, active_page: &TopLevelPage) -> Markup {
|
|
|
|
|
html!(
|
2023-05-08 22:31:01 +02:00
|
|
|
(DOCTYPE)
|
|
|
|
|
html {
|
|
|
|
|
head {
|
|
|
|
|
title { "Packager" }
|
2023-08-29 21:33:59 +02:00
|
|
|
script src="https://unpkg.com/htmx.org@1.9.2" {}
|
2023-05-08 22:31:01 +02:00
|
|
|
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"))) }
|
|
|
|
|
}
|
2023-08-29 21:33:59 +02:00
|
|
|
body hx-boost="true" {
|
2023-05-08 22:31:01 +02:00
|
|
|
header
|
|
|
|
|
."bg-gray-200"
|
|
|
|
|
."p-5"
|
|
|
|
|
."flex"
|
|
|
|
|
."flex-row"
|
|
|
|
|
."flex-nowrap"
|
|
|
|
|
."justify-between"
|
|
|
|
|
."items-center"
|
|
|
|
|
{
|
|
|
|
|
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-08-29 21:33:59 +02:00
|
|
|
(body)
|
2023-05-08 22:31:01 +02:00
|
|
|
}
|
|
|
|
|
}
|
2023-08-29 21:33:59 +02:00
|
|
|
)
|
2023-05-08 00:05:45 +02:00
|
|
|
}
|
2023-08-29 21:33:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub struct ErrorPage;
|
2023-05-08 00:05:45 +02:00
|
|
|
|
2023-08-29 21:33:59 +02:00
|
|
|
impl ErrorPage {
|
|
|
|
|
pub fn build(message: &str) -> Markup {
|
2023-08-29 21:33:59 +02:00
|
|
|
html!(
|
|
|
|
|
(DOCTYPE)
|
|
|
|
|
html {
|
|
|
|
|
head {
|
|
|
|
|
title { "Packager" }
|
|
|
|
|
}
|
|
|
|
|
body {
|
2023-08-29 21:33:59 +02:00
|
|
|
h1 { "Error" }
|
|
|
|
|
p { (message) }
|
2023-08-29 21:33:59 +02:00
|
|
|
}
|
|
|
|
|
}
|
2023-08-29 21:33:59 +02:00
|
|
|
)
|
2023-05-08 00:05:45 +02:00
|
|
|
}
|
|
|
|
|
}
|