From 4ff866090b657c873256b9cbbaf3f4250b9e0abe Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Fri, 10 Mar 2023 18:41:57 +0100
Subject: [PATCH] templates: added header, with menu system
---
crates/ezidam/src/lib.rs | 1 +
crates/ezidam/src/menu.rs | 24 +++++++++++
crates/ezidam/src/menu/items.rs | 32 ++++++++++++++
crates/ezidam/src/menu/template.rs | 22 ++++++++++
crates/ezidam/src/page.rs | 10 +++++
crates/ezidam/src/page/template.rs | 8 ++++
.../ezidam/templates/shell/header.html.tera | 43 +++++++++++++++++++
crates/ezidam/templates/shell/nav.html.tera | 22 ++++++++++
8 files changed, 162 insertions(+)
create mode 100644 crates/ezidam/src/menu.rs
create mode 100644 crates/ezidam/src/menu/items.rs
create mode 100644 crates/ezidam/src/menu/template.rs
create mode 100644 crates/ezidam/templates/shell/header.html.tera
create mode 100644 crates/ezidam/templates/shell/nav.html.tera
diff --git a/crates/ezidam/src/lib.rs b/crates/ezidam/src/lib.rs
index 9a076b8..a528ef1 100644
--- a/crates/ezidam/src/lib.rs
+++ b/crates/ezidam/src/lib.rs
@@ -6,6 +6,7 @@ mod error;
mod file_from_bytes;
mod guards;
mod id;
+mod menu;
mod page;
mod response_timer;
mod routes;
diff --git a/crates/ezidam/src/menu.rs b/crates/ezidam/src/menu.rs
new file mode 100644
index 0000000..51a6c77
--- /dev/null
+++ b/crates/ezidam/src/menu.rs
@@ -0,0 +1,24 @@
+mod items;
+mod template;
+
+pub use items::Item;
+pub use template::Template;
+
+pub struct Menu {
+ pub selected: Item,
+ pub list: Vec- ,
+}
+
+impl From
- for Menu {
+ fn from(value: Item) -> Self {
+ Self {
+ selected: value,
+ list: list(),
+ }
+ }
+}
+
+/// Declare list of ordered menu items
+fn list() -> Vec
- {
+ vec![Item::Home]
+}
diff --git a/crates/ezidam/src/menu/items.rs b/crates/ezidam/src/menu/items.rs
new file mode 100644
index 0000000..b5648bb
--- /dev/null
+++ b/crates/ezidam/src/menu/items.rs
@@ -0,0 +1,32 @@
+pub enum Item {
+ Home,
+}
+
+impl Item {
+ pub fn id(&self) -> &'static str {
+ match self {
+ Item::Home => "home",
+ }
+ }
+
+ pub fn label(&self) -> &'static str {
+ match self {
+ Item::Home => "Home",
+ }
+ }
+
+ pub fn link(&self) -> &'static str {
+ match self {
+ Item::Home => "/",
+ }
+ }
+
+ /// Find icons on https://tabler-icons.io
+ pub fn icon(&self) -> &'static str {
+ match self {
+ Item::Home => {
+ r#""#
+ }
+ }
+ }
+}
diff --git a/crates/ezidam/src/menu/template.rs b/crates/ezidam/src/menu/template.rs
new file mode 100644
index 0000000..c2b6515
--- /dev/null
+++ b/crates/ezidam/src/menu/template.rs
@@ -0,0 +1,22 @@
+use super::Item;
+use rocket::serde::Serialize;
+
+#[derive(Serialize)]
+#[serde(crate = "rocket::serde")]
+pub struct Template {
+ id: &'static str,
+ label: &'static str,
+ link: &'static str,
+ icon: &'static str,
+}
+
+impl From
- for Template {
+ fn from(value: Item) -> Self {
+ Self {
+ id: value.id(),
+ label: value.label(),
+ link: value.link(),
+ icon: value.icon(),
+ }
+ }
+}
diff --git a/crates/ezidam/src/page.rs b/crates/ezidam/src/page.rs
index b806c54..b4ee5c5 100644
--- a/crates/ezidam/src/page.rs
+++ b/crates/ezidam/src/page.rs
@@ -4,6 +4,7 @@ mod responder;
mod template;
use self::content::*;
+use crate::menu::{Item, Menu};
use erased_serde::Serialize;
pub use flash::FlashKind;
@@ -33,6 +34,15 @@ impl Page {
}
}
+ /// Show menu with active item
+ fn menu(&self) -> Option