windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation
// 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())
}