🚧 [core] Mueve Context al ámbito de componentes

This commit is contained in:
Manuel Cillero 2025-09-30 23:36:09 +02:00
parent de06afce65
commit 284d157931
13 changed files with 64 additions and 27 deletions

View file

@ -7,3 +7,9 @@ mod children;
pub use children::Children;
pub use children::{Child, ChildOp};
pub use children::{Typed, TypedOp};
// **< HTML DOCUMENT CONTEXT >**********************************************************************
mod context;
pub use context::{Context, ContextOp, Contextual, ErrorParam};
pub type FnPathByContext = fn(cx: &Context) -> &str;

View file

@ -1,5 +1,5 @@
use crate::core::component::Component;
use crate::html::{html, Context, Markup};
use crate::core::component::{Component, Context};
use crate::html::{html, Markup};
use crate::{builder_fn, AutoDefault, UniqueId};
use parking_lot::RwLock;

View file

@ -10,11 +10,7 @@ use crate::{builder_fn, join};
use std::any::Any;
use std::collections::HashMap;
/// **Obsoleto desde la versión 0.4.0**: usar [`ContextOp`] en su lugar.
#[deprecated(since = "0.5.0", note = "Use `ContextOp` instead")]
pub type AssetsOp = ContextOp;
/// Operaciones para modificar los recursos asociados al contexto ([`Context`]) de un documento.
/// Operaciones para modificar recursos asociados al contexto ([`Context`]) de un documento.
pub enum ContextOp {
// Favicon.
/// Define el *favicon* del documento. Sobrescribe cualquier valor anterior.
@ -64,7 +60,7 @@ pub enum ErrorParam {
/// - Generar **identificadores únicos** por tipo de componente.
///
/// Lo implementan, típicamente, estructuras que representan el contexto de renderizado, como
/// [`Context`](crate::html::Context) o [`Page`](crate::response::page::Page).
/// [`Context`](crate::core::component::Context) o [`Page`](crate::response::page::Page).
///
/// # Ejemplo
///
@ -375,7 +371,7 @@ impl Context {
}
}
/// Permite a [`Context`](crate::html::Context) actuar como proveedor de idioma.
/// Permite a [`Context`](crate::core::component::Context) actuar como proveedor de idioma.
///
/// Devuelve un [`LanguageIdentifier`] siguiendo este orden de prioridad:
///

View file

@ -1,6 +1,7 @@
use crate::base::action;
use crate::core::component::Context;
use crate::core::{AnyInfo, TypeInfo};
use crate::html::{html, Context, Markup, PrepareMarkup};
use crate::html::{html, Markup, PrepareMarkup};
/// Define la función de renderizado para todos los componentes.
///

View file

@ -50,11 +50,11 @@ pub struct App {
pub theme: String,
/// Idioma por defecto para la aplicación.
///
/// Si no está definido o no es válido, el idioma efectivo para el renderizado se resolverá
/// según la implementación de [`LangId`](crate::locale::LangId) en este orden: primero intenta
/// con el establecido en [`Contextual::with_langid()`](crate::html::Contextual::with_langid);
/// pero si no se ha definido explícitamente, usará el indicado en la cabecera `Accept-Language`
/// del navegador; y, si ninguno aplica, se empleará el idioma de respaldo ("en-US").
/// Si no está definido o no es válido, [`LangId`](crate::locale::LangId) determinará el idioma
/// efectivo para el renderizado en este orden: primero intentará usar el establecido mediante
/// [`Contextual::with_langid()`](crate::core::component::Contextual::with_langid); si no se ha
/// definido explícitamente, probará el indicado en la cabecera `Accept-Language` del navegador;
/// y, si ninguno aplica, se empleará el idioma de respaldo ("en-US").
pub language: String,
/// Banner ASCII mostrado al inicio: *"Off"* (desactivado), *"Slant"*, *"Small"*, *"Speed"* o
/// *"Starwars"*.

View file

@ -13,10 +13,34 @@ pub use assets::{Asset, Assets};
// **< HTML DOCUMENT CONTEXT >**********************************************************************
mod context;
#[allow(deprecated)]
pub use context::{AssetsOp, Context, ContextOp, Contextual, ErrorParam};
pub type FnPathByContext = fn(cx: &Context) -> &str;
/// **Obsoleto desde la versión 0.5.0**: usar [`core::component::Context`] en su lugar.
#[deprecated(since = "0.5.0", note = "Moved to `pagetop::core::component::Context`")]
pub type Context = crate::core::component::Context;
/// **Obsoleto desde la versión 0.5.0**: usar [`core::component::ContextOp`] en su lugar.
#[deprecated(
since = "0.5.0",
note = "Moved to `pagetop::core::component::ContextOp`"
)]
pub type ContextOp = crate::core::component::ContextOp;
/// **Obsoleto desde la versión 0.5.0**: usar [`core::component::Contextual`] en su lugar.
#[deprecated(
since = "0.5.0",
note = "Moved to `pagetop::core::component::Contextual`"
)]
pub trait Contextual: crate::core::component::Contextual {}
/// **Obsoleto desde la versión 0.5.0**: usar [`core::component::ErrorParam`] en su lugar.
#[deprecated(
since = "0.5.0",
note = "Moved to `pagetop::core::component::ErrorParam`"
)]
pub type ErrorParam = crate::core::component::ErrorParam;
/// **Obsoleto desde la versión 0.5.0**: usar [`ContextOp`] en su lugar.
#[deprecated(since = "0.5.0", note = "Use `ContextOp` instead")]
pub type AssetsOp = crate::core::component::ContextOp;
// **< HTML ATTRIBUTES >****************************************************************************

