windjammer_ui/components/generated/
sidebar.rs1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5pub enum SidebarPosition {
6 Left,
7 Right,
8}
9
10pub struct SidebarItem {
11 label: String,
12 icon: String,
13 href: String,
14}
15
16impl SidebarItem {
17 #[inline]
18 pub fn new(label: String) -> SidebarItem {
19 SidebarItem {
20 label,
21 icon: String::from("".to_string()),
22 href: String::from("#".to_string()),
23 }
24 }
25 #[inline]
26 pub fn icon(mut self, icon: String) -> SidebarItem {
27 self.icon = icon;
28 self
29 }
30 #[inline]
31 pub fn href(mut self, href: String) -> SidebarItem {
32 self.href = href;
33 self
34 }
35}
36
37pub struct Sidebar {
38 items: Vec<SidebarItem>,
39 position: SidebarPosition,
40 width: String,
41 collapsed: bool,
42}
43
44impl Sidebar {
45 #[inline]
46 pub fn new() -> Sidebar {
47 Sidebar {
48 items: Vec::new(),
49 position: SidebarPosition::Left,
50 width: String::from("250px".to_string()),
51 collapsed: false,
52 }
53 }
54 #[inline]
55 pub fn item(mut self, item: SidebarItem) -> Sidebar {
56 self.items.push(item);
57 self
58 }
59 #[inline]
60 pub fn position(mut self, pos: SidebarPosition) -> Sidebar {
61 self.position = pos;
62 self
63 }
64 #[inline]
65 pub fn width(mut self, width: String) -> Sidebar {
66 self.width = width;
67 self
68 }
69 #[inline]
70 pub fn collapsed(mut self, collapsed: bool) -> Sidebar {
71 self.collapsed = collapsed;
72 self
73 }
74}
75
76impl Renderable for Sidebar {
77 #[inline]
78 fn render(self) -> String {
79 let mut items_html = Vec::new();
80 for item in &self.items {
81 let icon_html = {
82 if item.icon.len() > 0 {
83 format!("<span class='wj-sidebar-icon'>{}</span>", item.icon)
84 } else {
85 String::from("".to_string())
86 }
87 };
88 items_html.push(format!("<a href='{}' class='wj-sidebar-item'>{}<span class='wj-sidebar-label'>{}</span></a>", item.href, icon_html, item.label));
89 }
90 let position_class = match self.position {
91 SidebarPosition::Left => "wj-sidebar-left",
92 SidebarPosition::Right => "wj-sidebar-right",
93 };
94 let collapsed_class = {
95 if self.collapsed {
96 " wj-sidebar-collapsed"
97 } else {
98 ""
99 }
100 };
101 format!("<aside class='wj-sidebar {} {}' style='width: {}'>
102 <div class='wj-sidebar-toggle' onclick='this.parentElement.classList.toggle(\"wj-sidebar-collapsed\")'>
103 <span class='wj-sidebar-toggle-icon'>☰</span>
104 </div>
105 <nav class='wj-sidebar-nav'>{}</nav>
106 </aside>", position_class, collapsed_class, self.width, items_html.join(""))
107 }
108}