✨ Añade soporte para responder páginas HTML
- Amplia la estructura "Page" para trabajar el renderizado con regiones de componentes para componer la página. - Añade acciones "BeforeRenderBody" y "AfterRenderBody" para alterar el contenido de la página antes y después del renderizado. - Actualiza "Context" para admitir parámetros dinámicos y mejorar la gestión de temas. - Implementa el manejo de errores HTTP respondiendo páginas. - Mejora la documentación y reorganiza el código en varios módulos.
This commit is contained in:
parent
f23c8d5c4c
commit
a1bb6cd12d
17 changed files with 669 additions and 143 deletions
|
@ -13,3 +13,5 @@ pub type FnActionWithComponent<C> = fn(component: &mut C, cx: &mut Context);
|
|||
pub mod component;
|
||||
|
||||
pub mod theme;
|
||||
|
||||
pub mod page;
|
||||
|
|
|
@ -22,7 +22,7 @@ impl<C: ComponentTrait> ActionDispatcher for AfterRender<C> {
|
|||
self.referer_id.get()
|
||||
}
|
||||
|
||||
/// Devuelve el peso para definir el orden de aplicación.
|
||||
/// Devuelve el peso para definir el orden de ejecución.
|
||||
fn weight(&self) -> Weight {
|
||||
self.weight
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ impl<C: ComponentTrait> ActionDispatcher for BeforeRender<C> {
|
|||
self.referer_id.get()
|
||||
}
|
||||
|
||||
/// Devuelve el peso para definir el orden de aplicación.
|
||||
/// Devuelve el peso para definir el orden de ejecución.
|
||||
fn weight(&self) -> Weight {
|
||||
self.weight
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ impl<C: ComponentTrait> ActionDispatcher for IsRenderable<C> {
|
|||
self.referer_id.get()
|
||||
}
|
||||
|
||||
/// Devuelve el peso para definir el orden de aplicación.
|
||||
/// Devuelve el peso para definir el orden de ejecución.
|
||||
fn weight(&self) -> Weight {
|
||||
self.weight
|
||||
}
|
||||
|
|
17
src/base/action/page.rs
Normal file
17
src/base/action/page.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
//! Acciones para alterar el contenido de las páginas a renderizar.
|
||||
|
||||
use crate::response::page::Page;
|
||||
|
||||
/// Tipo de función para manipular una página durante su construcción o renderizado.
|
||||
///
|
||||
/// Se emplea en acciones orientadas a modificar o inspeccionar una instancia de [`Page`]
|
||||
/// directamente, sin acceder a los componentes individuales ni al contexto de renderizado.
|
||||
///
|
||||
/// Recibe una referencia mutable (`&mut`) a la página en cuestión.
|
||||
pub type FnActionWithPage = fn(page: &mut Page);
|
||||
|
||||
mod before_render_body;
|
||||
pub use before_render_body::*;
|
||||
|
||||
mod after_render_body;
|
||||
pub use after_render_body::*;
|
46
src/base/action/page/after_render_body.rs
Normal file
46
src/base/action/page/after_render_body.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
use crate::base::action::page::FnActionWithPage;
|
||||
|
||||
/// Ejecuta [`FnActionWithPage`](crate::base::action::page::FnActionWithPage) después de renderizar
|
||||
/// el cuerpo de la página.
|
||||
///
|
||||
/// Este tipo de acción se despacha después de renderizar el contenido principal de la página
|
||||
/// (`<body>`), permitiendo ajustes finales sobre la instancia [`Page`].
|
||||
///
|
||||
/// Las acciones se ejecutan en orden según el [`Weight`] asignado.
|
||||
pub struct AfterRenderBody {
|
||||
f: FnActionWithPage,
|
||||
weight: Weight,
|
||||
}
|
||||
|
||||
impl ActionDispatcher for AfterRenderBody {
|
||||
/// Devuelve el peso para definir el orden de ejecución.
|
||||
fn weight(&self) -> Weight {
|
||||
self.weight
|
||||
}
|
||||
}
|
||||
|
||||
impl AfterRenderBody {
|
||||
/// Permite [registrar](ExtensionTrait::actions) una nueva acción
|
||||
/// [`FnActionWithPage`](crate::base::action::page::FnActionWithPage).
|
||||
pub fn new(f: FnActionWithPage) -> Self {
|
||||
AfterRenderBody { f, weight: 0 }
|
||||
}
|
||||
|
||||
/// Opcional. Acciones con pesos más bajos se aplican antes. Se pueden usar valores negativos.
|
||||
pub fn with_weight(mut self, value: Weight) -> Self {
|
||||
self.weight = value;
|
||||
self
|
||||
}
|
||||
|
||||
// Despacha las acciones.
|
||||
#[inline(always)]
|
||||
#[allow(clippy::inline_always)]
|
||||
pub(crate) fn dispatch(page: &mut Page) {
|
||||
dispatch_actions(
|
||||
&ActionKey::new(UniqueId::of::<Self>(), None, None, None),
|
||||
|action: &Self| (action.f)(page),
|
||||
);
|
||||
}
|
||||
}
|
46
src/base/action/page/before_render_body.rs
Normal file
46
src/base/action/page/before_render_body.rs
Normal file
|
@ -0,0 +1,46 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
use crate::base::action::page::FnActionWithPage;
|
||||
|
||||
/// Ejecuta [`FnActionWithPage`](crate::base::action::page::FnActionWithPage) antes de renderizar
|
||||
/// el cuerpo de la página.
|
||||
///
|
||||
/// Este tipo de acción se despacha antes de renderizar el contenido principal de la página
|
||||
/// (`<body>`), permitiendo ajustes sobre la instancia [`Page`].
|
||||
///
|
||||
/// Las acciones se ejecutan en orden según el [`Weight`] asignado.
|
||||
pub struct BeforeRenderBody {
|
||||
f: FnActionWithPage,
|
||||
weight: Weight,
|
||||
}
|
||||
|
||||
impl ActionDispatcher for BeforeRenderBody {
|
||||
/// Devuelve el peso para definir el orden de ejecución.
|
||||
fn weight(&self) -> Weight {
|
||||
self.weight
|
||||
}
|
||||
}
|
||||
|
||||
impl BeforeRenderBody {
|
||||
/// Permite [registrar](ExtensionTrait::actions) una nueva acción
|
||||
/// [`FnActionWithPage`](crate::base::action::page::FnActionWithPage).
|
||||
pub fn new(f: FnActionWithPage) -> Self {
|
||||
BeforeRenderBody { f, weight: 0 }
|
||||
}
|
||||
|
||||
/// Opcional. Acciones con pesos más bajos se aplican antes. Se pueden usar valores negativos.
|
||||
pub fn with_weight(mut self, value: Weight) -> Self {
|
||||
self.weight = value;
|
||||
self
|
||||
}
|
||||
|
||||
// Despacha las acciones.
|
||||
#[inline(always)]
|
||||
#[allow(clippy::inline_always)]
|
||||
pub(crate) fn dispatch(page: &mut Page) {
|
||||
dispatch_actions(
|
||||
&ActionKey::new(UniqueId::of::<Self>(), None, None, None),
|
||||
|action: &Self| (action.f)(page),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue