diff --git a/pagetop/src/html.rs b/pagetop/src/html.rs index 5a2bab3d..298fd41d 100644 --- a/pagetop/src/html.rs +++ b/pagetop/src/html.rs @@ -28,6 +28,9 @@ pub use opt_translated::OptionTranslated; mod opt_classes; pub use opt_classes::{ClassesOp, OptionClasses}; +mod opt_component; +pub use opt_component::OptionComponent; + pub mod unit; pub enum PrepareMarkup { diff --git a/pagetop/src/html/opt_component.rs b/pagetop/src/html/opt_component.rs new file mode 100644 index 00000000..059f2e3e --- /dev/null +++ b/pagetop/src/html/opt_component.rs @@ -0,0 +1,45 @@ +use crate::core::component::{ArcTypedComponent, ComponentTrait, Context}; +use crate::fn_builder; +use crate::html::{html, Markup}; + +pub struct OptionComponent(Option>); + +impl Default for OptionComponent { + fn default() -> Self { + OptionComponent(None) + } +} + +impl OptionComponent { + pub fn new(component: C) -> Self { + OptionComponent::default().with_value(Some(component)) + } + + // OptionComponent BUILDER. + + #[fn_builder] + pub fn alter_value(&mut self, component: Option) -> &mut Self { + if let Some(component) = component { + self.0 = Some(ArcTypedComponent::new(component)); + } else { + self.0 = None; + } + self + } + + // OptionComponent GETTERS. + + pub fn get(&self) -> Option> { + if let Some(value) = &self.0 { + return Some(value.clone()); + } + None + } + + pub fn render(&self, cx: &mut Context) -> Markup { + match &self.0 { + Some(component) => component.render(cx), + _ => html! {}, + } + } +} diff --git a/pagetop/src/html/opt_translated.rs b/pagetop/src/html/opt_translated.rs index 396fd364..c2424e9e 100644 --- a/pagetop/src/html/opt_translated.rs +++ b/pagetop/src/html/opt_translated.rs @@ -1,5 +1,5 @@ use crate::fn_builder; -use crate::html::Markup; +use crate::html::{html, Markup}; use crate::locale::{L10n, LanguageIdentifier}; #[derive(Default)] @@ -27,10 +27,10 @@ impl OptionTranslated { None } - pub fn escaped(&self, langid: &LanguageIdentifier) -> Option { - if let Some(value) = &self.0 { - return Some(value.escaped(langid)); + pub fn escaped(&self, langid: &LanguageIdentifier) -> Markup { + match &self.0 { + Some(value) => value.escaped(langid), + _ => html! {}, } - None } }