wasm-css 0.2.0

Ergonomic WASM CSS Framework
Documentation
// Authors: Robert Lopez

use super::{components::Components, Style};
use crate::error::WasmCssError;

impl Style {
    /// Extend `Style` with `css`, re-rendering if `new_css` is not empty.
    ///
    /// Returns error if missing access to: `Head`, `Window`, `Document`.
    ///
    /// ---
    /// Example Usage:
    /// ```
    ///
    /// let mut style = named_style!(
    ///     "my_style",
    ///     "
    ///         font-size: 10rem;
    ///         background-color: blue;
    ///     "
    /// )?;
    ///
    /// style.extend_from_css("font-size: 30rem; display: flex;")?;
    /// ```
    pub fn extend_from_css(&mut self, new_css: &str) -> Result<(), WasmCssError> {
        let new_components = Components::from_css(new_css);

        if !new_components.fields.is_empty() || !new_components.effects.is_empty() {
            self.components.fields.extend(new_components.fields);

            'effect_loop: for effect in new_components.effects {
                for index in 0..self.components.effects.len() {
                    if effect.key == self.components.effects[index].key {
                        self.components.effects[index] = effect;
                        continue 'effect_loop;
                    }
                }

                self.components.effects.push(effect);
            }

            self.css = self.components.to_css(&self.css_name);
            self.render()?;
        }

        Ok(())
    }
}