(bootsier): Añade ajuste dev.bootsier_static_dir

Permite servir `css`, `js` y `fonts` desde disco mientras la aplicación
está en ejecución, sin necesidad de recompilar.
This commit is contained in:
Manuel Cillero 2026-06-20 19:47:19 +02:00
parent 2202a2350c
commit dbf0894894
3 changed files with 32 additions and 8 deletions

View file

@ -9,7 +9,7 @@
//!
//! Uso:
//!
//! ```rust
//! ```rust,no_run
//! # use pagetop::prelude::*;
//! use pagetop_bootsier::config;
//!
@ -26,12 +26,15 @@ use serde::Deserialize;
include_config!(SETTINGS: Settings => [
// [bootsier]
"bootsier.max_width" => "1440px",
// [dev]
"dev.bootsier_static_dir" => "",
]);
/// Ajustes para la sección [`Bootsier`] de [`SETTINGS`].
#[derive(Debug, Deserialize)]
pub struct Settings {
pub bootsier: Bootsier,
pub dev: Dev,
}
/// Sección **`[bootsier]`** de la configuración. Forma parte de [`Settings`].
@ -40,3 +43,16 @@ pub struct Bootsier {
/// Ancho máximo predeterminado para la página, por ejemplo "100%" o "90rem".
pub max_width: UnitValue,
}
/// Sección **`[dev]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct Dev {
/// Directorio raíz de `static/` para servir los archivos estáticos propios de Bootsier.
///
/// Si se indica una ruta válida, absoluta o relativa al directorio del proyecto o del binario
/// en ejecución, los archivos estáticos se servirán desde disco. Útil para poder modificar los
/// archivos estáticos mientras la aplicación está en ejecución, sin necesidad de recompilar.
///
/// Si la cadena está vacía, se ignora este ajuste.
pub bootsier_static_dir: String,
}

View file

@ -134,8 +134,17 @@ impl Extension for Bootsier {
}
fn configure_router(&self, router: Router) -> Router {
serve_static_files!(router, [bootsier_bs] => "/bootsier/bs");
serve_static_files!(router, [bootsier_js] => "/bootsier/js");
let base = &config::SETTINGS.dev.bootsier_static_dir;
let subdir = |s: &str| {
if base.is_empty() {
String::new()
} else {
format!("{base}/{s}")
}
};
serve_static_files!(router, [subdir("css"), bootsier_css] => "/bootsier/css");
serve_static_files!(router, [subdir("js"), bootsier_js] => "/bootsier/js");
serve_static_files!(router, [subdir("fonts"), bootsier_fonts] => "/bootsier/fonts");
router
}
}

View file

@ -90,12 +90,11 @@ pub struct App {
/// Sección **`[dev]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct Dev {
/// Directorio desde el que servir los archivos estáticos de PageTop.
/// Directorio raíz de `static/` para servir los archivos estáticos propios de PageTop.
///
/// Por defecto, los archivos se integran en el binario de la aplicación. Si aquí se indica una
/// ruta válida, ya sea absoluta o relativa al directorio del proyecto o del binario en
/// ejecución, se servirán desde el sistema de ficheros en su lugar. Esto es especialmente útil
/// en desarrollo, ya que evita recompilar el proyecto por cambios en estos archivos.
/// Si se indica una ruta válida, absoluta o relativa al directorio del proyecto o del binario
/// en ejecución, los archivos estáticos se servirán desde disco. Útil para poder modificar los
/// archivos estáticos mientras la aplicación está en ejecución, sin necesidad de recompilar.
///
/// Si la cadena está vacía, se ignora este ajuste.
pub pagetop_static_dir: String,