windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation
use super::traits::Renderable

pub struct HamburgerMenuItem {
    label: string,
    href: string,
}

impl HamburgerMenuItem {
    pub fn new(label: string, href: string) -> HamburgerMenuItem {
        HamburgerMenuItem {
            label: label,
            href: href,
        }
    }
}

pub struct HamburgerMenu {
    items: Vec<HamburgerMenuItem>,
    open: bool,
}

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

impl Renderable for HamburgerMenu {
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, item.label))
        }
        
        let open_class = if self.open { " wj-hamburger-open" } else { "" }
        
        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("")
        )
    }
}