use maud::{Markup, Render, html}; use crate::ui::{UIWidget, color::UIColor}; #[allow(non_snake_case)] pub fn Background( color: C, inner: T, ) -> BackgroundWidget { BackgroundWidget(Box::new(inner), Box::new(color)) } pub struct BackgroundWidget(Box, Box); impl Render for BackgroundWidget { fn render(&self) -> Markup { self.render_with_class("") } } impl UIWidget for BackgroundWidget { fn can_inherit(&self) -> bool { true } fn base_class(&self) -> Vec { vec![format!("bg-{}", self.1.color_class())] } fn extended_class(&self) -> Vec { let mut c = self.base_class(); c.extend_from_slice(&self.0.extended_class()); c } fn render_with_class(&self, class: &str) -> Markup { if self.0.as_ref().can_inherit() { self.0 .as_ref() .render_with_class(&format!("{} {class}", self.base_class().join(" "))) } else { html! { div class=(format!("{} {class}", self.base_class().join(" "))) { (self.0.as_ref()) } } } } }