windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation
#![allow(clippy::all)]
#![allow(noop_method_call)]
use super::traits::Renderable;

#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
pub struct AccordionItem {
    pub title: String,
    pub content: String,
    pub open: bool,
}

impl AccordionItem {
    #[inline]
    pub fn new(title: String, content: String) -> AccordionItem {
        AccordionItem {
            title,
            content,
            open: false,
        }
    }
    #[inline]
    pub fn open(mut self, open: bool) -> AccordionItem {
        self.open = open;
        self
    }
}

#[derive(Debug, Clone, Default)]
pub struct Accordion {
    pub items: Vec<AccordionItem>,
    pub allow_multiple: bool,
}

impl Accordion {
    #[inline]
    pub fn new() -> Accordion {
        Accordion {
            items: Vec::new(),
            allow_multiple: false,
        }
    }
    #[inline]
    pub fn item(mut self, item: AccordionItem) -> Accordion {
        self.items.push(item);
        self
    }
    #[inline]
    pub fn allow_multiple(mut self, allow: bool) -> Accordion {
        self.allow_multiple = allow;
        self
    }
}

impl Renderable for Accordion {
    #[inline]
    fn render(self) -> String {
        let mut html = "<div class='wj-accordion'>".to_string();
        let mut i = 0;
        while i < (self.items.len() as i64) {
            let item = &self.items[i as usize];
            let open_attr = {
                if item.open {
                    " open".to_string()
                } else {
                    "".to_string()
                }
            };
            html = format!(
                "{}<details class='wj-accordion-item'{}>
  <summary class='wj-accordion-title'>{}</summary>
  <div class='wj-accordion-content'>
    {}
  </div>
</details>",
                html, open_attr, item.title, item.content
            );
            i += 1;
        }
        format!("{}</div>", html)
    }
}