From 8a184c38b6282c78eb77106e1ea3093967e5f5a1 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 28 Dec 2024 12:30:05 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Mejora=20rendimiento=20del?= =?UTF-8?q?=20renderizado=20de=20p=C3=A1ginas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/pagetop-mdbook/src/lib.rs | 1 - pagetop/src/base/action/theme.rs | 6 --- .../action/theme/after_render_page_body.rs | 37 ------------------- .../action/theme/before_render_page_body.rs | 37 ------------------- pagetop/src/core/theme/definition.rs | 24 +++++++----- pagetop/src/response/page.rs | 26 ++++--------- 6 files changed, 22 insertions(+), 109 deletions(-) delete mode 100644 pagetop/src/base/action/theme/after_render_page_body.rs delete mode 100644 pagetop/src/base/action/theme/before_render_page_body.rs diff --git a/packages/pagetop-mdbook/src/lib.rs b/packages/pagetop-mdbook/src/lib.rs index 1099e449..3b4f25fd 100644 --- a/packages/pagetop-mdbook/src/lib.rs +++ b/packages/pagetop-mdbook/src/lib.rs @@ -96,7 +96,6 @@ async fn mdbook_page( .with_assets(AssetsOp::AddJavaScript(JavaScript::from( "/mdbook/navigators.js", ))) - .with_body_skip_to("mdbook") .with_component(Html::with(html! { div id="mdbook" { (PreEscaped(&html[beginning..])) diff --git a/pagetop/src/base/action/theme.rs b/pagetop/src/base/action/theme.rs index a8f620a7..495b2a1f 100644 --- a/pagetop/src/base/action/theme.rs +++ b/pagetop/src/base/action/theme.rs @@ -6,9 +6,3 @@ pub use after_render_component::*; mod render_component; pub use render_component::*; - -mod before_render_page_body; -pub use before_render_page_body::*; - -mod after_render_page_body; -pub use after_render_page_body::*; diff --git a/pagetop/src/base/action/theme/after_render_page_body.rs b/pagetop/src/base/action/theme/after_render_page_body.rs deleted file mode 100644 index 82ce93cf..00000000 --- a/pagetop/src/base/action/theme/after_render_page_body.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::prelude::*; - -use crate::base::action::FnActionWithPage; - -pub struct AfterRenderBody { - f: FnActionWithPage, - theme_type_id: Option, -} - -impl ActionTrait for AfterRenderBody { - fn theme_type_id(&self) -> Option { - self.theme_type_id - } -} - -impl AfterRenderBody { - pub fn new(theme: ThemeRef, f: FnActionWithPage) -> Self { - AfterRenderBody { - f, - theme_type_id: Some(theme.type_id()), - } - } - - #[inline(always)] - #[allow(clippy::inline_always)] - pub(crate) fn dispatch(page: &mut Page) { - dispatch_actions( - &ActionKey::new( - UniqueId::of::(), - Some(page.context().theme().type_id()), - None, - None, - ), - |action: &Self| (action.f)(page), - ); - } -} diff --git a/pagetop/src/base/action/theme/before_render_page_body.rs b/pagetop/src/base/action/theme/before_render_page_body.rs deleted file mode 100644 index 2e0315c4..00000000 --- a/pagetop/src/base/action/theme/before_render_page_body.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::prelude::*; - -use crate::base::action::FnActionWithPage; - -pub struct BeforeRenderBody { - f: FnActionWithPage, - theme_type_id: Option, -} - -impl ActionTrait for BeforeRenderBody { - fn theme_type_id(&self) -> Option { - self.theme_type_id - } -} - -impl BeforeRenderBody { - pub fn new(theme: ThemeRef, f: FnActionWithPage) -> Self { - BeforeRenderBody { - f, - theme_type_id: Some(theme.type_id()), - } - } - - #[inline(always)] - #[allow(clippy::inline_always)] - pub(crate) fn dispatch(page: &mut Page) { - dispatch_actions( - &ActionKey::new( - UniqueId::of::(), - Some(page.context().theme().type_id()), - None, - None, - ), - |action: &Self| (action.f)(page), - ); - } -} diff --git a/pagetop/src/core/theme/definition.rs b/pagetop/src/core/theme/definition.rs index 4c23f400..7496eafa 100644 --- a/pagetop/src/core/theme/definition.rs +++ b/pagetop/src/core/theme/definition.rs @@ -12,7 +12,21 @@ pub trait ThemeTrait: PackageTrait + Send + Sync { vec![("content", L10n::l("content"))] } - fn render_head(&self, page: &mut Page) -> Markup { + #[allow(unused_variables)] + fn before_render_page_body(&self, page: &mut Page) {} + + fn render_page_body(&self, page: &mut Page) -> Markup { + html! { + body id=[page.body_id().get()] class=[page.body_classes().get()] { + (page.context().render_region("content")) + } + } + } + + #[allow(unused_variables)] + fn after_render_page_body(&self, page: &mut Page) {} + + fn render_page_head(&self, page: &mut Page) -> Markup { let viewport = "width=device-width, initial-scale=1, shrink-to-fit=no"; html! { head { @@ -42,12 +56,4 @@ pub trait ThemeTrait: PackageTrait + Send + Sync { } } } - - fn render_body(&self, page: &mut Page) -> Markup { - html! { - body id=[page.body_id().get()] class=[page.body_classes().get()] { - (page.context().render_region("content")) - } - } - } } diff --git a/pagetop/src/response/page.rs b/pagetop/src/response/page.rs index 608048fd..65589fa5 100644 --- a/pagetop/src/response/page.rs +++ b/pagetop/src/response/page.rs @@ -23,7 +23,6 @@ pub struct Page { context : Context, body_id : OptionId, body_classes: OptionClasses, - body_skip_to: OptionId, } impl Page { @@ -37,7 +36,6 @@ impl Page { context : Context::new(request), body_id : OptionId::default(), body_classes: OptionClasses::default(), - body_skip_to: OptionId::default(), } } @@ -85,12 +83,6 @@ impl Page { self } - #[fn_builder] - pub fn alter_body_skip_to(&mut self, id: impl Into) -> &mut Self { - self.body_skip_to.alter_value(id); - self - } - #[fn_builder] pub fn alter_theme(&mut self, theme: &'static str) -> &mut Self { self.context.alter_assets(AssetsOp::Theme(theme)); @@ -155,32 +147,28 @@ impl Page { &self.body_classes } - pub fn body_skip_to(&self) -> &OptionId { - &self.body_skip_to - } - // Page RENDER. pub fn render(&mut self) -> ResultPage { - // Acciones específicas del diseño antes de renderizar el . - action::theme::BeforeRenderBody::dispatch(self); + // Acciones específicas del tema antes de renderizar el . + self.context.theme().before_render_page_body(self); // Acciones de los paquetes antes de renderizar el . action::page::BeforeRenderBody::dispatch(self); // Renderiza el . - let body = self.context.theme().render_body(self); + let body = self.context.theme().render_page_body(self); - // Acciones específicas del diseño después de renderizar el . - action::theme::AfterRenderBody::dispatch(self); + // Acciones específicas del tema después de renderizar el . + self.context.theme().after_render_page_body(self); // Acciones de los paquetes después de renderizar el . action::page::AfterRenderBody::dispatch(self); // Renderiza el . - let head = self.context.theme().render_head(self); + let head = self.context.theme().render_page_head(self); - // Compone la página completa incluyendo los atributos de idioma y dirección del texto. + // Compone la página incluyendo los atributos de idioma y dirección del texto. let lang = &self.context.langid().language; let dir = match self.context.langid().character_direction() { CharacterDirection::LTR => "ltr",