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, Default)]
pub struct Panel {
    pub title: String,
    pub children: Vec<String>,
    pub collapsible: bool,
    pub collapsed: bool,
    pub padding: String,
}

impl Panel {
    #[inline]
    pub fn new(title: String) -> Panel {
        Panel {
            title,
            children: Vec::new(),
            collapsible: false,
            collapsed: false,
            padding: "16px".to_string(),
        }
    }
    #[inline]
    pub fn child(mut self, child: String) -> Panel {
        self.children.push(child);
        self
    }
    #[inline]
    pub fn collapsible(mut self, collapsible: bool) -> Panel {
        self.collapsible = collapsible;
        self
    }
    #[inline]
    pub fn collapsed(mut self, collapsed: bool) -> Panel {
        self.collapsed = collapsed;
        self
    }
    #[inline]
    pub fn padding(mut self, padding: String) -> Panel {
        self.padding = padding;
        self
    }
}

impl Renderable for Panel {
    #[inline]
    fn render(self) -> String {
        let header_class = {
            if self.collapsible {
                "wj-panel-header-collapsible".to_string()
            } else {
                "wj-panel-header".to_string()
            }
        };
        let icon = {
            if self.collapsible {
                if self.collapsed {
                    "".to_string()
                } else {
                    "".to_string()
                }
            } else {
                "".to_string()
            }
        };
        let content_style = {
            if self.collapsed {
                "display: none;".to_string()
            } else {
                "display: block;".to_string()
            }
        };
        let children_html = self.children.join(
            "
",
        );
        format!(
            "<div class='wj-panel'>
  <div class='{}'>
    <span>{}</span>
    <h3>{}</h3>
  </div>
  <div class='wj-panel-content' style='{}padding: {};'>
    {}
  </div>
</div>",
            header_class, icon, self.title, content_style, self.padding, children_html
        )
    }
}