markup-css-once 0.1.0

Render embedded styles only once per template with Markup Rust template engine
Documentation
  • Coverage
  • 100%
    5 out of 5 items documented1 out of 5 items with examples
  • Size
  • Source code size: 8.16 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 290.72 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 9s Average build duration of successful builds.
  • all releases: 9s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • imbolc/markup-css-once
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • imbolc

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.

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>"
);

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:

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.

License

This project is licensed under the MIT license.