diff --git a/src/ui/mod.rs b/src/ui/mod.rs index f3f527b..ce6b59a 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -86,9 +86,15 @@ pub async fn render_page( pub trait UIWidget: Render { /// Indicating if the widget supports inheriting classes fn can_inherit(&self) -> bool; + /// Returning the base classes for this widget + /// + /// Base here means all classes defining the current widget fn base_class(&self) -> Vec; + + /// Return own base classes and all classes below the tree fn extended_class(&self) -> Vec; + /// Render the widget with additional classes fn render_with_class(&self, class: &str) -> Markup; } diff --git a/src/ui/primitives/div.rs b/src/ui/primitives/div.rs index 986d55f..f2341f7 100644 --- a/src/ui/primitives/div.rs +++ b/src/ui/primitives/div.rs @@ -71,6 +71,16 @@ impl Render for DivWidget { } } +impl DivWidget { + pub fn extended_class_(&self) -> Vec { + let mut c = self.base_class(); + for e in &self.0 { + c.extend_from_slice(&e.extended_class()); + } + c + } +} + impl UIWidget for DivWidget { fn can_inherit(&self) -> bool { false @@ -81,11 +91,11 @@ impl UIWidget for DivWidget { } fn extended_class(&self) -> Vec { - let mut c = self.base_class(); - for e in &self.0 { - c.extend_from_slice(&e.extended_class()); + if self.1 { + self.extended_class_() + } else { + vec![] } - c } fn render_with_class(&self, _: &str) -> Markup { @@ -104,7 +114,11 @@ impl UIWidget for DivWidget { .collect::>() .join(" "); - PreEscaped(format!("
{} ", inner.0)) + PreEscaped(format!( + "
{} ", + self.extended_class_().join(" "), + inner.0 + )) } } } diff --git a/src/ui/primitives/link.rs b/src/ui/primitives/link.rs index fbdf166..e175d2f 100644 --- a/src/ui/primitives/link.rs +++ b/src/ui/primitives/link.rs @@ -30,7 +30,7 @@ impl HTMXAttributes for LinkWidget {} impl Render for LinkWidget { fn render(&self) -> Markup { - self.render_with_class("") + self.render_with_class(&self.extended_class().join(" ")) } }