update
This commit is contained in:
parent
f3a85de02e
commit
86f61ff3f6
15 changed files with 918 additions and 41 deletions
src/ui/wrapper
|
@ -3,11 +3,11 @@ use maud::{Markup, Render, html};
|
|||
use crate::ui::UIWidget;
|
||||
|
||||
#[allow(non_snake_case)]
|
||||
pub fn Hover<T: UIWidget + 'static, I: UIWidget + 'static>(inherit: I, inner: T) -> HoverWrapper {
|
||||
HoverWrapper(Box::new(inner), Box::new(inherit))
|
||||
pub fn Hover<I: UIWidget + 'static>(inherit: I) -> HoverWrapper {
|
||||
HoverWrapper(None, Box::new(inherit))
|
||||
}
|
||||
|
||||
pub struct HoverWrapper(Box<dyn UIWidget>, Box<dyn UIWidget>);
|
||||
pub struct HoverWrapper(Option<Box<dyn UIWidget>>, Box<dyn UIWidget>);
|
||||
|
||||
impl HoverWrapper {
|
||||
fn hovered_class(&self) -> Vec<String> {
|
||||
|
@ -18,6 +18,11 @@ impl HoverWrapper {
|
|||
.map(|x| format!("hover:{x}"))
|
||||
.collect::<Vec<_>>()
|
||||
}
|
||||
|
||||
pub fn on<T: UIWidget + 'static>(mut self, inner: T) -> Self {
|
||||
self.0 = Some(Box::new(inner));
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for HoverWrapper {
|
||||
|
@ -36,20 +41,19 @@ impl UIWidget for HoverWrapper {
|
|||
}
|
||||
|
||||
fn extended_class(&self) -> Vec<String> {
|
||||
let mut ret = self.base_class();
|
||||
ret.extend_from_slice(&self.0.extended_class());
|
||||
ret
|
||||
self.base_class()
|
||||
}
|
||||
|
||||
fn render_with_class(&self, class: &str) -> Markup {
|
||||
if self.0.as_ref().can_inherit() {
|
||||
if self.0.as_ref().unwrap().can_inherit() {
|
||||
self.0
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.render_with_class(&format!("{} {class}", self.hovered_class().join(" ")))
|
||||
} else {
|
||||
html! {
|
||||
div class=(format!("{} {class}", self.hovered_class().join(" "))) {
|
||||
(self.0.as_ref())
|
||||
(self.0.as_ref().unwrap())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue