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

132 lines
4.9 KiB
Rust
Raw Normal View History

2023-08-29 21:33:59 +02:00
use maud::{html, Markup, PreEscaped, 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-08-29 21:33:59 +02:00
pub struct Root;
2023-05-08 00:05:45 +02:00
2023-08-29 21:34:00 +02:00
#[derive(PartialEq, Eq)]
2023-05-08 00:05:45 +02:00
pub enum TopLevelPage {
Inventory,
Trips,
None,
}
impl Root {
2023-08-29 21:34:00 +02:00
pub fn build(body: &Markup, active_page: &TopLevelPage) -> Markup {
2023-08-29 21:33:59 +02:00
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-08-29 21:33:59 +02:00
script src="https://unpkg.com/alpinejs@3.12.1" defer {}
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 {}
2023-08-29 21:34:00 +02:00
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" {}
2023-08-29 21:33:59 +02:00
script { (PreEscaped(include_str!(concat!(env!("CARGO_MANIFEST_DIR"),"/js/app.js")))) }
2023-08-29 21:34:00 +02:00
meta name="htmx-config" content=r#"{"useTemplateFragments":true}"# {}
2023-05-08 22:31:01 +02:00
}
2023-08-29 21:33:59 +02:00
body
{
2023-05-08 22:31:01 +02:00
header
2023-08-29 21:34:00 +02:00
#header
2023-08-29 21:34:00 +02:00
."h-16"
2023-05-08 22:31:01 +02:00
."bg-gray-200"
."flex"
."flex-row"
."flex-nowrap"
."justify-between"
2023-08-29 21:34:00 +02:00
."items-stretch"
2023-05-08 22:31:01 +02:00
{
2023-08-29 21:34:00 +02:00
a
#home
hx-boost="true"
href="/"
2023-08-29 21:33:59 +02:00
."flex"
."flex-row"
."items-center"
."gap-3"
2023-08-29 21:34:00 +02:00
."px-5"
."hover:bg-gray-300"
2023-08-29 21:33:59 +02:00
{
2023-08-29 21:34:00 +02:00
img ."h-12" src="/assets/luggage.svg" {}
2023-08-29 21:34:00 +02:00
span
."text-xl"
."font-semibold"
{ "Packager" }
2023-05-08 22:31:01 +02:00
}
2023-08-29 21:33:59 +02:00
nav
."grow"
."flex"
."flex-row"
."justify-center"
."gap-x-10"
2023-08-29 21:34:00 +02:00
."items-stretch"
2023-08-29 21:33:59 +02:00
{
2023-08-29 21:34:00 +02:00
a
href="/inventory/"
hx-boost="true"
2023-08-29 21:34:00 +02:00
#header-link-inventory
2023-08-29 21:34:00 +02:00
."px-5"
."flex"
2023-08-29 21:33:59 +02:00
."h-full"
."text-lg"
2023-08-29 21:34:00 +02:00
."hover:bg-gray-300"
// invisible top border to fix alignment
."border-t-gray-200"[active_page == &TopLevelPage::Inventory]
."hover:border-t-gray-300"[active_page == &TopLevelPage::Inventory]
."border-b-gray-500"[active_page == &TopLevelPage::Inventory]
."border-y-4"[active_page == &TopLevelPage::Inventory]
."font-bold"[active_page == &TopLevelPage::Inventory]
{ span ."m-auto" ."font-semibold" { "Inventory" }}
a
href="/trips/"
hx-boost="true"
2023-08-29 21:34:00 +02:00
#header-link-trips
2023-08-29 21:34:00 +02:00
."px-5"
."flex"
2023-08-29 21:33:59 +02:00
."h-full"
."text-lg"
2023-08-29 21:34:00 +02:00
."hover:bg-gray-300"
// invisible top border to fix alignment
."border-t-gray-200"[active_page == &TopLevelPage::Trips]
."hover:border-t-gray-300"[active_page == &TopLevelPage::Trips]
."border-gray-500"[active_page == &TopLevelPage::Trips]
."border-y-4"[active_page == &TopLevelPage::Trips]
."font-bold"[active_page == &TopLevelPage::Trips]
{ span ."m-auto" ."font-semibold" { "Trips" }}
2023-05-08 22:31:01 +02:00
}
}
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
}
}