windjammer_ui/components/generated/
hamburgermenu.rs

1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
6pub struct HamburgerMenuItem {
7    pub label: String,
8    pub href: String,
9}
10
11impl HamburgerMenuItem {
12    #[inline]
13    pub fn new(label: String, href: String) -> HamburgerMenuItem {
14        HamburgerMenuItem { label, href }
15    }
16}
17
18#[derive(Debug, Clone, Default)]
19pub struct HamburgerMenu {
20    pub items: Vec<HamburgerMenuItem>,
21    pub open: bool,
22}
23
24impl HamburgerMenu {
25    #[inline]
26    pub fn new() -> HamburgerMenu {
27        HamburgerMenu {
28            items: Vec::new(),
29            open: false,
30        }
31    }
32    #[inline]
33    pub fn item(mut self, item: HamburgerMenuItem) -> HamburgerMenu {
34        self.items.push(item);
35        self
36    }
37    #[inline]
38    pub fn open(mut self, open: bool) -> HamburgerMenu {
39        self.open = open;
40        self
41    }
42}
43
44impl Renderable for HamburgerMenu {
45    #[inline]
46    fn render(self) -> String {
47        let mut items_html = Vec::new();
48        for item in &self.items {
49            items_html.push(format!(
50                "<a href='{}' class='wj-hamburger-item'>{}</a>",
51                item.href.clone(),
52                item.label.clone()
53            ));
54        }
55        let open_class = {
56            if self.open {
57                " wj-hamburger-open".to_string()
58            } else {
59                "".to_string()
60            }
61        };
62        format!("<div class='wj-hamburger-menu{}'>
63                <button class='wj-hamburger-button' onclick='this.parentElement.classList.toggle(\"wj-hamburger-open\")'>
64                    <span></span>
65                    <span></span>
66                    <span></span>
67                </button>
68                <div class='wj-hamburger-drawer'>
69                    {}
70                </div>
71            </div>", open_class, items_html.join(""))
72    }
73}