Crates.io | markup-css-once |
lib.rs | markup-css-once |
version | 0.1.0 |
source | src |
created_at | 2023-01-12 09:21:53.60328 |
updated_at | 2023-01-12 09:21:53.60328 |
description | Render embedded styles only once per template with Markup Rust template engine |
homepage | |
repository | https://github.com/imbolc/markup-css-once |
max_upload_size | |
id | 756993 |
size | 8,167 |
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.
use markup_css_once::{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
assert_eq!(
Hello { css: &css, name: "World" }.to_string(),
"<style>p { background: blue }b { color: yellow }</style>\n<p>Hello, <b>World</b></p>"
);
// But all subsequent calls will render only it's HTML
assert_eq!(
Hello { css: &css, name: "World" }.to_string(),
"<p>Hello, <b>World</b></p>"
);
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:
cargo sync-readme
(make sure the cargo command is installed):
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.