wasm_css/
extend_from_css.rs

1// Authors: Robert Lopez
2
3use super::{components::Components, Style};
4use crate::error::WasmCssError;
5
6impl Style {
7    /// Extend `Style` with `css`, re-rendering if `new_css` is not empty.
8    ///
9    /// Returns error if missing access to: `Head`, `Window`, `Document`.
10    ///
11    /// ---
12    /// Example Usage:
13    /// ```
14    ///
15    /// let mut style = named_style!(
16    ///     "my_style",
17    ///     "
18    ///         font-size: 10rem;
19    ///         background-color: blue;
20    ///     "
21    /// )?;
22    ///
23    /// style.extend_from_css("font-size: 30rem; display: flex;")?;
24    /// ```
25    pub fn extend_from_css(&mut self, new_css: &str) -> Result<(), WasmCssError> {
26        let new_components = Components::from_css(new_css);
27
28        if !new_components.fields.is_empty() || !new_components.effects.is_empty() {
29            self.components.fields.extend(new_components.fields);
30
31            'effect_loop: for effect in new_components.effects {
32                for index in 0..self.components.effects.len() {
33                    if effect.key == self.components.effects[index].key {
34                        self.components.effects[index] = effect;
35                        continue 'effect_loop;
36                    }
37                }
38
39                self.components.effects.push(effect);
40            }
41
42            self.css = self.components.to_css(&self.css_name);
43            self.render()?;
44        }
45
46        Ok(())
47    }
48}