windjammer_ui/components/generated/
accordion.rs1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
6pub struct AccordionItem {
7 pub title: String,
8 pub content: String,
9 pub open: bool,
10}
11
12impl AccordionItem {
13 #[inline]
14 pub fn new(title: String, content: String) -> AccordionItem {
15 AccordionItem {
16 title,
17 content,
18 open: false,
19 }
20 }
21 #[inline]
22 pub fn open(mut self, open: bool) -> AccordionItem {
23 self.open = open;
24 self
25 }
26}
27
28#[derive(Debug, Clone, Default)]
29pub struct Accordion {
30 pub items: Vec<AccordionItem>,
31 pub allow_multiple: bool,
32}
33
34impl Accordion {
35 #[inline]
36 pub fn new() -> Accordion {
37 Accordion {
38 items: Vec::new(),
39 allow_multiple: false,
40 }
41 }
42 #[inline]
43 pub fn item(mut self, item: AccordionItem) -> Accordion {
44 self.items.push(item);
45 self
46 }
47 #[inline]
48 pub fn allow_multiple(mut self, allow: bool) -> Accordion {
49 self.allow_multiple = allow;
50 self
51 }
52}
53
54impl Renderable for Accordion {
55 #[inline]
56 fn render(self) -> String {
57 let mut html = "<div class='wj-accordion'>".to_string();
58 let mut i = 0;
59 while i < (self.items.len() as i64) {
60 let item = &self.items[i as usize];
61 let open_attr = {
62 if item.open {
63 " open".to_string()
64 } else {
65 "".to_string()
66 }
67 };
68 html = format!(
69 "{}<details class='wj-accordion-item'{}>
70 <summary class='wj-accordion-title'>{}</summary>
71 <div class='wj-accordion-content'>
72 {}
73 </div>
74</details>",
75 html, open_attr, item.title, item.content
76 );
77 i += 1;
78 }
79 format!("{}</div>", html)
80 }
81}