✨ Añade config. para activar página de bienvenida
This commit is contained in:
parent
7083413d7b
commit
a27097e2bd
4 changed files with 47 additions and 14 deletions
|
|
@ -1,10 +1,15 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
/// Página de bienvenida predeterminada de PageTop.
|
||||
/// Página de bienvenida de PageTop.
|
||||
///
|
||||
/// Esta extensión se instala por defecto y muestra una página en la ruta raíz (`/`) cuando no se ha
|
||||
/// configurado ninguna página de inicio personalizada. Permite confirmar que el servidor está
|
||||
/// funcionando correctamente.
|
||||
/// Esta extensión se instala por defecto si el ajuste de configuración [`global::App::welcome`] es
|
||||
/// `true`. Muestra una página de bienvenida de PageTop en la ruta raíz (`/`) o en `/lang/{lang}`,
|
||||
/// siempre que `{lang}` sea un idioma soportado (si no, devuelve una página de error 404).
|
||||
///
|
||||
/// No obstante, cualquier extensión puede sobrescribir este comportamiento si utiliza estas mismas
|
||||
/// rutas.
|
||||
///
|
||||
/// Resulta útil en demos o para comprobar rápidamente que el servidor ha arrancado correctamente.
|
||||
pub struct Welcome;
|
||||
|
||||
impl Extension for Welcome {
|
||||
|
|
@ -17,15 +22,33 @@ impl Extension for Welcome {
|
|||
}
|
||||
|
||||
fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
|
||||
scfg.route("/", service::web::get().to(homepage));
|
||||
scfg.route("/", service::web::get().to(home_page))
|
||||
.route("/lang/{lang}", service::web::get().to(home_lang));
|
||||
}
|
||||
}
|
||||
|
||||
async fn homepage(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
|
||||
async fn home_page(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
|
||||
let language = LangMatch::from_request(Some(&request));
|
||||
home(request, &language)
|
||||
}
|
||||
|
||||
async fn home_lang(
|
||||
request: HttpRequest,
|
||||
path: service::web::Path<String>,
|
||||
) -> ResultPage<Markup, ErrorPage> {
|
||||
let language = LangMatch::resolve(path.into_inner());
|
||||
match language {
|
||||
LangMatch::Found(_) => home(request, &language),
|
||||
_ => Err(ErrorPage::NotFound(request)),
|
||||
}
|
||||
}
|
||||
|
||||
fn home(request: HttpRequest, language: &impl LangId) -> ResultPage<Markup, ErrorPage> {
|
||||
let app = &global::SETTINGS.app.name;
|
||||
|
||||
Page::new(request)
|
||||
.with_title(L10n::l("welcome_title"))
|
||||
.with_langid(language)
|
||||
.add_child(
|
||||
Intro::new()
|
||||
.add_child(
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
//! Carga las opciones de configuración.
|
||||
//! Carga las opciones de configuración de la aplicación.
|
||||
//!
|
||||
//! Estos ajustes se obtienen de archivos [TOML](https://toml.io) como pares `clave = valor` que se
|
||||
//! mapean a estructuras **fuertemente tipadas** y valores predefinidos.
|
||||
|
|
@ -125,7 +125,7 @@ const DEFAULT_CONFIG_DIR: &str = "config";
|
|||
// Modo de ejecución por defecto.
|
||||
const DEFAULT_RUN_MODE: &str = "default";
|
||||
|
||||
/// Valores originales cargados desde los archivos de configuración como pares `clave = valor`.
|
||||
/// Valores originales de los archivos de configuración como pares `clave = valor`.
|
||||
pub static CONFIG_VALUES: LazyLock<ConfigBuilder<DefaultState>> = LazyLock::new(|| {
|
||||
// CONFIG_DIR (si existe) o DEFAULT_CONFIG_DIR. Si no se puede resolver, se usa tal cual.
|
||||
let dir = env::var_os("CONFIG_DIR").unwrap_or_else(|| DEFAULT_CONFIG_DIR.into());
|
||||
|
|
@ -229,10 +229,11 @@ pub static CONFIG_VALUES: LazyLock<ConfigBuilder<DefaultState>> = LazyLock::new(
|
|||
macro_rules! include_config {
|
||||
( $SETTINGS_NAME:ident : $Settings_Type:ty => [ $( $k:literal => $v:expr ),* $(,)? ] ) => {
|
||||
#[doc = concat!(
|
||||
"Instancia los ajustes de configuración para [`", stringify!($Settings_Type), "`]."
|
||||
"Ajustes de configuración y **valores por defecto** para ",
|
||||
"[`", stringify!($Settings_Type), "`]."
|
||||
)]
|
||||
#[doc = ""]
|
||||
#[doc = "Valores por defecto:"]
|
||||
#[doc = "Valores predeterminados que se aplican en ausencia de configuración:"]
|
||||
#[doc = "```text"]
|
||||
$(
|
||||
#[doc = concat!($k, " = ", stringify!($v))]
|
||||
|
|
|
|||
|
|
@ -29,8 +29,10 @@ pub fn register_extensions(root_extension: Option<ExtensionRef>) {
|
|||
add_to_enabled(&mut enabled_list, extension);
|
||||
}
|
||||
|
||||
// Añade la página de bienvenida por defecto a la lista de extensiones habilitadas.
|
||||
add_to_enabled(&mut enabled_list, &crate::base::extension::Welcome);
|
||||
// Añade la página de bienvenida predefinida si se habilita en la configuración.
|
||||
if global::SETTINGS.app.welcome {
|
||||
add_to_enabled(&mut enabled_list, &crate::base::extension::Welcome);
|
||||
}
|
||||
|
||||
// Guarda la lista final de extensiones habilitadas.
|
||||
ENABLED_EXTENSIONS.write().append(&mut enabled_list);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ include_config!(SETTINGS: Settings => [
|
|||
"app.theme" => "Basic",
|
||||
"app.language" => "",
|
||||
"app.startup_banner" => "Slant",
|
||||
"app.welcome" => true,
|
||||
|
||||
// [dev]
|
||||
"dev.pagetop_static_dir" => "",
|
||||
|
|
@ -59,13 +60,19 @@ pub struct App {
|
|||
/// Banner ASCII mostrado al inicio: *"Off"* (desactivado), *"Slant"*, *"Small"*, *"Speed"* o
|
||||
/// *"Starwars"*.
|
||||
pub startup_banner: String,
|
||||
/// Activa la página de bienvenida de PageTop.
|
||||
///
|
||||
/// Si está activada, se instala la extensión [`Welcome`](crate::base::extension::Welcome), que
|
||||
/// ofrece una página de bienvenida predefinida en `"/"` y también en `"/lang/{lang}"`, para
|
||||
/// mostrar el contenido en el idioma `{lang}`, siempre que esté soportado.
|
||||
pub welcome: bool,
|
||||
/// Modo de ejecución, dado por la variable de entorno `PAGETOP_RUN_MODE`, o *"default"* si no
|
||||
/// está definido.
|
||||
pub run_mode: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
/// Sección `[Dev]` de la configuración. Forma parte de [`Settings`].
|
||||
/// Sección `[dev]` de la configuración. Forma parte de [`Settings`].
|
||||
pub struct Dev {
|
||||
/// Directorio desde el que servir los archivos estáticos de PageTop.
|
||||
///
|
||||
|
|
@ -87,7 +94,7 @@ pub struct Log {
|
|||
/// *"Warn"*, *"Info"*, *"Debug"* o *"Trace"*.
|
||||
/// Ejemplo: "Error,actix_server::builder=Info,tracing_actix_web=Debug".
|
||||
pub tracing: String,
|
||||
/// Muestra los mensajes de traza en el terminal (*"Stdout"*) o las registra en archivos con
|
||||
/// Muestra los mensajes de traza en el terminal (*"Stdout"*) o los vuelca en archivos con
|
||||
/// rotación: *"Daily"*, *"Hourly"*, *"Minutely"* o *"Endless"*.
|
||||
pub rolling: String,
|
||||
/// Directorio para los archivos de traza (si `rolling` ≠ *"Stdout"*).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue