💡 Retoques menores en comentarios para documentar
This commit is contained in:
parent
bf3ea43b53
commit
223a98569b
15 changed files with 39 additions and 38 deletions
|
@ -175,7 +175,7 @@ pub fn builder_fn(_: TokenStream, item: TokenStream) -> TokenStream {
|
||||||
|
|
||||||
// Genera el método alter_...() con el código del método with_...().
|
// Genera el método alter_...() con el código del método with_...().
|
||||||
let fn_alter_doc = format!(
|
let fn_alter_doc = format!(
|
||||||
"Igual que [`{0}()`](Self::{0}), pero sin usar el patrón *builder*.",
|
"Igual que [`Self::{0}()`](Self::{0}), pero sin usar el patrón *builder*.",
|
||||||
fn_with_name_str,
|
fn_with_name_str,
|
||||||
);
|
);
|
||||||
let fn_alter = quote! {
|
let fn_alter = quote! {
|
||||||
|
|
|
@ -16,10 +16,10 @@ use std::sync::LazyLock;
|
||||||
|
|
||||||
/// Punto de entrada de una aplicación `PageTop`.
|
/// Punto de entrada de una aplicación `PageTop`.
|
||||||
///
|
///
|
||||||
/// No almacena datos, pero **encapsula** el ciclo completo de configuración y puesta en marcha.
|
/// No almacena datos, **encapsula** el inicio completo de configuración y puesta en marcha. Para
|
||||||
/// Para instanciarla se puede usar [`new`](Application::new) o [`prepare`](Application::prepare).
|
/// instanciarla se puede usar [`new()`](Application::new) o [`prepare()`](Application::prepare).
|
||||||
/// Después sólo hay que llamar a [`run`](Application::run) (o a [`test`](Application::test) si se
|
/// Después sólo hay que llamar a [`run()`](Application::run) para ejecutar la aplicación (o a
|
||||||
/// está preparando un entorno de pruebas).
|
/// [`test()`](Application::test) si se está preparando un entorno de pruebas).
|
||||||
pub struct Application;
|
pub struct Application;
|
||||||
|
|
||||||
impl Default for Application {
|
impl Default for Application {
|
||||||
|
|
|
@ -51,9 +51,9 @@ impl Component for Html {
|
||||||
impl Html {
|
impl Html {
|
||||||
/// Crea una instancia que generará el `Markup`, con acceso opcional al contexto.
|
/// Crea una instancia que generará el `Markup`, con acceso opcional al contexto.
|
||||||
///
|
///
|
||||||
/// El método [`prepare_component`](crate::core::component::ComponentTrait::prepare_component)
|
/// El método [`prepare_component()`](crate::core::component::Component::prepare_component)
|
||||||
/// delega el renderizado en la función proporcionada, que recibe una referencia mutable
|
/// delega el renderizado en la función proporcionada, que recibe una referencia mutable al
|
||||||
/// al contexto de renderizado ([`Context`]).
|
/// contexto de renderizado ([`Context`]).
|
||||||
pub fn with<F>(f: F) -> Self
|
pub fn with<F>(f: F) -> Self
|
||||||
where
|
where
|
||||||
F: Fn(&mut Context) -> Markup + Send + Sync + 'static,
|
F: Fn(&mut Context) -> Markup + Send + Sync + 'static,
|
||||||
|
@ -64,8 +64,8 @@ impl Html {
|
||||||
/// Sustituye la función que genera el `Markup`.
|
/// Sustituye la función que genera el `Markup`.
|
||||||
///
|
///
|
||||||
/// Permite a otras extensiones modificar la función de renderizado que se ejecutará cuando
|
/// Permite a otras extensiones modificar la función de renderizado que se ejecutará cuando
|
||||||
/// [`prepare_component`](crate::core::component::ComponentTrait::prepare_component) invoque
|
/// [`prepare_component()`](crate::core::component::Component::prepare_component) invoque esta
|
||||||
/// esta instancia. La nueva función también recibe una referencia al contexto ([`Context`]).
|
/// instancia. La nueva función también recibe una referencia al contexto ([`Context`]).
|
||||||
pub fn alter_html<F>(&mut self, f: F) -> &mut Self
|
pub fn alter_html<F>(&mut self, f: F) -> &mut Self
|
||||||
where
|
where
|
||||||
F: Fn(&mut Context) -> Markup + Send + Sync + 'static,
|
F: Fn(&mut Context) -> Markup + Send + Sync + 'static,
|
||||||
|
|
|
@ -14,8 +14,7 @@ mod all;
|
||||||
pub(crate) use all::add_action;
|
pub(crate) use all::add_action;
|
||||||
pub use all::dispatch_actions;
|
pub use all::dispatch_actions;
|
||||||
|
|
||||||
/// Facilita la implementación del método
|
/// Facilita la implementación del método [`actions()`](crate::core::extension::Extension::actions).
|
||||||
/// [`actions()`](crate::core::extension::ExtensionTrait::actions).
|
|
||||||
///
|
///
|
||||||
/// Evita escribir repetidamente `Box::new(...)` para cada acción de la lista, manteniendo el código
|
/// Evita escribir repetidamente `Box::new(...)` para cada acción de la lista, manteniendo el código
|
||||||
/// más limpio.
|
/// más limpio.
|
||||||
|
|
|
@ -14,9 +14,9 @@ pub trait ComponentRender {
|
||||||
/// Interfaz común que debe implementar un componente renderizable en `PageTop`.
|
/// Interfaz común que debe implementar un componente renderizable en `PageTop`.
|
||||||
///
|
///
|
||||||
/// Se recomienda que los componentes deriven [`AutoDefault`](crate::AutoDefault). También deben
|
/// Se recomienda que los componentes deriven [`AutoDefault`](crate::AutoDefault). También deben
|
||||||
/// implementar explícitamente el método [`new`](Self::new) y pueden sobrescribir los otros métodos
|
/// implementar explícitamente el método [`new()`](Self::new) y pueden sobrescribir los otros
|
||||||
/// para personalizar su comportamiento.
|
/// métodos para personalizar su comportamiento.
|
||||||
pub trait ComponentTrait: AnyInfo + ComponentRender + Send + Sync {
|
pub trait Component: AnyInfo + ComponentRender + Send + Sync {
|
||||||
/// Crea una nueva instancia del componente.
|
/// Crea una nueva instancia del componente.
|
||||||
fn new() -> Self
|
fn new() -> Self
|
||||||
where
|
where
|
||||||
|
@ -70,8 +70,8 @@ pub trait ComponentTrait: AnyInfo + ComponentRender + Send + Sync {
|
||||||
///
|
///
|
||||||
/// 1. Despacha [`action::component::IsRenderable`](crate::base::action::component::IsRenderable)
|
/// 1. Despacha [`action::component::IsRenderable`](crate::base::action::component::IsRenderable)
|
||||||
/// para ver si se puede renderizar. Si no es así, devuelve un [`Markup`] vacío.
|
/// para ver si se puede renderizar. Si no es así, devuelve un [`Markup`] vacío.
|
||||||
/// 2. Ejecuta [`setup_before_prepare()`](ComponentTrait::setup_before_prepare) para que el
|
/// 2. Ejecuta [`setup_before_prepare()`](Component::setup_before_prepare) para que el componente
|
||||||
/// componente pueda ajustar su estructura interna o modificar el contexto.
|
/// pueda ajustar su estructura interna o modificar el contexto.
|
||||||
/// 3. Despacha [`action::theme::BeforeRender<C>`](crate::base::action::theme::BeforeRender) para
|
/// 3. Despacha [`action::theme::BeforeRender<C>`](crate::base::action::theme::BeforeRender) para
|
||||||
/// que el tema pueda hacer ajustes en el componente o el contexto.
|
/// que el tema pueda hacer ajustes en el componente o el contexto.
|
||||||
/// 4. Despacha [`action::component::BeforeRender<C>`](crate::base::action::component::BeforeRender)
|
/// 4. Despacha [`action::component::BeforeRender<C>`](crate::base::action::component::BeforeRender)
|
||||||
|
@ -79,8 +79,8 @@ pub trait ComponentTrait: AnyInfo + ComponentRender + Send + Sync {
|
||||||
/// 5. **Prepara el renderizado del componente**:
|
/// 5. **Prepara el renderizado del componente**:
|
||||||
/// - Despacha [`action::theme::PrepareRender<C>`](crate::base::action::theme::PrepareRender)
|
/// - Despacha [`action::theme::PrepareRender<C>`](crate::base::action::theme::PrepareRender)
|
||||||
/// para permitir al tema preparar un renderizado diferente al predefinido.
|
/// para permitir al tema preparar un renderizado diferente al predefinido.
|
||||||
/// - Si no es así, ejecuta [`prepare_component()`](ComponentTrait::prepare_component) para
|
/// - Si no es así, ejecuta [`prepare_component()`](Component::prepare_component) para preparar
|
||||||
/// preparar el renderizado predefinido del componente.
|
/// el renderizado predefinido del componente.
|
||||||
/// 6. Despacha [`action::theme::AfterRender<C>`](crate::base::action::theme::AfterRender) para
|
/// 6. Despacha [`action::theme::AfterRender<C>`](crate::base::action::theme::AfterRender) para
|
||||||
/// que el tema pueda hacer sus últimos ajustes.
|
/// que el tema pueda hacer sus últimos ajustes.
|
||||||
/// 7. Despacha [`action::component::AfterRender<C>`](crate::base::action::component::AfterRender)
|
/// 7. Despacha [`action::component::AfterRender<C>`](crate::base::action::component::AfterRender)
|
||||||
|
|
|
@ -28,7 +28,8 @@ pub type ExtensionRef = &'static dyn Extension;
|
||||||
pub trait Extension: AnyInfo + Send + Sync {
|
pub trait Extension: AnyInfo + Send + Sync {
|
||||||
/// Nombre legible para el usuario.
|
/// Nombre legible para el usuario.
|
||||||
///
|
///
|
||||||
/// Predeterminado por el [`short_name`](AnyInfo::short_name) del tipo asociado a la extensión.
|
/// Predeterminado por el [`short_name()`](AnyInfo::short_name) del tipo asociado a la
|
||||||
|
/// extensión.
|
||||||
fn name(&self) -> L10n {
|
fn name(&self) -> L10n {
|
||||||
L10n::n(self.short_name())
|
L10n::n(self.short_name())
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub static DEFAULT_THEME: LazyLock<ThemeRef> =
|
||||||
|
|
||||||
// TEMA POR NOMBRE *********************************************************************************
|
// TEMA POR NOMBRE *********************************************************************************
|
||||||
|
|
||||||
/// Devuelve el tema identificado por su [`short_name`](AnyInfo::short_name).
|
// Devuelve el tema identificado por su [`short_name()`](AnyInfo::short_name).
|
||||||
pub fn theme_by_short_name(short_name: &'static str) -> Option<ThemeRef> {
|
pub fn theme_by_short_name(short_name: &'static str) -> Option<ThemeRef> {
|
||||||
let short_name = short_name.to_lowercase();
|
let short_name = short_name.to_lowercase();
|
||||||
match THEMES
|
match THEMES
|
||||||
|
|
|
@ -53,8 +53,8 @@ pub struct App {
|
||||||
/// Si no se especifica un valor válido, normalmente se usará el idioma devuelto por la
|
/// Si no se especifica un valor válido, normalmente se usará el idioma devuelto por la
|
||||||
/// implementación de [`LangId`](crate::locale::LangId) para [`Context`](crate::html::Context),
|
/// implementación de [`LangId`](crate::locale::LangId) para [`Context`](crate::html::Context),
|
||||||
/// en el siguiente orden: primero, el idioma establecido explícitamente con
|
/// en el siguiente orden: primero, el idioma establecido explícitamente con
|
||||||
/// [`Context::with_langid`](crate::html::Context::with_langid); si no se ha definido, se usará
|
/// [`Context::with_langid()`](crate::html::Context::with_langid); si no se ha definido, se
|
||||||
/// el indicado en la cabecera `Accept-Language` del navegador; y, si ninguno aplica, se
|
/// usará el indicado en la cabecera `Accept-Language` del navegador; y, si ninguno aplica, se
|
||||||
/// empleará el idioma de respaldo ("en-US").
|
/// empleará el idioma de respaldo ("en-US").
|
||||||
pub language: String,
|
pub language: String,
|
||||||
/// Banner ASCII mostrado al inicio: *"Off"* (desactivado), *"Slant"*, *"Small"*, *"Speed"* o
|
/// Banner ASCII mostrado al inicio: *"Off"* (desactivado), *"Slant"*, *"Small"*, *"Speed"* o
|
||||||
|
|
|
@ -12,8 +12,8 @@ use crate::AutoDefault;
|
||||||
///
|
///
|
||||||
/// > **Nota**
|
/// > **Nota**
|
||||||
/// > Los archivos de los iconos deben estar disponibles en el servidor web de la aplicación. Pueden
|
/// > Los archivos de los iconos deben estar disponibles en el servidor web de la aplicación. Pueden
|
||||||
/// > incluirse en el proyecto utilizando [`include_files`](crate::include_files) y servirse con
|
/// > incluirse en el proyecto utilizando [`include_files!`](crate::include_files) y servirse con
|
||||||
/// > [`include_files_service`](crate::include_files_service).
|
/// > [`include_files_service!`](crate::include_files_service).
|
||||||
///
|
///
|
||||||
/// # Ejemplo
|
/// # Ejemplo
|
||||||
///
|
///
|
||||||
|
|
|
@ -30,8 +30,8 @@ enum Source {
|
||||||
///
|
///
|
||||||
/// > **Nota**
|
/// > **Nota**
|
||||||
/// > Los archivos de los *scripts* deben estar disponibles en el servidor web de la aplicación.
|
/// > Los archivos de los *scripts* deben estar disponibles en el servidor web de la aplicación.
|
||||||
/// > Pueden incluirse en el proyecto utilizando [`include_files`](crate::include_files) y servirse
|
/// > Pueden incluirse en el proyecto utilizando [`include_files!`](crate::include_files) y servirse
|
||||||
/// > con [`include_files_service`](crate::include_files_service).
|
/// > con [`include_files_service!`](crate::include_files_service).
|
||||||
///
|
///
|
||||||
/// # Ejemplo
|
/// # Ejemplo
|
||||||
///
|
///
|
||||||
|
|
|
@ -55,8 +55,8 @@ impl TargetMedia {
|
||||||
///
|
///
|
||||||
/// > **Nota**
|
/// > **Nota**
|
||||||
/// > Las hojas de estilo CSS deben estar disponibles en el servidor web de la aplicación. Pueden
|
/// > Las hojas de estilo CSS deben estar disponibles en el servidor web de la aplicación. Pueden
|
||||||
/// > incluirse en el proyecto utilizando [`include_files`](crate::include_files) y servirse con
|
/// > incluirse en el proyecto utilizando [`include_files!`](crate::include_files) y servirse con
|
||||||
/// > [`include_files_service`](crate::include_files_service).
|
/// > [`include_files_service!`](crate::include_files_service).
|
||||||
///
|
///
|
||||||
/// # Ejemplo
|
/// # Ejemplo
|
||||||
///
|
///
|
||||||
|
|
|
@ -163,7 +163,7 @@ impl Context {
|
||||||
|
|
||||||
/// Modifica el tema que se usará para renderizar el documento.
|
/// Modifica el tema que se usará para renderizar el documento.
|
||||||
///
|
///
|
||||||
/// Localiza el tema por su [`short_name`](crate::core::AnyInfo::short_name), y si no aplica
|
/// Localiza el tema por su [`short_name()`](crate::core::AnyInfo::short_name), y si no aplica
|
||||||
/// ninguno entonces usará el tema por defecto.
|
/// ninguno entonces usará el tema por defecto.
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
pub fn with_theme(mut self, theme_name: &'static str) -> Self {
|
pub fn with_theme(mut self, theme_name: &'static str) -> Self {
|
||||||
|
@ -301,8 +301,8 @@ impl Context {
|
||||||
/// 4. Y si ninguna de las opciones anteriores aplica, se usa el idioma de respaldo (`"en-US"`).
|
/// 4. Y si ninguna de las opciones anteriores aplica, se usa el idioma de respaldo (`"en-US"`).
|
||||||
///
|
///
|
||||||
/// Resulta útil para usar un contexto ([`Context`]) como fuente de traducción en
|
/// Resulta útil para usar un contexto ([`Context`]) como fuente de traducción en
|
||||||
/// [`L10n::using`](crate::locale::L10n::using) o
|
/// [`L10n::using()`](crate::locale::L10n::using) o
|
||||||
/// [`L10n::to_markup`](crate::locale::L10n::to_markup).
|
/// [`L10n::to_markup()`](crate::locale::L10n::to_markup).
|
||||||
impl LangId for Context {
|
impl LangId for Context {
|
||||||
fn langid(&self) -> &'static LanguageIdentifier {
|
fn langid(&self) -> &'static LanguageIdentifier {
|
||||||
self.langid
|
self.langid
|
||||||
|
|
|
@ -259,8 +259,8 @@ impl LangMatch {
|
||||||
/// devuelve el idioma por defecto de la aplicación y, si tampoco está disponible, el idioma de
|
/// devuelve el idioma por defecto de la aplicación y, si tampoco está disponible, el idioma de
|
||||||
/// respaldo ("en-US").
|
/// respaldo ("en-US").
|
||||||
///
|
///
|
||||||
/// Resulta útil para usar un valor de [`LangMatch`] como fuente de traducción en [`L10n::using`] o
|
/// Resulta útil para usar un valor de [`LangMatch`] como fuente de traducción en [`L10n::using()`]
|
||||||
/// [`L10n::to_markup`].
|
/// o [`L10n::to_markup()`].
|
||||||
impl LangId for LangMatch {
|
impl LangId for LangMatch {
|
||||||
fn langid(&self) -> &'static LanguageIdentifier {
|
fn langid(&self) -> &'static LanguageIdentifier {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
@ -78,21 +78,21 @@ impl Page {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Modifica la fuente de idioma de la página ([`Context::with_langid`]).
|
/// Modifica la fuente de idioma de la página ([`Context::with_langid()`]).
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
pub fn with_langid(mut self, language: &impl LangId) -> Self {
|
pub fn with_langid(mut self, language: &impl LangId) -> Self {
|
||||||
self.context.alter_langid(language);
|
self.context.alter_langid(language);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Modifica el tema que se usará para renderizar la página ([`Context::with_theme`]).
|
/// Modifica el tema que se usará para renderizar la página ([`Context::with_theme()`]).
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
pub fn with_theme(mut self, theme_name: &'static str) -> Self {
|
pub fn with_theme(mut self, theme_name: &'static str) -> Self {
|
||||||
self.context.alter_theme(theme_name);
|
self.context.alter_theme(theme_name);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Modifica la composición para renderizar la página ([`Context::with_layout`]).
|
/// Modifica la composición para renderizar la página ([`Context::with_layout()`]).
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
pub fn with_layout(mut self, layout_name: &'static str) -> Self {
|
pub fn with_layout(mut self, layout_name: &'static str) -> Self {
|
||||||
self.context.alter_layout(layout_name);
|
self.context.alter_layout(layout_name);
|
||||||
|
|
|
@ -77,7 +77,8 @@ macro_rules! include_files {
|
||||||
/// * `$route` – Ruta URL de origen desde la que se servirán los archivos.
|
/// * `$route` – Ruta URL de origen desde la que se servirán los archivos.
|
||||||
/// * `[ $root, $relative ]` *(opcional)* – Directorio raíz y ruta relativa para construir la ruta
|
/// * `[ $root, $relative ]` *(opcional)* – Directorio raíz y ruta relativa para construir la ruta
|
||||||
/// absoluta donde buscar los archivos en el sistema de ficheros (ver
|
/// absoluta donde buscar los archivos en el sistema de ficheros (ver
|
||||||
/// [`absolute_dir`](crate::util::absolute_dir)). Si no existe, se usarán los recursos embebidos.
|
/// [`absolute_dir()`](crate::util::absolute_dir)). Si no existe, se usarán los recursos
|
||||||
|
/// embebidos.
|
||||||
///
|
///
|
||||||
/// # Ejemplos
|
/// # Ejemplos
|
||||||
///
|
///
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue