# lit-html-rs A Rust library for using the HTML template library [lit-html](https://lit-html.polymer-project.org/) created by the Google Polymer project. **this library is still in very early stages** ```toml [dependencies] lit-html = "0" ``` # Basics `lit-html` works by creating templates that efficiently render to the DOM. When you are building a `TemplateData` object your data is being moved from WebAssembly into an object in JavaScript that can be used by the `lit-html` template. You can put the following data on TemplateData: * strings * numbers * booleans * callbacks functions ```rust use js::*; use lit_html::*; #[no_mangle] pub fn main() { let data = TemplateData::new(); data.set("name", "Ferris"); render(html!(r#"

Hello ${_.name}

"#, &data), DOM_BODY); } ``` See it working [here](https://richardanaya.github.io/lit-html-rs/examples/helloworld/). # Counter You can build up complex UI by creating Templates that contain other data bound templates. `lit-html` efficiently manipulates the DOM when data changes. ```rust use js::*; use lit_html::*; static mut COUNT: u32 = 0; fn counter() -> Template { let data = TemplateData::new(); data.set("count", unsafe { COUNT }); data.set("increment", || { unsafe { COUNT += 1 }; rerender(); }); html!( r#"The current count is ${_.count} "#, data ) } fn app() -> Template { let data = TemplateData::new(); data.set("content", counter()); html!( r#"
This is a counter in Rust!
${_.content}
"#, data ) } fn rerender() { render(&app(), DOM_BODY); } #[no_mangle] pub fn main() { rerender(); } ``` See it working [here](https://richardanaya.github.io/lit-html-rs/examples/counter/).