// Checkbox component - Pure Windjammer implementation
use super::traits::Renderable
pub enum CheckboxSize {
Small,
Medium,
Large,
}
pub struct Checkbox {
label: string,
checked: bool,
disabled: bool,
size: CheckboxSize,
}
impl Checkbox {
pub fn new(label: string) -> Checkbox {
Checkbox {
label: label,
checked: false,
disabled: false,
size: CheckboxSize::Medium,
}
}
pub fn checked(self, checked: bool) -> Checkbox {
self.checked = checked
self
}
pub fn disabled(self, disabled: bool) -> Checkbox {
self.disabled = disabled
self
}
pub fn size(self, size: CheckboxSize) -> Checkbox {
self.size = size
self
}
}
impl Renderable for Checkbox {
pub fn render(self) -> string {
let size_class = match self.size {
CheckboxSize::Small => "sm",
CheckboxSize::Medium => "md",
CheckboxSize::Large => "lg",
}
let checked_attr = if self.checked { " checked" } else { "" }
let disabled_attr = if self.disabled { " disabled" } else { "" }
format!("<label class='wj-checkbox wj-checkbox-{}'><input type='checkbox'{}{}/><span>{}</span></label>",
size_class, checked_attr, disabled_attr, self.label)
}
}
fn main() {
let cb1 = Checkbox::new("Accept terms".to_string()).checked(true)
let cb2 = Checkbox::new("Subscribe".to_string()).size(CheckboxSize::Large).disabled(true)
println!("{}", cb1.render())
println!("{}", cb2.render())
}