windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation

use super::traits::Renderable
pub struct CodeEditor {
    code: string,
    language: string,
    theme: string,
    line_numbers: bool,
    readonly: bool,
}

impl CodeEditor {
    pub fn new(code: string) -> CodeEditor {
        CodeEditor {
            code,
            language: "rust".to_string(),
            theme: "dark".to_string(),
            line_numbers: true,
            readonly: false,
        }
    }

    pub fn language(self, language: string) -> CodeEditor {
        self.language = language
        self
    }

    pub fn theme(self, theme: string) -> CodeEditor {
        self.theme = theme
        self
    }

    pub fn line_numbers(self, show: bool) -> CodeEditor {
        self.line_numbers = show
        self
    }

    pub fn readonly(self, readonly: bool) -> CodeEditor {
        self.readonly = readonly
        self
    }


}

impl Renderable for CodeEditor {
pub fn render(self) -> string {
        let readonly_attr = if self.readonly { " readonly" } else { "" }
        let line_numbers_class = if self.line_numbers { " wj-editor-with-lines" } else { "" }

        format!("<div class='wj-code-editor wj-editor-{} wj-editor-theme-{}{}'>
  <textarea{}>
{}</textarea>
</div>", self.language, self.theme, line_numbers_class, readonly_attr, self.code)
    }
}

fn main() {
    let editor = CodeEditor::new("fn main() {\n    println!(\"Hello\");\n}".to_string())
        .language("rust".to_string())
        .theme("dark".to_string())

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