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 HamburgerMenuItem {
    pub label: String,
    pub href: String,
}

impl HamburgerMenuItem {
    #[inline]
    pub fn new(label: String, href: String) -> HamburgerMenuItem {
        HamburgerMenuItem { label, href }
    }
}

#[derive(Debug, Clone, Default)]
pub struct HamburgerMenu {
    pub items: Vec<HamburgerMenuItem>,
    pub open: bool,
}

impl HamburgerMenu {
    #[inline]
    pub fn new() -> HamburgerMenu {
        HamburgerMenu {
            items: Vec::new(),
            open: false,
        }
    }
    #[inline]
    pub fn item(mut self, item: HamburgerMenuItem) -> HamburgerMenu {
        self.items.push(item);
        self
    }
    #[inline]
    pub fn open(mut self, open: bool) -> HamburgerMenu {
        self.open = open;
        self
    }
}

impl Renderable for HamburgerMenu {
    #[inline]
    fn render(self) -> String {
        let mut items_html = Vec::new();
        for item in &self.items {
            items_html.push(format!(
                "<a href='{}' class='wj-hamburger-item'>{}</a>",
                item.href.clone(),
                item.label.clone()
            ));
        }
        let open_class = {
            if self.open {
                " wj-hamburger-open".to_string()
            } else {
                "".to_string()
            }
        };
        format!("<div class='wj-hamburger-menu{}'>
                <button class='wj-hamburger-button' onclick='this.parentElement.classList.toggle(\"wj-hamburger-open\")'>
                    <span></span>
                    <span></span>
                    <span></span>
                </button>
                <div class='wj-hamburger-drawer'>
                    {}
                </div>
            </div>", open_class, items_html.join(""))
    }
}