windjammer_ui/components/generated/
collapsible.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 CollapsibleSection {
7    pub title: String,
8    pub content: String,
9    pub open: bool,
10}
11
12impl CollapsibleSection {
13    #[inline]
14    pub fn new(title: String, content: String) -> CollapsibleSection {
15        CollapsibleSection {
16            title,
17            content,
18            open: false,
19        }
20    }
21    #[inline]
22    pub fn open(mut self, open: bool) -> CollapsibleSection {
23        self.open = open;
24        self
25    }
26}
27
28impl Renderable for CollapsibleSection {
29    #[inline]
30    fn render(self) -> String {
31        let icon = {
32            if self.open {
33                "▼".to_string()
34            } else {
35                "▶".to_string()
36            }
37        };
38        let content_style = {
39            if self.open {
40                "display: block;".to_string()
41            } else {
42                "display: none;".to_string()
43            }
44        };
45        format!(
46            "<div class='wj-collapsible'>
47  <div class='wj-collapsible-header'>
48    <span class='wj-collapsible-icon'>{}</span>
49    <span>{}</span>
50  </div>
51  <div class='wj-collapsible-content' style='{}'>
52    {}
53  </div>
54</div>",
55            icon, self.title, content_style, self.content
56        )
57    }
58}