License Crates.io Docs.rs

markup-css-once

Render embedded styles only once per template with Markup Rust template engine

Usage

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

" ); ```

Contributing

We appreciate all kinds of contributions, thank you!

Note on README

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.

License

This project is licensed under the MIT license.