Añade gestión de errores catastróficos

- Los errores controlados (403, 404, fatales) se renderizan con el tema
  activo; un `panic!` no controlado se intercepta con un HTML mínimo y
  autónomo, sin depender del tema ni de los componentes.
- Corrige además que `Context::template()` no seguía los cambios de tema
  hechos con `with_theme()` después de crear la página.
- Renombra `DefaultRegion(s)`/`DefaultTemplate(s)`, añade
  `Theme::admin_template()` y `Page::admin()`, y documenta la creación
  de temas e `InRegion` en `core/theme.rs`.
This commit is contained in:
Manuel Cillero 2026-07-13 00:38:11 +02:00
parent 0e72d51276
commit 24bd13414c
12 changed files with 458 additions and 139 deletions

View file

@ -15,12 +15,12 @@
mod error;
pub use error::ErrorPage;
pub(crate) use error::render_error_pages;
pub(crate) use error::{render_error_pages, response_for_panic, route_not_found};
use crate::auth::CurrentUser;
use crate::base::action;
use crate::core::component::{AssetsOp, ChildOp, Context, ContextError, Contextual};
use crate::core::theme::{DefaultRegion, Region, RegionRef, TemplateRef, ThemeRef};
use crate::core::theme::{DefaultRegions, Region, RegionRef, TemplateRef, ThemeRef};
use crate::html::{Assets, Favicon, JavaScript, StyleSheet};
use crate::html::{Attr, Props, PropsOp};
use crate::html::{DOCTYPE, Markup, html};
@ -112,6 +112,13 @@ impl Page {
}
}
/// Crea una nueva instancia de página con la plantilla de administración del tema activo.
pub fn admin(request: HttpRequest) -> Self {
let mut page = Page::new(request);
page.context().use_admin_template();
page
}
// **< Page BUILDER >***************************************************************************
/// Establece el título de la página como un valor traducible.
@ -304,7 +311,7 @@ impl Contextual for Page {
#[builder_fn]
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
self.context
.alter_child_in(&DefaultRegion::Content, op.into());
.alter_child_in(&DefaultRegions::Content, op.into());
self
}