Render embedded styles only once per template with Markup Rust template engine
Let's say we have a template we'd like to use on the page multiple times. We also have styles
related to this template inside an embedded <style>
tag.
```rust use markupcssonce::{CssOnce, css_once};
markup::define! { Hello<'a>( css: &'a CssOnce, name: &'a str, ) { @css_once!(css, "p { background: blue }" "b { color: yellow }" ) p { "Hello, " b { @name } } } }
// We need an tracker for components with already rendered css let css = CssOnce::new();
// The first time the template is rendered with styles asserteq!( Hello { css: &css, name: "World" }.tostring(), "\n
Hello, World
" );// But all subsequent calls will render only it's HTML asserteq!( Hello { css: &css, name: "World" }.tostring(), "
Hello, World
" ); ```We appreciate all kinds of contributions, thank you!
Most of the readme is automatically copied from the crate documentation by cargo-sync-readme. This way the readme is always in sync with the docs and examples are tested.
So if you find a part of the readme you'd like to change between <!-- cargo-sync-readme start -->
and <!-- cargo-sync-readme end -->
markers, don't edit README.md
directly, but rather change
the documentation on top of src/lib.rs
and then synchronize the readme with:
bash
cargo sync-readme
(make sure the cargo command is installed):
bash
cargo install cargo-sync-readme
If you have [rusty-hook] installed the changes will apply automatically on commit.
This project is licensed under the MIT license.