From 261cea6c2f97a5ff0264823ae2cf2e0f1e86c809 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 30 Jul 2022 18:32:32 +0200 Subject: [PATCH] Actualiza para cumplir recomendaciones de clippy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Básicamente a todos los componentes y elementos principales se les implementa Default() y se adaptan los constructores para inicializar los campos de sus estructuras de datos. --- pagetop/src/base/component/anchor.rs | 52 +++++------- pagetop/src/base/component/block.rs | 28 +++---- pagetop/src/base/component/container.rs | 35 ++++---- .../src/base/component/form_element/button.rs | 60 ++++++-------- .../src/base/component/form_element/date.rs | 54 +++++-------- .../src/base/component/form_element/form.rs | 40 ++++------ .../src/base/component/form_element/hidden.rs | 12 +-- .../src/base/component/form_element/input.rs | 70 +++++++--------- pagetop/src/base/component/grid/column.rs | 28 +++---- pagetop/src/base/component/grid/row.rs | 25 +++--- pagetop/src/base/component/heading.rs | 41 +++++----- pagetop/src/base/component/html.rs | 25 +++--- pagetop/src/base/component/icon.rs | 21 ++--- pagetop/src/base/component/image.rs | 27 +++---- pagetop/src/base/component/menu.rs | 80 +++++++++---------- pagetop/src/base/component/paragraph.rs | 38 ++++----- pagetop/src/core/component.rs | 14 +--- pagetop/src/core/component/bundle.rs | 2 +- pagetop/src/core/component/html_markup.rs | 13 +++ pagetop/src/core/component/renderable.rs | 19 +++++ pagetop/src/html.rs | 2 +- pagetop/src/html/assets/javascript.rs | 10 +-- pagetop/src/html/assets/stylesheet.rs | 7 +- pagetop/src/html/attribute.rs | 17 ++-- pagetop/src/html/classes.rs | 29 ++++--- pagetop/src/html/favicon.rs | 6 +- pagetop/src/html/identifier.rs | 17 ++-- pagetop/src/response/page/context.rs | 10 ++- pagetop/src/response/page/definition.rs | 26 +++--- website/src/mdbook.rs | 12 +-- 30 files changed, 372 insertions(+), 448 deletions(-) create mode 100644 pagetop/src/core/component/html_markup.rs create mode 100644 pagetop/src/core/component/renderable.rs diff --git a/pagetop/src/base/component/anchor.rs b/pagetop/src/base/component/anchor.rs index 96416ace..110aa5ff 100644 --- a/pagetop/src/base/component/anchor.rs +++ b/pagetop/src/base/component/anchor.rs @@ -2,23 +2,28 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_ANCHOR); +#[derive(Default)] pub enum AnchorType { - Button, + #[default] Link, + Button, Location, } +#[derive(Default)] pub enum AnchorTarget { - Blank, - Context(String), + #[default] Default, + Blank, Parent, Top, + Context(String), } pub type AnchorIcon = ComponentsBundle; #[rustfmt::skip] +#[derive(Default)] pub struct Anchor { weight : isize, renderable : Renderable, @@ -26,7 +31,7 @@ pub struct Anchor { classes : Classes, anchor_type: AnchorType, href : AttributeValue, - html : Markup, + html : HtmlMarkup, left_icon : AnchorIcon, right_icon : AnchorIcon, target : AnchorTarget, @@ -34,21 +39,8 @@ pub struct Anchor { } impl ComponentTrait for Anchor { - #[rustfmt::skip] fn new() -> Self { - Anchor { - weight : 0, - renderable : render_always, - id : IdentifierValue::new(), - classes : Classes::new(), - anchor_type: AnchorType::Link, - href : AttributeValue::new(), - html : html! {}, - left_icon : AnchorIcon::new(), - right_icon : AnchorIcon::new(), - target : AnchorTarget::Default, - template : "default".to_owned(), - } + Anchor::default() } fn handler(&self) -> Handler { @@ -60,16 +52,16 @@ impl ComponentTrait for Anchor { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } #[rustfmt::skip] fn default_render(&self, context: &mut PageContext) -> Markup { let target = match &self.target() { AnchorTarget::Blank => Some("_blank"), - AnchorTarget::Context(name) => Some(name.as_str()), AnchorTarget::Parent => Some("_parent"), AnchorTarget::Top => Some("_top"), + AnchorTarget::Context(name) => Some(name.as_str()), _ => None, }; html! { @@ -118,8 +110,8 @@ impl Anchor { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -175,24 +167,24 @@ impl Anchor { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_type(&mut self, anchor_type: AnchorType) -> &mut Self { self.anchor_type = anchor_type; - self.classes.alter( + self.classes.alter_value( ClassesOp::SetDefault, match self.anchor_type { AnchorType::Button => "btn btn-primary", @@ -203,12 +195,12 @@ impl Anchor { } pub fn alter_href(&mut self, href: &str) -> &mut Self { - self.href.with_value(href); + self.href.alter_value(href); self } pub fn alter_html(&mut self, html: Markup) -> &mut Self { - self.html = html; + self.html.markup = html; self } @@ -253,7 +245,7 @@ impl Anchor { } pub fn html(&self) -> &Markup { - &self.html + &self.html.markup } pub fn left_icon(&self) -> &AnchorIcon { diff --git a/pagetop/src/base/component/block.rs b/pagetop/src/base/component/block.rs index 9e76a505..818b80c8 100644 --- a/pagetop/src/base/component/block.rs +++ b/pagetop/src/base/component/block.rs @@ -5,6 +5,7 @@ pub_const_handler!(COMPONENT_BLOCK); hook_before_render_component!(HOOK_BEFORE_RENDER_BLOCK, Block); #[rustfmt::skip] +#[derive(Default)] pub struct Block { weight : isize, renderable: Renderable, @@ -16,17 +17,8 @@ pub struct Block { } impl ComponentTrait for Block { - #[rustfmt::skip] fn new() -> Self { - Block { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default("block"), - title : AttributeValue::new(), - components: ComponentsBundle::new(), - template : "default".to_owned(), - } + Block::default().with_classes(ClassesOp::SetDefault, "block") } fn handler(&self) -> Handler { @@ -38,7 +30,7 @@ impl ComponentTrait for Block { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -77,8 +69,8 @@ impl Block { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -114,23 +106,23 @@ impl Block { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_title(&mut self, title: &str) -> &mut Self { - self.title.with_value(title); + self.title.alter_value(title); self } diff --git a/pagetop/src/base/component/container.rs b/pagetop/src/base/component/container.rs index 097d82b7..b3522957 100644 --- a/pagetop/src/base/component/container.rs +++ b/pagetop/src/base/component/container.rs @@ -4,15 +4,18 @@ pub_const_handler!(COMPONENT_CONTAINER); hook_before_render_component!(HOOK_BEFORE_RENDER_CONTAINER, Container); +#[derive(Default)] pub enum ContainerType { + #[default] + Wrapper, Header, Footer, Main, Section, - Wrapper, } #[rustfmt::skip] +#[derive(Default)] pub struct Container { weight : isize, renderable : Renderable, @@ -25,18 +28,10 @@ pub struct Container { } impl ComponentTrait for Container { - #[rustfmt::skip] fn new() -> Self { - Container { - weight : 0, - renderable : render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default("container"), - inner_classes : Classes::new_with_default("container"), - container_type: ContainerType::Wrapper, - components : ComponentsBundle::new(), - template : "default".to_owned(), - } + Container::default() + .with_classes(ClassesOp::SetDefault, "container") + .with_inner_classes(ClassesOp::SetDefault, "container") } fn handler(&self) -> Handler { @@ -48,7 +43,7 @@ impl ComponentTrait for Container { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -134,8 +129,8 @@ impl Container { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -171,23 +166,23 @@ impl Container { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_inner_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.inner_classes.alter(op, classes); + self.inner_classes.alter_value(op, classes); self } diff --git a/pagetop/src/base/component/form_element/button.rs b/pagetop/src/base/component/form_element/button.rs index 5e127f08..14382227 100644 --- a/pagetop/src/base/component/form_element/button.rs +++ b/pagetop/src/base/component/form_element/button.rs @@ -2,13 +2,16 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_BUTTON); +#[derive(Default)] pub enum ButtonType { + #[default] Button, - Reset, Submit, + Reset, } #[rustfmt::skip] +#[derive(Default)] pub struct Button { weight : isize, renderable : Renderable, @@ -22,20 +25,10 @@ pub struct Button { } impl ComponentTrait for Button { - #[rustfmt::skip] fn new() -> Self { - Button { - weight : 0, - renderable : render_always, - classes : Classes::new_with_default("btn btn-primary"), - button_type: ButtonType::Button, - name : AttributeValue::new(), - value : AttributeValue::new(), - autofocus : AttributeValue::new(), - disabled : AttributeValue::new(), - template : "default".to_owned(), - } - .with_classes(ClassesOp::AddFirst, "form-button") + Button::default() + .with_classes(ClassesOp::SetDefault, "btn btn-primary") + .with_classes(ClassesOp::AddFirst, "form-button") } fn handler(&self) -> Handler { @@ -47,15 +40,14 @@ impl ComponentTrait for Button { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } - #[rustfmt::skip] fn default_render(&self, _: &mut PageContext) -> Markup { let button_type = match self.button_type() { ButtonType::Button => "button", - ButtonType::Reset => "reset", ButtonType::Submit => "submit", + ButtonType::Reset => "reset", }; let id = self.name().get().map(|name| concat_string!("edit-", name)); html! { @@ -90,14 +82,6 @@ impl Button { Button::new().with_value(value) } - pub fn reset(value: &str) -> Self { - let mut button = Button::new() - .with_classes(ClassesOp::Replace("form-button"), "form-reset") - .with_value(value); - button.button_type = ButtonType::Reset; - button - } - pub fn submit(value: &str) -> Self { let mut button = Button::new() .with_classes(ClassesOp::Replace("form-button"), "form-submit") @@ -106,6 +90,14 @@ impl Button { button } + pub fn reset(value: &str) -> Self { + let mut button = Button::new() + .with_classes(ClassesOp::Replace("form-button"), "form-reset") + .with_value(value); + button.button_type = ButtonType::Reset; + button + } + // Button BUILDER. pub fn with_weight(mut self, weight: isize) -> Self { @@ -113,8 +105,8 @@ impl Button { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -155,28 +147,28 @@ impl Button { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_name(&mut self, name: &str) -> &mut Self { - self.name.with_value(name); + self.name.alter_value(name); self } pub fn alter_value(&mut self, value: &str) -> &mut Self { - self.value.with_value(value); + self.value.alter_value(value); self } pub fn alter_autofocus(&mut self, toggle: bool) -> &mut Self { - self.autofocus.with_value(match toggle { + self.autofocus.alter_value(match toggle { true => "autofocus", false => "", }); @@ -184,7 +176,7 @@ impl Button { } pub fn alter_disabled(&mut self, toggle: bool) -> &mut Self { - self.disabled.with_value(match toggle { + self.disabled.alter_value(match toggle { true => "disabled", false => "", }); diff --git a/pagetop/src/base/component/form_element/date.rs b/pagetop/src/base/component/form_element/date.rs index 871aeffd..6945f9e6 100644 --- a/pagetop/src/base/component/form_element/date.rs +++ b/pagetop/src/base/component/form_element/date.rs @@ -3,6 +3,7 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_DATE); #[rustfmt::skip] +#[derive(Default)] pub struct Date { weight : isize, renderable : Renderable, @@ -21,25 +22,10 @@ pub struct Date { } impl ComponentTrait for Date { - #[rustfmt::skip] fn new() -> Self { - Date { - weight : 0, - renderable : render_always, - classes : Classes::new_with_default("form-item"), - name : AttributeValue::new(), - value : AttributeValue::new(), - label : AttributeValue::new(), - placeholder : AttributeValue::new(), - autofocus : AttributeValue::new(), - autocomplete: AttributeValue::new(), - disabled : AttributeValue::new(), - readonly : AttributeValue::new(), - required : AttributeValue::new(), - help_text : AttributeValue::new(), - template : "default".to_owned(), - } - .with_classes(ClassesOp::AddFirst, "form-type-date") + Date::default() + .with_classes(ClassesOp::SetDefault,"form-item") + .with_classes(ClassesOp::AddFirst, "form-type-date") } fn handler(&self) -> Handler { @@ -51,7 +37,7 @@ impl ComponentTrait for Date { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, _: &mut PageContext) -> Markup { @@ -107,8 +93,8 @@ impl Date { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -179,38 +165,38 @@ impl Date { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_name(&mut self, name: &str) -> &mut Self { - self.name.with_value(name); + self.name.alter_value(name); self } pub fn alter_value(&mut self, value: &str) -> &mut Self { - self.value.with_value(value); + self.value.alter_value(value); self } pub fn alter_label(&mut self, label: &str) -> &mut Self { - self.label.with_value(label); + self.label.alter_value(label); self } pub fn alter_placeholder(&mut self, placeholder: &str) -> &mut Self { - self.placeholder.with_value(placeholder); + self.placeholder.alter_value(placeholder); self } pub fn alter_autofocus(&mut self, toggle: bool) -> &mut Self { - self.autofocus.with_value(match toggle { + self.autofocus.alter_value(match toggle { true => "autofocus", false => "", }); @@ -218,7 +204,7 @@ impl Date { } pub fn alter_autocomplete(&mut self, toggle: bool) -> &mut Self { - self.autocomplete.with_value(match toggle { + self.autocomplete.alter_value(match toggle { true => "", false => "off", }); @@ -226,7 +212,7 @@ impl Date { } pub fn alter_disabled(&mut self, toggle: bool) -> &mut Self { - self.disabled.with_value(match toggle { + self.disabled.alter_value(match toggle { true => "disabled", false => "", }); @@ -234,7 +220,7 @@ impl Date { } pub fn alter_readonly(&mut self, toggle: bool) -> &mut Self { - self.readonly.with_value(match toggle { + self.readonly.alter_value(match toggle { true => "readonly", false => "", }); @@ -242,7 +228,7 @@ impl Date { } pub fn alter_required(&mut self, toggle: bool) -> &mut Self { - self.required.with_value(match toggle { + self.required.alter_value(match toggle { true => "required", false => "", }); @@ -250,7 +236,7 @@ impl Date { } pub fn alter_help_text(&mut self, help_text: &str) -> &mut Self { - self.help_text.with_value(help_text); + self.help_text.alter_value(help_text); self } diff --git a/pagetop/src/base/component/form_element/form.rs b/pagetop/src/base/component/form_element/form.rs index 68b192fd..9ff1593e 100644 --- a/pagetop/src/base/component/form_element/form.rs +++ b/pagetop/src/base/component/form_element/form.rs @@ -4,12 +4,15 @@ pub_const_handler!(COMPONENT_FORM); hook_before_render_component!(HOOK_BEFORE_RENDER_FORM, Form); +#[derive(Default)] pub enum FormMethod { - Get, + #[default] Post, + Get, } #[rustfmt::skip] +#[derive(Default)] pub struct Form { weight : isize, renderable: Renderable, @@ -23,19 +26,10 @@ pub struct Form { } impl ComponentTrait for Form { - #[rustfmt::skip] fn new() -> Self { - Form { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default("form"), - action : AttributeValue::new(), - charset : AttributeValue::new_with_value("UTF-8"), - method : FormMethod::Post, - elements : ComponentsBundle::new(), - template : "default".to_owned(), - } + Form::default() + .with_classes(ClassesOp::SetDefault, "form") + .with_charset("UTF-8") } fn handler(&self) -> Handler { @@ -47,7 +41,7 @@ impl ComponentTrait for Form { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -56,8 +50,8 @@ impl ComponentTrait for Form { fn default_render(&self, context: &mut PageContext) -> Markup { let method = match self.method() { - FormMethod::Get => None, FormMethod::Post => Some("post".to_owned()), + FormMethod::Get => None, }; html! { form @@ -89,8 +83,8 @@ impl Form { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -136,28 +130,28 @@ impl Form { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_action(&mut self, action: &str) -> &mut Self { - self.action.with_value(action); + self.action.alter_value(action); self } pub fn alter_charset(&mut self, charset: &str) -> &mut Self { - self.charset.with_value(charset); + self.charset.alter_value(charset); self } diff --git a/pagetop/src/base/component/form_element/hidden.rs b/pagetop/src/base/component/form_element/hidden.rs index c56ee109..0ee11d83 100644 --- a/pagetop/src/base/component/form_element/hidden.rs +++ b/pagetop/src/base/component/form_element/hidden.rs @@ -3,6 +3,7 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_HIDDEN); #[rustfmt::skip] +#[derive(Default)] pub struct Hidden { weight: isize, name : IdentifierValue, @@ -10,13 +11,8 @@ pub struct Hidden { } impl ComponentTrait for Hidden { - #[rustfmt::skip] fn new() -> Self { - Hidden { - weight: 0, - name : IdentifierValue::new(), - value : AttributeValue::new(), - } + Hidden::default() } fn handler(&self) -> Handler { @@ -73,12 +69,12 @@ impl Hidden { } pub fn alter_name(&mut self, name: &str) -> &mut Self { - self.name.with_value(name); + self.name.alter_value(name); self } pub fn alter_value(&mut self, value: &str) -> &mut Self { - self.value.with_value(value); + self.value.alter_value(value); self } diff --git a/pagetop/src/base/component/form_element/input.rs b/pagetop/src/base/component/form_element/input.rs index 15236e16..51533327 100644 --- a/pagetop/src/base/component/form_element/input.rs +++ b/pagetop/src/base/component/form_element/input.rs @@ -2,16 +2,19 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_INPUT); +#[derive(Default)] pub enum InputType { - Email, + #[default] + Textfield, Password, Search, + Email, Telephone, - Textfield, Url, } #[rustfmt::skip] +#[derive(Default)] pub struct Input { weight : isize, renderable : Renderable, @@ -34,29 +37,12 @@ pub struct Input { } impl ComponentTrait for Input { - #[rustfmt::skip] fn new() -> Self { - Input { - weight : 0, - renderable : render_always, - classes : Classes::new_with_default("form-item"), - input_type : InputType::Textfield, - name : IdentifierValue::new(), - value : AttributeValue::new(), - label : AttributeValue::new(), - size : Some(60), - minlength : None, - maxlength : Some(128), - placeholder : AttributeValue::new(), - autofocus : AttributeValue::new(), - autocomplete: AttributeValue::new(), - disabled : AttributeValue::new(), - readonly : AttributeValue::new(), - required : AttributeValue::new(), - help_text : AttributeValue::new(), - template : "default".to_owned(), - } - .with_classes(ClassesOp::AddFirst, "form-type-textfield") + Input::default() + .with_classes(ClassesOp::SetDefault, "form-item") + .with_classes(ClassesOp::AddFirst, "form-type-textfield") + .with_size(Some(60)) + .with_maxlength(Some(128)) } fn handler(&self) -> Handler { @@ -68,17 +54,17 @@ impl ComponentTrait for Input { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } #[rustfmt::skip] fn default_render(&self, _: &mut PageContext) -> Markup { let type_input = match self.input_type() { - InputType::Email => "email", + InputType::Textfield => "text", InputType::Password => "password", InputType::Search => "search", + InputType::Email => "email", InputType::Telephone => "tel", - InputType::Textfield => "text", InputType::Url => "url", }; let id = self.name().get().map(|name| concat_string!("edit-", name)); @@ -190,8 +176,8 @@ impl Input { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -277,18 +263,18 @@ impl Input { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_name(&mut self, name: &str) -> &mut Self { - self.name.with_value(name); + self.name.alter_value(name); self.alter_classes( ClassesOp::SetDefault, concat_string!("form-item form-item-", name).as_str(), @@ -297,12 +283,12 @@ impl Input { } pub fn alter_value(&mut self, value: &str) -> &mut Self { - self.value.with_value(value); + self.value.alter_value(value); self } pub fn alter_label(&mut self, label: &str) -> &mut Self { - self.label.with_value(label); + self.label.alter_value(label); self } @@ -322,12 +308,12 @@ impl Input { } pub fn alter_placeholder(&mut self, placeholder: &str) -> &mut Self { - self.placeholder.with_value(placeholder); + self.placeholder.alter_value(placeholder); self } pub fn alter_autofocus(&mut self, toggle: bool) -> &mut Self { - self.autofocus.with_value(match toggle { + self.autofocus.alter_value(match toggle { true => "autofocus", false => "", }); @@ -335,7 +321,7 @@ impl Input { } pub fn alter_autocomplete(&mut self, toggle: bool) -> &mut Self { - self.autocomplete.with_value(match toggle { + self.autocomplete.alter_value(match toggle { true => "", false => "off", }); @@ -343,7 +329,7 @@ impl Input { } pub fn alter_disabled(&mut self, toggle: bool) -> &mut Self { - self.disabled.with_value(match toggle { + self.disabled.alter_value(match toggle { true => "disabled", false => "", }); @@ -351,7 +337,7 @@ impl Input { } pub fn alter_readonly(&mut self, toggle: bool) -> &mut Self { - self.readonly.with_value(match toggle { + self.readonly.alter_value(match toggle { true => "readonly", false => "", }); @@ -359,7 +345,7 @@ impl Input { } pub fn alter_required(&mut self, toggle: bool) -> &mut Self { - self.required.with_value(match toggle { + self.required.alter_value(match toggle { true => "required", false => "", }); @@ -367,7 +353,7 @@ impl Input { } pub fn alter_help_text(&mut self, help_text: &str) -> &mut Self { - self.help_text.with_value(help_text); + self.help_text.alter_value(help_text); self } diff --git a/pagetop/src/base/component/grid/column.rs b/pagetop/src/base/component/grid/column.rs index 5ddba56c..898141f2 100644 --- a/pagetop/src/base/component/grid/column.rs +++ b/pagetop/src/base/component/grid/column.rs @@ -18,7 +18,9 @@ const SIZE_10_OF_12: &str = "col-md-10"; const SIZE_11_OF_12: &str = "col-md-11"; const SIZE_12_OF_12: &str = "col-md-12"; +#[derive(Default)] pub enum ColumnSize { + #[default] Default, Is1of12, Is2of12, @@ -35,6 +37,7 @@ pub enum ColumnSize { } #[rustfmt::skip] +#[derive(Default)] pub struct Column { weight : isize, renderable: Renderable, @@ -46,17 +49,8 @@ pub struct Column { } impl ComponentTrait for Column { - #[rustfmt::skip] fn new() -> Self { - Column { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default(SIZE__DEFAULT), - size : ColumnSize::Default, - components: ComponentsBundle::new(), - template : "default".to_owned(), - } + Column::default().with_classes(ClassesOp::SetDefault, SIZE__DEFAULT) } fn handler(&self) -> Handler { @@ -68,7 +62,7 @@ impl ComponentTrait for Column { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -100,8 +94,8 @@ impl Column { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -137,18 +131,18 @@ impl Column { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } diff --git a/pagetop/src/base/component/grid/row.rs b/pagetop/src/base/component/grid/row.rs index 2652bbce..76919287 100644 --- a/pagetop/src/base/component/grid/row.rs +++ b/pagetop/src/base/component/grid/row.rs @@ -5,6 +5,7 @@ pub_const_handler!(COMPONENT_ROW); hook_before_render_component!(HOOK_BEFORE_RENDER_ROW, Row); #[rustfmt::skip] +#[derive(Default)] pub struct Row { weight : isize, renderable: Renderable, @@ -15,16 +16,8 @@ pub struct Row { } impl ComponentTrait for Row { - #[rustfmt::skip] fn new() -> Self { - Row { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default("row"), - columns : ComponentsBundle::new(), - template : "default".to_owned(), - } + Row::default().with_classes(ClassesOp::SetDefault, "row") } fn handler(&self) -> Handler { @@ -36,7 +29,7 @@ impl ComponentTrait for Row { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -68,8 +61,8 @@ impl Row { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -100,18 +93,18 @@ impl Row { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } diff --git a/pagetop/src/base/component/heading.rs b/pagetop/src/base/component/heading.rs index 0695bad2..b3c643b6 100644 --- a/pagetop/src/base/component/heading.rs +++ b/pagetop/src/base/component/heading.rs @@ -2,7 +2,9 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_HEADING); +#[derive(Default)] pub enum HeadingType { + #[default] H1, H2, H3, @@ -11,41 +13,34 @@ pub enum HeadingType { H6, } +#[derive(Default)] pub enum HeadingDisplay { + #[default] + Normal, XxLarge, Large, Medium, Small, XxSmall, - Normal, Subtitle, } #[rustfmt::skip] +#[derive(Default)] pub struct Heading { weight : isize, renderable : Renderable, id : IdentifierValue, classes : Classes, heading_type: HeadingType, - html : Markup, + html : HtmlMarkup, display : HeadingDisplay, template : String, } impl ComponentTrait for Heading { - #[rustfmt::skip] fn new() -> Self { - Heading { - weight : 0, - renderable : render_always, - id : IdentifierValue::new(), - classes : Classes::new(), - heading_type: HeadingType::H1, - html : html! {}, - display : HeadingDisplay::Normal, - template : "default".to_owned(), - } + Heading::default() } fn handler(&self) -> Handler { @@ -57,7 +52,7 @@ impl ComponentTrait for Heading { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, _: &mut PageContext) -> Markup { @@ -126,8 +121,8 @@ impl Heading { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -168,18 +163,18 @@ impl Heading { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } @@ -189,14 +184,14 @@ impl Heading { } pub fn alter_html(&mut self, html: Markup) -> &mut Self { - self.html = html; + self.html.markup = html; self } #[rustfmt::skip] pub fn alter_display(&mut self, display: HeadingDisplay) -> &mut Self { self.display = display; - self.classes.alter( + self.classes.alter_value( ClassesOp::SetDefault, match &self.display() { HeadingDisplay::XxLarge => "display-2", @@ -231,7 +226,7 @@ impl Heading { } pub fn html(&self) -> &Markup { - &self.html + &self.html.markup } pub fn display(&self) -> &HeadingDisplay { diff --git a/pagetop/src/base/component/html.rs b/pagetop/src/base/component/html.rs index 8454960f..881ef29c 100644 --- a/pagetop/src/base/component/html.rs +++ b/pagetop/src/base/component/html.rs @@ -3,22 +3,17 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_HTML); #[rustfmt::skip] +#[derive(Default)] pub struct Html { weight : isize, renderable: Renderable, - html : Markup, + html : HtmlMarkup, template : String, } impl ComponentTrait for Html { - #[rustfmt::skip] fn new() -> Self { - Html { - weight : 0, - renderable: render_always, - html : html! {}, - template : "default".to_owned(), - } + Html::default() } fn handler(&self) -> Handler { @@ -30,7 +25,7 @@ impl ComponentTrait for Html { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, _: &mut PageContext) -> Markup { @@ -58,8 +53,8 @@ impl Html { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -80,13 +75,13 @@ impl Html { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_html(&mut self, html: Markup) -> &mut Self { - self.html = html; + self.html.markup = html; self } @@ -98,7 +93,7 @@ impl Html { // Html GETTERS. pub fn html(&self) -> &Markup { - &self.html + &self.html.markup } pub fn template(&self) -> &str { diff --git a/pagetop/src/base/component/icon.rs b/pagetop/src/base/component/icon.rs index 4b8eab6a..657a4f7f 100644 --- a/pagetop/src/base/component/icon.rs +++ b/pagetop/src/base/component/icon.rs @@ -3,6 +3,7 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_ICON); #[rustfmt::skip] +#[derive(Default)] pub struct Icon { weight : isize, renderable: Renderable, @@ -11,14 +12,8 @@ pub struct Icon { } impl ComponentTrait for Icon { - #[rustfmt::skip] fn new() -> Self { - Icon { - weight : 0, - renderable: render_always, - icon_name : "question-circle-fill".to_owned(), - classes : Classes::new_with_default("bi-question-circle-fill"), - } + Icon::default().with_classes(ClassesOp::SetDefault, "bi-question-circle-fill") } fn handler(&self) -> Handler { @@ -30,7 +25,7 @@ impl ComponentTrait for Icon { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -64,8 +59,8 @@ impl Icon { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -86,8 +81,8 @@ impl Icon { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } @@ -101,7 +96,7 @@ impl Icon { } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } diff --git a/pagetop/src/base/component/image.rs b/pagetop/src/base/component/image.rs index 2e0de6d6..b3afe450 100644 --- a/pagetop/src/base/component/image.rs +++ b/pagetop/src/base/component/image.rs @@ -3,6 +3,7 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_IMAGE); #[rustfmt::skip] +#[derive(Default)] pub struct Image { weight : isize, renderable: Renderable, @@ -13,16 +14,8 @@ pub struct Image { } impl ComponentTrait for Image { - #[rustfmt::skip] fn new() -> Self { - Image { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new_with_default("img-fluid"), - source : AttributeValue::new(), - template : "default".to_owned(), - } + Image::default().with_classes(ClassesOp::SetDefault, "img-fluid") } fn handler(&self) -> Handler { @@ -34,7 +27,7 @@ impl ComponentTrait for Image { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, _: &mut PageContext) -> Markup { @@ -67,8 +60,8 @@ impl Image { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -99,23 +92,23 @@ impl Image { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_source(&mut self, source: &str) -> &mut Self { - self.source.with_value(source); + self.source.alter_value(source); self } diff --git a/pagetop/src/base/component/menu.rs b/pagetop/src/base/component/menu.rs index 2ee45773..89da9f7b 100644 --- a/pagetop/src/base/component/menu.rs +++ b/pagetop/src/base/component/menu.rs @@ -2,19 +2,22 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_MENUITEM); +#[derive(Default)] pub enum MenuItemType { + #[default] + Void, Label(String), Link(String, String), LinkBlank(String, String), Html(Markup), - Separator, Submenu(String, Menu), - Void, + Separator, } // MenuItem. #[rustfmt::skip] +#[derive(Default)] pub struct MenuItem { weight : isize, renderable: Renderable, @@ -22,13 +25,8 @@ pub struct MenuItem { } impl ComponentTrait for MenuItem { - #[rustfmt::skip] fn new() -> Self { - MenuItem { - weight : 0, - renderable: render_always, - item_type : MenuItemType::Void, - } + MenuItem::default() } fn handler(&self) -> Handler { @@ -40,11 +38,13 @@ impl ComponentTrait for MenuItem { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, context: &mut PageContext) -> Markup { match self.item_type() { + MenuItemType::Void => html! { + }, MenuItemType::Label(label) => html! { li class="label" { a href="#" { (label) } } }, @@ -70,7 +70,6 @@ impl ComponentTrait for MenuItem { MenuItemType::Separator => html! { li class="separator" { } }, - MenuItemType::Void => html! {}, } } @@ -88,7 +87,7 @@ impl MenuItem { pub fn label(label: &str) -> Self { MenuItem { weight : 0, - renderable: render_always, + renderable: Renderable::default(), item_type : MenuItemType::Label(label.to_owned()), } } @@ -97,7 +96,7 @@ impl MenuItem { pub fn link(label: &str, path: &str) -> Self { MenuItem { weight : 0, - renderable: render_always, + renderable: Renderable::default(), item_type : MenuItemType::Link(label.to_owned(), path.to_owned()), } } @@ -106,7 +105,7 @@ impl MenuItem { pub fn link_blank(label: &str, path: &str) -> Self { MenuItem { weight : 0, - renderable: render_always, + renderable: Renderable::default(), item_type : MenuItemType::LinkBlank(label.to_owned(), path.to_owned()), } } @@ -115,29 +114,29 @@ impl MenuItem { pub fn html(html: Markup) -> Self { MenuItem { weight : 0, - renderable: render_always, + renderable: Renderable::default(), item_type : MenuItemType::Html(html), } } - #[rustfmt::skip] - pub fn separator() -> Self { - MenuItem { - weight : 0, - renderable: render_always, - item_type : MenuItemType::Separator, - } - } - #[rustfmt::skip] pub fn submenu(label: &str, menu: Menu) -> Self { MenuItem { weight : 0, - renderable: render_always, + renderable: Renderable::default(), item_type : MenuItemType::Submenu(label.to_owned(), menu), } } + #[rustfmt::skip] + pub fn separator() -> Self { + MenuItem { + weight : 0, + renderable: Renderable::default(), + item_type : MenuItemType::Separator, + } + } + // MenuItem BUILDER. pub fn with_weight(mut self, weight: isize) -> Self { @@ -145,8 +144,8 @@ impl MenuItem { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -157,8 +156,8 @@ impl MenuItem { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } @@ -176,6 +175,7 @@ pub_const_handler!(COMPONENT_MENU); hook_before_render_component!(HOOK_BEFORE_RENDER_MENU, Menu); #[rustfmt::skip] +#[derive(Default)] pub struct Menu { weight : isize, renderable: Renderable, @@ -186,16 +186,8 @@ pub struct Menu { } impl ComponentTrait for Menu { - #[rustfmt::skip] fn new() -> Self { - Menu { - weight : 0, - renderable: render_always, - items : ComponentsBundle::new(), - id : IdentifierValue::new(), - classes : Classes::new_with_default("sm sm-clean"), - template : "default".to_owned(), - } + Menu::default().with_classes(ClassesOp::SetDefault, "sm sm-clean") } fn handler(&self) -> Handler { @@ -207,7 +199,7 @@ impl ComponentTrait for Menu { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn before_render(&mut self, context: &mut PageContext) { @@ -259,8 +251,8 @@ impl Menu { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -291,18 +283,18 @@ impl Menu { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } diff --git a/pagetop/src/base/component/paragraph.rs b/pagetop/src/base/component/paragraph.rs index 74124be3..ab1eccf7 100644 --- a/pagetop/src/base/component/paragraph.rs +++ b/pagetop/src/base/component/paragraph.rs @@ -2,38 +2,32 @@ use crate::prelude::*; pub_const_handler!(COMPONENT_PARAGRAPH); +#[derive(Default)] pub enum ParagraphDisplay { + #[default] + Normal, XxLarge, Large, Medium, Small, XxSmall, - Normal, } #[rustfmt::skip] +#[derive(Default)] pub struct Paragraph { weight : isize, renderable: Renderable, id : IdentifierValue, classes : Classes, - html : Markup, + html : HtmlMarkup, display : ParagraphDisplay, template : String, } impl ComponentTrait for Paragraph { - #[rustfmt::skip] fn new() -> Self { - Paragraph { - weight : 0, - renderable: render_always, - id : IdentifierValue::new(), - classes : Classes::new(), - html : html! {}, - display : ParagraphDisplay::Normal, - template : "default".to_owned(), - } + Paragraph::default() } fn handler(&self) -> Handler { @@ -45,7 +39,7 @@ impl ComponentTrait for Paragraph { } fn is_renderable(&self, context: &PageContext) -> bool { - (self.renderable)(context) + (self.renderable.check)(context) } fn default_render(&self, _: &mut PageContext) -> Markup { @@ -75,8 +69,8 @@ impl Paragraph { self } - pub fn with_renderable(mut self, renderable: Renderable) -> Self { - self.alter_renderable(renderable); + pub fn with_renderable(mut self, check: IsRenderable) -> Self { + self.alter_renderable(check); self } @@ -112,30 +106,30 @@ impl Paragraph { self } - pub fn alter_renderable(&mut self, renderable: Renderable) -> &mut Self { - self.renderable = renderable; + pub fn alter_renderable(&mut self, check: IsRenderable) -> &mut Self { + self.renderable.check = check; self } pub fn alter_id(&mut self, id: &str) -> &mut Self { - self.id.with_value(id); + self.id.alter_value(id); self } pub fn alter_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.classes.alter(op, classes); + self.classes.alter_value(op, classes); self } pub fn alter_html(&mut self, html: Markup) -> &mut Self { - self.html = html; + self.html.markup = html; self } #[rustfmt::skip] pub fn alter_display(&mut self, display: ParagraphDisplay) -> &mut Self { self.display = display; - self.classes.alter( + self.classes.alter_value( ClassesOp::SetDefault, match &self.display() { ParagraphDisplay::XxLarge => "fs-2", @@ -165,7 +159,7 @@ impl Paragraph { } pub fn html(&self) -> &Markup { - &self.html + &self.html.markup } pub fn display(&self) -> &ParagraphDisplay { diff --git a/pagetop/src/core/component.rs b/pagetop/src/core/component.rs index 175a6d87..cd596397 100644 --- a/pagetop/src/core/component.rs +++ b/pagetop/src/core/component.rs @@ -8,14 +8,8 @@ mod all; pub use all::add_component_to; pub(crate) use all::common_components; -use crate::response::page::PageContext; +mod renderable; +pub use renderable::{IsRenderable, Renderable}; -pub type Renderable = fn(_: &PageContext) -> bool; - -pub fn render_always(_: &PageContext) -> bool { - true -} - -pub fn render_never(_: &PageContext) -> bool { - false -} +mod html_markup; +pub use html_markup::HtmlMarkup; diff --git a/pagetop/src/core/component/bundle.rs b/pagetop/src/core/component/bundle.rs index ce294b37..2927ff29 100644 --- a/pagetop/src/core/component/bundle.rs +++ b/pagetop/src/core/component/bundle.rs @@ -9,7 +9,7 @@ pub struct ComponentsBundle(Vec>>); impl ComponentsBundle { pub fn new() -> Self { - ComponentsBundle(Vec::new()) + ComponentsBundle::default() } pub fn new_with(component: impl ComponentTrait) -> Self { diff --git a/pagetop/src/core/component/html_markup.rs b/pagetop/src/core/component/html_markup.rs new file mode 100644 index 00000000..c298c1cc --- /dev/null +++ b/pagetop/src/core/component/html_markup.rs @@ -0,0 +1,13 @@ +use crate::html::{html, Markup}; + +pub struct HtmlMarkup { + pub markup: Markup, +} + +impl Default for HtmlMarkup { + fn default() -> Self { + HtmlMarkup { + markup: html! {}, + } + } +} diff --git a/pagetop/src/core/component/renderable.rs b/pagetop/src/core/component/renderable.rs new file mode 100644 index 00000000..c93da898 --- /dev/null +++ b/pagetop/src/core/component/renderable.rs @@ -0,0 +1,19 @@ +use crate::response::page::PageContext; + +pub type IsRenderable = fn(&PageContext) -> bool; + +pub struct Renderable { + pub check: IsRenderable, +} + +impl Default for Renderable { + fn default() -> Self { + Renderable { + check: render_always, + } + } +} + +fn render_always(_: &PageContext) -> bool { + true +} diff --git a/pagetop/src/html.rs b/pagetop/src/html.rs index eb8e1563..3551caa2 100644 --- a/pagetop/src/html.rs +++ b/pagetop/src/html.rs @@ -15,4 +15,4 @@ mod identifier; pub use identifier::IdentifierValue; mod classes; -pub use classes::{ClassValue, Classes, ClassesOp}; +pub use classes::{Classes, ClassesOp}; diff --git a/pagetop/src/html/assets/javascript.rs b/pagetop/src/html/assets/javascript.rs index 8d72e7fd..02bff3b9 100644 --- a/pagetop/src/html/assets/javascript.rs +++ b/pagetop/src/html/assets/javascript.rs @@ -1,14 +1,16 @@ use super::AssetsTrait; use crate::html::{html, Markup}; -#[derive(PartialEq)] +#[derive(Default, PartialEq)] pub enum ModeJS { Async, + #[default] Defer, Normal, } #[rustfmt::skip] +#[derive(Default)] pub struct JavaScript { source : &'static str, prefix : &'static str, @@ -38,14 +40,10 @@ impl AssetsTrait for JavaScript { } impl JavaScript { - #[rustfmt::skip] pub fn located(source: &'static str) -> Self { JavaScript { source, - prefix : "", - version: "", - weight : 0, - mode : ModeJS::Defer, + ..Default::default() } } diff --git a/pagetop/src/html/assets/stylesheet.rs b/pagetop/src/html/assets/stylesheet.rs index 000af232..d7cce552 100644 --- a/pagetop/src/html/assets/stylesheet.rs +++ b/pagetop/src/html/assets/stylesheet.rs @@ -9,6 +9,7 @@ pub enum TargetMedia { } #[rustfmt::skip] +#[derive(Default)] pub struct StyleSheet { source : &'static str, prefix : &'static str, @@ -37,14 +38,10 @@ impl AssetsTrait for StyleSheet { } impl StyleSheet { - #[rustfmt::skip] pub fn located(source: &'static str) -> Self { StyleSheet { source, - prefix : "", - version: "", - media : None, - weight : 0, + ..Default::default() } } diff --git a/pagetop/src/html/attribute.rs b/pagetop/src/html/attribute.rs index b6cc0e9a..1a68d21a 100644 --- a/pagetop/src/html/attribute.rs +++ b/pagetop/src/html/attribute.rs @@ -3,20 +3,25 @@ pub struct AttributeValue(String); impl AttributeValue { pub fn new() -> Self { - AttributeValue("".to_owned()) + AttributeValue::default() } - pub fn new_with_value(value: &str) -> Self { - let mut attr = Self::new(); - attr.with_value(value); - attr + // AttributeValue BUILDER. + + pub fn with_value(mut self, value: &str) -> Self { + self.alter_value(value); + self } - pub fn with_value(&mut self, value: &str) -> &mut Self { + // AttributeValue ALTER. + + pub fn alter_value(&mut self, value: &str) -> &mut Self { self.0 = value.trim().to_owned(); self } + // AttributeValue GETTERS. + pub fn get(&self) -> Option { if self.0.is_empty() { None diff --git a/pagetop/src/html/classes.rs b/pagetop/src/html/classes.rs index 3bdca35d..6d453128 100644 --- a/pagetop/src/html/classes.rs +++ b/pagetop/src/html/classes.rs @@ -1,14 +1,12 @@ use crate::concat_string; -pub type ClassValue = &'static str; - pub enum ClassesOp { Add, - AddAfter(ClassValue), - AddBefore(ClassValue), + AddAfter(&'static str), + AddBefore(&'static str), AddFirst, Remove, - Replace(ClassValue), + Replace(&'static str), Reset, SetDefault, SetDefaultIfEmpty, @@ -22,21 +20,20 @@ pub struct Classes { } impl Classes { - #[rustfmt::skip] pub fn new() -> Self { - Classes { - default: "".to_owned(), - added : "".to_owned(), - } + Classes::default() } - pub fn new_with_default(default: &str) -> Self { - let mut classes = Self::new(); - classes.alter(ClassesOp::SetDefault, default); - classes + // Classes BUILDER. + + pub fn with_value(mut self, op: ClassesOp, classes: &str) -> Self { + self.alter_value(op, classes); + self } - pub fn alter(&mut self, op: ClassesOp, classes: &str) -> &mut Self { + // Classes ALTER. + + pub fn alter_value(&mut self, op: ClassesOp, classes: &str) -> &mut Self { let classes = classes.trim(); match op { ClassesOp::Add => { @@ -101,6 +98,8 @@ impl Classes { self } + // Classes GETTERS. + pub fn get(&self) -> Option { if self.default.is_empty() && self.added.is_empty() { None diff --git a/pagetop/src/html/favicon.rs b/pagetop/src/html/favicon.rs index 604a7873..1af80243 100644 --- a/pagetop/src/html/favicon.rs +++ b/pagetop/src/html/favicon.rs @@ -5,9 +5,11 @@ pub struct Favicon(Vec); impl Favicon { pub fn new() -> Self { - Favicon(Vec::new()) + Favicon::default() } + // Favicon BUILDER. + pub fn with_icon(self, image: &str) -> Self { self.add_item("icon", image, "", "") } @@ -72,6 +74,8 @@ impl Favicon { self } + // Favicon RENDER. + pub(crate) fn render(&self) -> Markup { html! { @for item in &self.0 { diff --git a/pagetop/src/html/identifier.rs b/pagetop/src/html/identifier.rs index 81223993..6707a71f 100644 --- a/pagetop/src/html/identifier.rs +++ b/pagetop/src/html/identifier.rs @@ -3,20 +3,25 @@ pub struct IdentifierValue(String); impl IdentifierValue { pub fn new() -> Self { - IdentifierValue("".to_owned()) + IdentifierValue::default() } - pub fn new_with_value(value: &str) -> Self { - let mut id = Self::new(); - id.with_value(value); - id + // IdentifierValue BUILDER. + + pub fn with_value(mut self, value: &str) -> Self { + self.alter_value(value); + self } - pub fn with_value(&mut self, value: &str) -> &Self { + // IdentifierValue ALTER. + + pub fn alter_value(&mut self, value: &str) -> &mut Self { self.0 = value.trim().replace(' ', "_"); self } + // IdentifierValue GETTERS. + pub fn get(&self) -> Option { if self.0.is_empty() { None diff --git a/pagetop/src/response/page/context.rs b/pagetop/src/response/page/context.rs index 9b5ed179..cb8571d7 100644 --- a/pagetop/src/response/page/context.rs +++ b/pagetop/src/response/page/context.rs @@ -23,9 +23,9 @@ pub struct PageContext { id_counter : usize, } -impl PageContext { +impl Default for PageContext { #[rustfmt::skip] - pub fn new() -> Self { + fn default() -> Self { PageContext { theme : *DEFAULT_THEME, favicon : None, @@ -37,6 +37,12 @@ impl PageContext { id_counter : 0, } } +} + +impl PageContext { + pub fn new() -> Self { + PageContext::default() + } pub fn alter(&mut self, op: PageOp) -> &mut Self { match op { diff --git a/pagetop/src/response/page/definition.rs b/pagetop/src/response/page/definition.rs index 6bbf0cd5..3617b40d 100644 --- a/pagetop/src/response/page/definition.rs +++ b/pagetop/src/response/page/definition.rs @@ -53,26 +53,32 @@ pub struct Page { template : String, } -impl Page { +impl Default for Page { #[rustfmt::skip] - pub fn new() -> Self { + fn default() -> Self { Page { context : PageContext::new(), language : match &*DEFAULT_LANGUAGE { - Some(language) => AttributeValue::new_with_value(language), + Some(language) => AttributeValue::new().with_value(language), _ => AttributeValue::new(), }, direction : match &*DEFAULT_DIRECTION { - Some(direction) => AttributeValue::new_with_value(direction), + Some(direction) => AttributeValue::new().with_value(direction), _ => AttributeValue::new(), }, title : AttributeValue::new(), description : AttributeValue::new(), - body_classes: Classes::new_with_default("body"), + body_classes: Classes::new().with_value(ClassesOp::SetDefault, "body"), regions : common_components(), template : "default".to_owned(), } } +} + +impl Page { + pub fn new() -> Self { + Page::default() + } // Page BUILDER. @@ -129,12 +135,12 @@ impl Page { } pub fn alter_language(&mut self, language: &str) -> &mut Self { - self.language.with_value(language); + self.language.alter_value(language); self } pub fn alter_direction(&mut self, dir: TextDirection) -> &mut Self { - self.direction.with_value(match dir { + self.direction.alter_value(match dir { TextDirection::Auto => "auto", TextDirection::LeftToRight => "ltr", TextDirection::RightToLeft => "rtl", @@ -143,17 +149,17 @@ impl Page { } pub fn alter_title(&mut self, title: &str) -> &mut Self { - self.title.with_value(title); + self.title.alter_value(title); self } pub fn alter_description(&mut self, description: &str) -> &mut Self { - self.description.with_value(description); + self.description.alter_value(description); self } pub fn alter_body_classes(&mut self, op: ClassesOp, classes: &str) -> &mut Self { - self.body_classes.alter(op, classes); + self.body_classes.alter_value(op, classes); self } diff --git a/website/src/mdbook.rs b/website/src/mdbook.rs index 21629bc5..23572368 100644 --- a/website/src/mdbook.rs +++ b/website/src/mdbook.rs @@ -7,7 +7,7 @@ use std::collections::HashMap; include!(concat!(env!("OUT_DIR"), "/mdbook.rs")); -static MDBOOK: LazyStatic> = LazyStatic::new(|| generate()); +static MDBOOK: LazyStatic> = LazyStatic::new(generate); pub_const_handler!(MODULE_MDBOOK); @@ -38,14 +38,8 @@ async fn mdbook_page(request: app::HttpRequest) -> ResultPage title, _ => "Documentación", }; - let _print = match extract("Print", html) { - Some("enabled") => true, - _ => false, - }; - let _mathjax = match extract("MathJax", html) { - Some("supported") => true, - _ => false, - }; + let _print = matches!(extract("Print", html), Some("enabled")); + let _mathjax = matches!(extract("MathJax", html), Some("supported")); let beginning = { let separator = ""; match html.find(separator) {