(theme): Añade región Aside

Introduce `CoreRegions::Aside` como nueva región de plantilla, entre
Header y Content, y Template ahora envuelve el cuerpo en `div.wrapper`,
omitiendo el renderizado si no hay contenido.

`CoreRegion`, `ReservedRegion` y `CoreTemplate` pasan a plural
(`CoreRegions`, `ReservedRegions`, `CoreTemplates`) para no confundirlos
con otras definiciones, y se amplía la documentación del módulo theme.
This commit is contained in:
Manuel Cillero 2026-08-02 10:40:36 +02:00
parent c49bf8f56a
commit 1cab0ae9a0
10 changed files with 180 additions and 115 deletions

View file

@ -2,7 +2,7 @@ use crate::auth::CurrentUser;
use crate::core::TypeInfo;
use crate::core::component::{ChildOp, Component, MessageLevel, StatusMessage};
use crate::core::theme::all::DEFAULT_THEME;
use crate::core::theme::{ChildrenInRegions, CoreRegion, CoreTemplate};
use crate::core::theme::{ChildrenInRegions, CoreRegions, CoreTemplates};
use crate::core::theme::{RegionRef, TemplateRef, ThemeRef};
use crate::html::{Assets, Favicon, JavaScript, Preload, StyleSheet};
use crate::html::{Markup, Props, PropsOp, RoutePath, html};
@ -77,7 +77,7 @@ pub enum ContextError {
/// # use pagetop_aliner::Aliner;
/// fn prepare_context<C: Contextual>(cx: C) -> C {
/// cx.with_langid(&Locale::resolve("es-ES"))
/// .with_template(&CoreTemplate::Standard)
/// .with_template(&CoreTemplates::Standard)
/// .with_theme(&Aliner)
/// .with_assets(AssetsOp::SetFavicon(Some(Favicon::new().with_icon("/favicon.ico"))))
/// .with_assets(AssetsOp::AddStyleSheet(StyleSheet::from("/css/app.css")))
@ -330,7 +330,7 @@ pub struct Context {
impl Default for Context {
fn default() -> Self {
Self::base(None, &CoreTemplate::Standard)
Self::base(None, &CoreTemplates::Standard)
}
}
@ -369,15 +369,15 @@ impl Context {
/// Para un contexto sin petición (renderizar un componente de forma aislada, en tests o fuera
/// del ciclo de una petición web), usa [`Context::default()`].
pub fn new(request: HttpRequest) -> Self {
Self::base(Some(request), &CoreTemplate::Standard)
Self::base(Some(request), &CoreTemplates::Standard)
}
/// Crea un nuevo contexto asociado a una petición HTTP, con la plantilla de administración.
///
/// El contexto inicializa el idioma, el tema y la plantilla [`CoreTemplate::Admin`], sin
/// El contexto inicializa el idioma, el tema y la plantilla [`CoreTemplates::Admin`], sin
/// favicon ni otros recursos cargados.
pub fn admin(request: HttpRequest) -> Self {
Self::base(Some(request), &CoreTemplate::Admin)
Self::base(Some(request), &CoreTemplates::Admin)
}
// Extrae el `CurrentUser` inyectado por middleware en las extensiones de la petición, o
@ -629,7 +629,8 @@ impl Contextual for Context {
#[builder_fn]
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
self.regions.alter_child_in(&CoreRegion::Content, op.into());
self.regions
.alter_child_in(&CoreRegions::Content, op.into());
self
}