From 9993b5975bb4f1abf59d57e9f3e5846d954335f5 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 24 Jun 2023 01:47:26 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A5=20Impide=20prepare=5Fcomponent()?= =?UTF-8?q?=20renderizar=20en=20html!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pagetop/src/base/component/block.rs | 6 +++--- pagetop/src/base/component/html.rs | 4 ++-- pagetop/src/base/component/l10n.rs | 14 +++++++------- pagetop/src/core/component/definition.rs | 8 ++++---- pagetop/src/html.rs | 16 ++++++++++++++++ pagetop/src/response/fatal_error/error403.rs | 8 ++++---- pagetop/src/response/fatal_error/error404.rs | 8 ++++---- 7 files changed, 40 insertions(+), 24 deletions(-) diff --git a/pagetop/src/base/component/block.rs b/pagetop/src/base/component/block.rs index 3275676c..b36835dc 100644 --- a/pagetop/src/base/component/block.rs +++ b/pagetop/src/base/component/block.rs @@ -41,9 +41,9 @@ impl ComponentTrait for Block { run_actions_before_prepare_component(self, rcx); } - fn prepare_component(&self, rcx: &mut RenderContext) -> Markup { + fn prepare_component(&self, rcx: &mut RenderContext) -> PrepareMarkup { let id = rcx.required_id::(self.id()); - html! { + PrepareMarkup::With(html! { div id=(id) class=[self.classes().get()] { @if let Some(title) = self.title().get() { h2 class="block-title" { (title) } @@ -52,7 +52,7 @@ impl ComponentTrait for Block { (self.components().prepare(rcx)) } } - } + }) } fn as_ref_any(&self) -> &dyn AnyComponent { diff --git a/pagetop/src/base/component/html.rs b/pagetop/src/base/component/html.rs index e1a53268..4c0ee6ed 100644 --- a/pagetop/src/base/component/html.rs +++ b/pagetop/src/base/component/html.rs @@ -14,8 +14,8 @@ impl ComponentTrait for Html { COMPONENT_HTML } - fn prepare_component(&self, _: &mut RenderContext) -> Markup { - html! { (self.html()) } + fn prepare_component(&self, _: &mut RenderContext) -> PrepareMarkup { + PrepareMarkup::With(html! { (self.html()) }) } fn as_ref_any(&self) -> &dyn AnyComponent { diff --git a/pagetop/src/base/component/l10n.rs b/pagetop/src/base/component/l10n.rs index 598794c5..054f038e 100644 --- a/pagetop/src/base/component/l10n.rs +++ b/pagetop/src/base/component/l10n.rs @@ -28,11 +28,11 @@ impl ComponentTrait for L10n { COMPONENT_L10N } - fn prepare_component(&self, rcx: &mut RenderContext) -> Markup { + fn prepare_component(&self, rcx: &mut RenderContext) -> PrepareMarkup { match self.op() { - L10nOp::None => html! {}, - L10nOp::Text(text) => html! { (text) }, - L10nOp::Translated(key, locales) => html! { + L10nOp::None => PrepareMarkup::None, + L10nOp::Text(text) => PrepareMarkup::Text(text), + L10nOp::Translated(key, locales) => PrepareMarkup::With(html! { (locales .lookup_with_args( rcx.langid(), @@ -44,8 +44,8 @@ impl ComponentTrait for L10n { ) .unwrap_or(key.to_string()) ) - }, - L10nOp::Escaped(key, locales) => html! { + }), + L10nOp::Escaped(key, locales) => PrepareMarkup::With(html! { (PreEscaped(locales .lookup_with_args( rcx.langid(), @@ -57,7 +57,7 @@ impl ComponentTrait for L10n { ) .unwrap_or(key.to_string()) )) - }, + }), } } diff --git a/pagetop/src/core/component/definition.rs b/pagetop/src/core/component/definition.rs index 60609203..ef9df3b8 100644 --- a/pagetop/src/core/component/definition.rs +++ b/pagetop/src/core/component/definition.rs @@ -1,5 +1,5 @@ use crate::core::component::RenderContext; -use crate::html::{html, Markup}; +use crate::html::{html, Markup, PrepareMarkup}; use crate::{util, Handle}; pub use std::any::Any as AnyComponent; @@ -40,8 +40,8 @@ pub trait ComponentTrait: AnyComponent + BaseComponent + Send + Sync { fn before_prepare(&mut self, rcx: &mut RenderContext) {} #[allow(unused_variables)] - fn prepare_component(&self, rcx: &mut RenderContext) -> Markup { - html! {} + fn prepare_component(&self, rcx: &mut RenderContext) -> PrepareMarkup { + PrepareMarkup::None } #[allow(unused_variables)] @@ -63,7 +63,7 @@ impl BaseComponent for C { let markup = match rcx.theme().render_component(self, rcx) { Some(html) => html, - None => self.prepare_component(rcx), + None => self.prepare_component(rcx).html(), }; // Acciones después de preparar el componente. diff --git a/pagetop/src/html.rs b/pagetop/src/html.rs index fcfbbab7..b9dbd78e 100644 --- a/pagetop/src/html.rs +++ b/pagetop/src/html.rs @@ -22,3 +22,19 @@ pub use attribute::AttributeValue; mod classes; pub use classes::{Classes, ClassesOp}; + +pub enum PrepareMarkup { + None, + Text(&'static str), + With(Markup), +} + +impl PrepareMarkup { + pub fn html(self) -> Markup { + match self { + PrepareMarkup::None => html! {}, + PrepareMarkup::Text(text) => html! { (text) }, + PrepareMarkup::With(markup) => markup, + } + } +} diff --git a/pagetop/src/response/fatal_error/error403.rs b/pagetop/src/response/fatal_error/error403.rs index 1bf38614..5b6a7299 100644 --- a/pagetop/src/response/fatal_error/error403.rs +++ b/pagetop/src/response/fatal_error/error403.rs @@ -1,5 +1,5 @@ use crate::core::component::{AnyComponent, ComponentTrait, RenderContext}; -use crate::html::{html, Markup}; +use crate::html::{html, PrepareMarkup}; use crate::{use_handle, Handle}; use_handle!(ERROR_403); @@ -15,12 +15,12 @@ impl ComponentTrait for Error403 { ERROR_403 } - fn prepare_component(&self, _rcx: &mut RenderContext) -> Markup { - html! { + fn prepare_component(&self, _rcx: &mut RenderContext) -> PrepareMarkup { + PrepareMarkup::With(html! { div { h1 { ("FORBIDDEN ACCESS") } } - } + }) } fn as_ref_any(&self) -> &dyn AnyComponent { diff --git a/pagetop/src/response/fatal_error/error404.rs b/pagetop/src/response/fatal_error/error404.rs index 5db72178..afd1dc68 100644 --- a/pagetop/src/response/fatal_error/error404.rs +++ b/pagetop/src/response/fatal_error/error404.rs @@ -1,5 +1,5 @@ use crate::core::component::{AnyComponent, ComponentTrait, RenderContext}; -use crate::html::{html, Markup}; +use crate::html::{html, PrepareMarkup}; use crate::{use_handle, Handle}; use_handle!(ERROR_404); @@ -15,12 +15,12 @@ impl ComponentTrait for Error404 { ERROR_404 } - fn prepare_component(&self, _rcx: &mut RenderContext) -> Markup { - html! { + fn prepare_component(&self, _rcx: &mut RenderContext) -> PrepareMarkup { + PrepareMarkup::With(html! { div { h1 { ("RESOURCE NOT FOUND") } } - } + }) } fn as_ref_any(&self) -> &dyn AnyComponent {