Compare commits
2 commits
430ecada41
...
f23c8d5c4c
Author | SHA1 | Date | |
---|---|---|---|
f23c8d5c4c | |||
e89a5331d3 |
11 changed files with 26 additions and 24 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!(
|
||||||
"Equivale a invocar el método `{}()` cuando se aplica el patrón builder.",
|
"Igual que [`{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! {
|
||||||
|
|
|
@ -169,7 +169,7 @@ pub static CONFIG_VALUES: LazyLock<ConfigBuilder<DefaultState>> = LazyLock::new(
|
||||||
/// ```rust,ignore
|
/// ```rust,ignore
|
||||||
/// include_config!(SETTINGS: Settings => [
|
/// include_config!(SETTINGS: Settings => [
|
||||||
/// "ruta.clave" => valor,
|
/// "ruta.clave" => valor,
|
||||||
/// // …
|
/// // ...
|
||||||
/// ]);
|
/// ]);
|
||||||
/// ```
|
/// ```
|
||||||
///
|
///
|
||||||
|
|
|
@ -55,10 +55,10 @@ impl TypeInfo {
|
||||||
fn partial(type_name: &'static str, start: isize, end: Option<isize>) -> &'static str {
|
fn partial(type_name: &'static str, start: isize, end: Option<isize>) -> &'static str {
|
||||||
let maxlen = type_name.len();
|
let maxlen = type_name.len();
|
||||||
|
|
||||||
// Localiza los límites de cada segmento a nivel 0 de `<…>`.
|
// Localiza los límites de cada segmento a nivel 0 de `<...>`.
|
||||||
let mut segments = Vec::new();
|
let mut segments = Vec::new();
|
||||||
let mut segment_start = 0; // Posición inicial del segmento actual.
|
let mut segment_start = 0; // Posición inicial del segmento actual.
|
||||||
let mut angle_brackets = 0; // Profundidad dentro de '<…>'.
|
let mut angle_brackets = 0; // Profundidad dentro de '<...>'.
|
||||||
let mut previous_char = '\0'; // Se inicializa a carácter nulo, no hay aún carácter previo.
|
let mut previous_char = '\0'; // Se inicializa a carácter nulo, no hay aún carácter previo.
|
||||||
|
|
||||||
for (idx, c) in type_name.char_indices() {
|
for (idx, c) in type_name.char_indices() {
|
||||||
|
|
|
@ -85,7 +85,7 @@ impl<C: ComponentTrait> Typed<C> {
|
||||||
|
|
||||||
// *************************************************************************************************
|
// *************************************************************************************************
|
||||||
|
|
||||||
/// Operaciones con un componente [`Child`] en una lista [`Children`].
|
/// Operaciones con un componente hijo [`Child`] en una lista [`Children`].
|
||||||
pub enum ChildOp {
|
pub enum ChildOp {
|
||||||
Add(Child),
|
Add(Child),
|
||||||
InsertAfterId(&'static str, Child),
|
InsertAfterId(&'static str, Child),
|
||||||
|
@ -96,7 +96,7 @@ pub enum ChildOp {
|
||||||
Reset,
|
Reset,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Operaciones con un componente tipado [`Typed<C>`] en una lista [`Children`].
|
/// Operaciones con un componente hijo tipado [`Typed<C>`] en una lista [`Children`].
|
||||||
pub enum TypedOp<C: ComponentTrait> {
|
pub enum TypedOp<C: ComponentTrait> {
|
||||||
Add(Typed<C>),
|
Add(Typed<C>),
|
||||||
InsertAfterId(&'static str, Typed<C>),
|
InsertAfterId(&'static str, Typed<C>),
|
||||||
|
@ -107,9 +107,9 @@ pub enum TypedOp<C: ComponentTrait> {
|
||||||
Reset,
|
Reset,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Lista ordenada de los componentes hijo ([`Child`]) asociados a un componente padre.
|
/// Lista ordenada de componentes hijo ([`Child`]) mantenida por un componente padre.
|
||||||
///
|
///
|
||||||
/// Esta colección permite añadir, modificar, renderizar y consultar componentes hijos en orden de
|
/// Esta lista permite añadir, modificar, renderizar y consultar componentes hijo en orden de
|
||||||
/// inserción, soportando operaciones avanzadas como inserción relativa o reemplazo por
|
/// inserción, soportando operaciones avanzadas como inserción relativa o reemplazo por
|
||||||
/// identificador.
|
/// identificador.
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
|
@ -121,7 +121,7 @@ impl Children {
|
||||||
Children::default()
|
Children::default()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Crea una lista con un único hijo inicial.
|
/// Crea una lista con un componente hijo inicial.
|
||||||
pub fn with(child: Child) -> Self {
|
pub fn with(child: Child) -> Self {
|
||||||
Children::default().with_child(ChildOp::Add(child))
|
Children::default().with_child(ChildOp::Add(child))
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,9 @@ impl Children {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Añade un hijo al final de la lista.
|
/// Añade un componente hijo al final de la lista.
|
||||||
|
///
|
||||||
|
/// Es un atajo para `children.alter_child(ChildOp::Add(child))`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn add(&mut self, child: Child) -> &mut Self {
|
pub fn add(&mut self, child: Child) -> &mut Self {
|
||||||
self.0.push(child);
|
self.0.push(child);
|
||||||
|
|
|
@ -3,7 +3,7 @@ use crate::AutoDefault;
|
||||||
|
|
||||||
/// Un **Favicon** es un recurso gráfico que usa el navegador como icono asociado al sitio.
|
/// Un **Favicon** es un recurso gráfico que usa el navegador como icono asociado al sitio.
|
||||||
///
|
///
|
||||||
/// Es universalmente aceptado para mostrar el icono del sitio (`.ico`, `.png`, `.svg`, …) en
|
/// Es universalmente aceptado para mostrar el icono del sitio (`.ico`, `.png`, `.svg`, ...) en
|
||||||
/// pestañas, marcadores o accesos directos.
|
/// pestañas, marcadores o accesos directos.
|
||||||
///
|
///
|
||||||
/// Este tipo permite construir de forma fluida las distintas variantes de un *favicon*, ya sea un
|
/// Este tipo permite construir de forma fluida las distintas variantes de un *favicon*, ya sea un
|
||||||
|
|
|
@ -97,7 +97,7 @@ impl JavaScript {
|
||||||
|
|
||||||
/// Crea un **script embebido** directamente en el documento HTML.
|
/// Crea un **script embebido** directamente en el documento HTML.
|
||||||
///
|
///
|
||||||
/// Equivale a `<script>…</script>`. El parámetro `name` se usa como identificador interno del
|
/// Equivale a `<script>...</script>`. El parámetro `name` se usa como identificador interno del
|
||||||
/// *script*.
|
/// *script*.
|
||||||
pub fn inline(name: impl Into<String>, script: impl Into<String>) -> Self {
|
pub fn inline(name: impl Into<String>, script: impl Into<String>) -> Self {
|
||||||
JavaScript {
|
JavaScript {
|
||||||
|
|
|
@ -82,7 +82,7 @@ impl TargetMedia {
|
||||||
pub struct StyleSheet {
|
pub struct StyleSheet {
|
||||||
source : Source, // Fuente y modo de inclusión del CSS.
|
source : Source, // Fuente y modo de inclusión del CSS.
|
||||||
version: String, // Versión del recurso para la caché del navegador.
|
version: String, // Versión del recurso para la caché del navegador.
|
||||||
media : TargetMedia, // Medio objetivo para los estilos (`print`, `screen`, …).
|
media : TargetMedia, // Medio objetivo para los estilos (`print`, `screen`, ...).
|
||||||
weight : Weight, // Peso que determina el orden.
|
weight : Weight, // Peso que determina el orden.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ impl StyleSheet {
|
||||||
|
|
||||||
/// Crea una hoja de estilos embebida directamente en el documento HTML.
|
/// Crea una hoja de estilos embebida directamente en el documento HTML.
|
||||||
///
|
///
|
||||||
/// Equivale a `<style>…</style>`. El parámetro `name` se usa como identificador interno del
|
/// Equivale a `<style>...</style>`. El parámetro `name` se usa como identificador interno del
|
||||||
/// recurso.
|
/// recurso.
|
||||||
pub fn inline(name: impl Into<String>, styles: impl Into<String>) -> Self {
|
pub fn inline(name: impl Into<String>, styles: impl Into<String>) -> Self {
|
||||||
StyleSheet {
|
StyleSheet {
|
||||||
|
|
|
@ -33,8 +33,8 @@
|
||||||
html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico"
|
html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico"
|
||||||
)]
|
)]
|
||||||
|
|
||||||
// Alias para que las rutas absolutas `::pagetop::…` generadas por las macros funcionen en el propio
|
// Alias para que las rutas absolutas `::pagetop::...` generadas por las macros funcionen en el
|
||||||
// *crate*, en *crates* externos y en *doctests*.
|
// propio *crate*, en *crates* externos y en *doctests*.
|
||||||
extern crate self as pagetop;
|
extern crate self as pagetop;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
|
@ -119,13 +119,13 @@ static LANGUAGES: LazyLock<HashMap<&str, (LanguageIdentifier, &str)>> = LazyLock
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
// Identificador del idioma de **respaldo** (predefinido a `en-US`).
|
// Identificador de idioma de **respaldo** (predefinido a `en-US`).
|
||||||
//
|
//
|
||||||
// Se usa cuando el valor del identificador de idioma en las traducciones no corresponde con ningún
|
// Se usa cuando el valor del identificador de idioma en las traducciones no corresponde con ningún
|
||||||
// idioma soportado por la aplicación.
|
// idioma soportado por la aplicación.
|
||||||
static FALLBACK_LANGID: LazyLock<LanguageIdentifier> = LazyLock::new(|| langid!("en-US"));
|
static FALLBACK_LANGID: LazyLock<LanguageIdentifier> = LazyLock::new(|| langid!("en-US"));
|
||||||
|
|
||||||
// Identificador del idioma **por defecto** para la aplicación.
|
// Identificador de idioma **por defecto** para la aplicación.
|
||||||
//
|
//
|
||||||
// Se resuelve a partir de [`global::SETTINGS.app.language`](global::SETTINGS). Si el identificador
|
// Se resuelve a partir de [`global::SETTINGS.app.language`](global::SETTINGS). Si el identificador
|
||||||
// de idioma no es válido o no está disponible entonces resuelve como [`FALLBACK_LANGID`].
|
// de idioma no es válido o no está disponible entonces resuelve como [`FALLBACK_LANGID`].
|
||||||
|
@ -177,13 +177,13 @@ pub(crate) static DEFAULT_LANGID: LazyLock<&LanguageIdentifier> =
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum LangMatch {
|
pub enum LangMatch {
|
||||||
/// Cuando el identificador del idioma es una cadena vacía.
|
/// Cuando el identificador de idioma es una cadena vacía.
|
||||||
Unspecified,
|
Unspecified,
|
||||||
/// Si encuentra un [`LanguageIdentifier`] en la lista de idiomas soportados por `PageTop` que
|
/// Si encuentra un [`LanguageIdentifier`] en la lista de idiomas soportados por `PageTop` que
|
||||||
/// coincide exactamente con el identificador del idioma (p.ej. "es-ES"), o con el identificador
|
/// coincide exactamente con el identificador de idioma (p.ej. "es-ES"), o con el identificador
|
||||||
/// del idioma base (p.ej. "es").
|
/// del idioma base (p.ej. "es").
|
||||||
Found(&'static LanguageIdentifier),
|
Found(&'static LanguageIdentifier),
|
||||||
/// Si el identificador del idioma no está entre los soportados por `PageTop`.
|
/// Si el identificador de idioma no está entre los soportados por `PageTop`.
|
||||||
Unsupported(String),
|
Unsupported(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ impl Redirect {
|
||||||
/// Redirección **permanente**. Código de estado **308**. Mantiene método y cuerpo sin cambios.
|
/// Redirección **permanente**. Código de estado **308**. Mantiene método y cuerpo sin cambios.
|
||||||
///
|
///
|
||||||
/// Indicada para reorganizaciones de un sitio o aplicación web en las que también existen
|
/// Indicada para reorganizaciones de un sitio o aplicación web en las que también existen
|
||||||
/// métodos distintos de GET (POST, PUT, …) que no deben degradarse a GET.
|
/// métodos distintos de GET (POST, PUT, ...) que no deben degradarse a GET.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn permanent(redirect_to_url: &str) -> HttpResponse {
|
pub fn permanent(redirect_to_url: &str) -> HttpResponse {
|
||||||
HttpResponse::PermanentRedirect()
|
HttpResponse::PermanentRedirect()
|
||||||
|
@ -55,7 +55,7 @@ impl Redirect {
|
||||||
/// mantiene tal cual. Otros métodos pueden degradarse a GET.
|
/// mantiene tal cual. Otros métodos pueden degradarse a GET.
|
||||||
///
|
///
|
||||||
/// Útil cuando un recurso está fuera de servicio de forma imprevista (mantenimiento breve,
|
/// Útil cuando un recurso está fuera de servicio de forma imprevista (mantenimiento breve,
|
||||||
/// sobrecarga, …).
|
/// sobrecarga, ...).
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn found(redirect_to_url: &str) -> HttpResponse {
|
pub fn found(redirect_to_url: &str) -> HttpResponse {
|
||||||
HttpResponse::Found()
|
HttpResponse::Found()
|
||||||
|
|
|
@ -44,7 +44,7 @@ mod windows {
|
||||||
async fn ok_absolute_dir() -> io::Result<()> {
|
async fn ok_absolute_dir() -> io::Result<()> {
|
||||||
let _app = service::test::init_service(Application::new().test()).await;
|
let _app = service::test::init_service(Application::new().test()).await;
|
||||||
|
|
||||||
// C:\Users\…\Temp\…
|
// C:\Users\...\Temp\...
|
||||||
let td = TempDir::new()?;
|
let td = TempDir::new()?;
|
||||||
let root = td.path();
|
let root = td.path();
|
||||||
let sub = root.join("sub");
|
let sub = root.join("sub");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue