windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation
// Spinner Component - Loading indicator


use super::traits::Renderable
pub enum SpinnerSize {
    Small,
    Medium,
    Large,
}

pub struct Spinner {
    size: SpinnerSize,
    label: string,
}

impl Spinner {
    pub fn new() -> Spinner {
        Spinner {
            size: SpinnerSize::Medium,
            label: "".to_string(),
        }
    }

    pub fn size(self, size: SpinnerSize) -> Spinner {
        self.size = size
        self
    }

    pub fn label(self, label: string) -> Spinner {
        self.label = label
        self
    }


}

impl Renderable for Spinner {
pub fn render(self) -> string {
        let size_class = match self.size {
            SpinnerSize::Small => "wj-spinner-sm",
            SpinnerSize::Medium => "wj-spinner-md",
            SpinnerSize::Large => "wj-spinner-lg",
        }

        let spinner_html = format!("<div class='wj-spinner {}'></div>", size_class)

        if self.label != "" {
            format!("<div class='wj-spinner-container'>{}<span class='wj-spinner-label'>{}</span></div>", 
                spinner_html, self.label)
        } else {
            spinner_html
        }
    }
}

fn main() {
    let spinner1 = Spinner::new()
    println!("Default: {}", spinner1.render())

    let spinner2 = Spinner::new().size(SpinnerSize::Large).label("Loading...".to_string())
    println!("With label: {}", spinner2.render())
}