diff --git a/src/html/classes.rs b/src/html/classes.rs index 2fd2fbf4..0dec5fd8 100644 --- a/src/html/classes.rs +++ b/src/html/classes.rs @@ -133,9 +133,37 @@ impl Classes { } } - /// Devuelve `true` si la clase está presente. + /// Devuelve `true` si **una única clase** está presente. + /// + /// Si necesitas comprobar varias clases separadas por espacios, usa [`contains_all`] o + /// [`contains_any`]. pub fn contains(&self, class: impl AsRef) -> bool { - let class = class.as_ref().to_ascii_lowercase(); - self.0.iter().any(|c| c == &class) + self.contains_class(class.as_ref()) + } + + /// Devuelve `true` si **todas** las clases indicadas están presentes. + pub fn contains_all(&self, classes: impl AsRef) -> bool { + classes + .as_ref() + .split_ascii_whitespace() + .all(|class| self.contains_class(class)) + } + + /// Devuelve `true` si **alguna** de las clases indicadas está presente. + pub fn contains_any(&self, classes: impl AsRef) -> bool { + classes + .as_ref() + .split_ascii_whitespace() + .any(|class| self.contains_class(class)) + } + + #[inline] + fn contains_class(&self, class: &str) -> bool { + if class.bytes().any(|b| b.is_ascii_uppercase()) { + let class = class.to_ascii_lowercase(); + self.0.iter().any(|c| c == &class) + } else { + self.0.iter().any(|c| c == class) + } } }