windjammer-ui 0.3.6

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

pub struct DropdownItem {
    label: string,
    value: string,
    disabled: bool,
}

impl DropdownItem {
    pub fn new(label: string, value: string) -> DropdownItem {
        DropdownItem {
            label,
            value,
            disabled: false,
        }
    }

    pub fn disabled(self, disabled: bool) -> DropdownItem {
        self.disabled = disabled
        self
    }
}

pub struct Dropdown {
    label: string,
    items: Vec<DropdownItem>,
}

impl Dropdown {
    pub fn new(label: string) -> Dropdown {
        Dropdown {
            label,
            items: Vec::new(),
        }
    }

    pub fn item(self, item: DropdownItem) -> Dropdown {
        self.items.push(item)
        self
    }

}

impl Renderable for Dropdown {
fn render(self) -> string {
        let mut items_html = "".to_string()

        let mut i = 0
        while i < self.items.len() {
            let item = &self.items[i]
            let disabled_class = if item.disabled { " wj-dropdown-item-disabled" } else { "" }

            items_html = format!("{}<a class='wj-dropdown-item{}' data-value='{}'>{}</a>",
                items_html, disabled_class, item.value, item.label)

            i = i + 1
        }

        format!("<div class='wj-dropdown'>
  <button class='wj-dropdown-toggle'>{} ▼</button>
  <div class='wj-dropdown-menu'>
    {}
  </div>
</div>", self.label, items_html)
    }
}

fn main() {
    let dropdown = Dropdown::new("Actions".to_string())
        .item(DropdownItem::new("Edit".to_string(), "edit".to_string()))
        .item(DropdownItem::new("Delete".to_string(), "delete".to_string()))
        .item(DropdownItem::new("Archive".to_string(), "archive".to_string()).disabled(true))

    println!("{}", dropdown.render())
}