wasm_css/
remove_keys.rs

1// Authors: Robert Lopez
2
3use super::Style;
4use crate::error::WasmCssError;
5
6impl Style {
7    /// Remove `keys` from `Style`, re-rendering if at-least one key is removed.
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: 18px;
19    ///
20    ///         &:hover {{
21    ///             background-color: red;
22    ///         }}
23    ///
24    ///         background-color: blue;
25    ///     "
26    /// )?;
27    ///
28    /// style.remove_keys(vec!["font-size", "&:hover"])?;
29    /// ```
30    pub fn remove_keys<K: Into<String>>(&mut self, keys: Vec<K>) -> Result<(), WasmCssError> {
31        let mut mutated = false;
32
33        for key in keys {
34            let (key, is_effect) = unsafe {
35                let mut formatted_key_bytes = b"\t".to_vec();
36                let mut key_string = key.into();
37                let is_effect = key_string.starts_with('@') || key_string.starts_with('&');
38                let mut ending_bytes = if is_effect {
39                    b" {\n".to_vec()
40                } else {
41                    b": ".to_vec()
42                };
43
44                formatted_key_bytes.append(key_string.as_mut_vec());
45                formatted_key_bytes.append(&mut ending_bytes);
46
47                (String::from_utf8_unchecked(formatted_key_bytes), is_effect)
48            };
49
50            if is_effect {
51                for index in 0..self.components.effects.len() {
52                    if self.components.effects[index].key == key {
53                        self.components.effects.remove(index);
54                        mutated = true;
55                        break;
56                    }
57                }
58            } else if self.components.fields.remove(&key).is_some() {
59                mutated = true;
60            }
61        }
62
63        if mutated {
64            self.css = self.components.to_css(&self.css_name);
65            self.render()?;
66        }
67
68        Ok(())
69    }
70}