View file

@ -2,7 +2,8 @@ pub mod favicon;
pub mod javascript;
pub mod stylesheet;
use crate::html::{html, Context, Markup};
use crate::core::component::Context;
use crate::html::{html, Markup};
use crate::{AutoDefault, Weight};
/// Representación genérica de un script [`JavaScript`](crate::html::JavaScript) o una hoja de

View file

@ -1,4 +1,5 @@
use crate::html::{html, Context, Markup};
use crate::core::component::Context;
use crate::html::{html, Markup};
use crate::AutoDefault;
/// Un **Favicon** es un recurso gráfico que usa el navegador como icono asociado al sitio.

View file

@ -1,5 +1,6 @@
use crate::core::component::Context;
use crate::html::assets::Asset;
use crate::html::{html, Context, Markup, PreEscaped};
use crate::html::{html, Markup, PreEscaped};
use crate::{join, join_pair, AutoDefault, Weight};
// Define el origen del recurso JavaScript y cómo debe cargarse en el navegador.

View file

@ -1,5 +1,6 @@
use crate::core::component::Context;
use crate::html::assets::Asset;
use crate::html::{html, Context, Markup, PreEscaped};
use crate::html::{html, Markup, PreEscaped};
use crate::{join_pair, AutoDefault, Weight};
// Define el origen del recurso CSS y cómo se incluye en el documento.

View file

@ -28,7 +28,14 @@ pub use crate::global;
pub use crate::trace;
pub use crate::html::*;
// No se usa `pub use crate::html::*;` para evitar duplicar alias marcados como obsoletos
// (*deprecated*) porque han sido trasladados a `crate::core::component`. Cuando se retiren estos
// alias obsoletos se volverá a declarar como `pub use crate::html::*;`.
pub use crate::html::{
display, html_private, Asset, Assets, AttrClasses, AttrId, AttrL10n, AttrName, AttrValue,
ClassesOp, Escaper, Favicon, JavaScript, Markup, PreEscaped, PrepareMarkup, StyleSheet,
TargetMedia, DOCTYPE,
};
pub use crate::locale::*;

View file

@ -4,13 +4,12 @@ pub use error::ErrorPage;
pub use actix_web::Result as ResultPage;
use crate::base::action;
use crate::core::component::{Child, ChildOp, Component};
use crate::core::component::{Child, ChildOp, Component, Context, ContextOp, Contextual};
use crate::core::theme::{ChildrenInRegions, ThemeRef, REGION_CONTENT};
use crate::html::{html, Markup, DOCTYPE};
use crate::html::{Assets, Favicon, JavaScript, StyleSheet};
use crate::html::{AttrClasses, ClassesOp};
use crate::html::{AttrId, AttrL10n};
use crate::html::{Context, ContextOp, Contextual};
use crate::locale::{CharacterDirection, L10n, LangId, LanguageIdentifier};
use crate::service::HttpRequest;
use crate::{builder_fn, AutoDefault};

View file

@ -1,5 +1,5 @@
use crate::base::component::Html;
use crate::html::Contextual;
use crate::core::component::Contextual;
use crate::locale::L10n;
use crate::response::ResponseError;
use crate::service::http::{header::ContentType, StatusCode};