♻️ (htmx): Expone request y response como públicos

This commit is contained in:
Manuel Cillero 2026-07-26 10:00:43 +02:00
parent b9d9cdf601
commit 39f494539e
5 changed files with 22 additions and 27 deletions

View file

@ -381,7 +381,8 @@ pub fn on_htmx(event: &str) -> String {
/// ///
/// Están en minúsculas porque así las normaliza el módulo `http`. Se pueden usar con /// Están en minúsculas porque así las normaliza el módulo `http`. Se pueden usar con
/// [`HttpRequest::headers()`](pagetop::web::HttpRequest::headers) para leer sus valores /// [`HttpRequest::headers()`](pagetop::web::HttpRequest::headers) para leer sus valores
/// directamente, aunque lo habitual es usar el trait [`HtmxRequestExt`](crate::HtmxRequestExt). /// directamente, aunque lo habitual es usar el trait
/// [`HtmxRequestExt`](crate::request::HtmxRequestExt).
/// ///
/// ```rust,no_run /// ```rust,no_run
/// use pagetop::prelude::*; /// use pagetop::prelude::*;
@ -417,7 +418,8 @@ pub mod request {
/// Cabeceras de respuesta HTTP para HTMX. /// Cabeceras de respuesta HTTP para HTMX.
/// ///
/// Se pueden usar con [`HeaderMap`](pagetop::web::http::HeaderMap) para construir respuestas /// Se pueden usar con [`HeaderMap`](pagetop::web::http::HeaderMap) para construir respuestas
/// manualmente, aunque lo habitual es usar el constructor [`HtmxResponse`](crate::HtmxResponse). /// manualmente, aunque lo habitual es usar el constructor
/// [`HtmxResponse`](crate::response::HtmxResponse).
/// ///
/// ```rust,no_run /// ```rust,no_run
/// use pagetop::prelude::*; /// use pagetop::prelude::*;
@ -431,38 +433,38 @@ pub mod request {
/// ``` /// ```
pub mod response { pub mod response {
/// Redirige mediante AJAX a la URL o configuración JSON indicada. Ver /// Redirige mediante AJAX a la URL o configuración JSON indicada. Ver
/// [`HtmxResponse::location()`](crate::HtmxResponse::location) y /// [`HtmxResponse::location()`](crate::response::HtmxResponse::location) y
/// [`HtmxResponse::location_json()`](crate::HtmxResponse::location_json). /// [`HtmxResponse::location_json()`](crate::response::HtmxResponse::location_json).
pub const LOCATION: &str = "HX-Location"; pub const LOCATION: &str = "HX-Location";
/// Empuja la URL indicada al historial del navegador. Ver /// Empuja la URL indicada al historial del navegador. Ver
/// [`HtmxResponse::push_url()`](crate::HtmxResponse::push_url). /// [`HtmxResponse::push_url()`](crate::response::HtmxResponse::push_url).
pub const PUSH_URL: &str = "HX-Push-Url"; pub const PUSH_URL: &str = "HX-Push-Url";
/// Provoca una redirección completa del navegador. Ver /// Provoca una redirección completa del navegador. Ver
/// [`HtmxResponse::redirect()`](crate::HtmxResponse::redirect). /// [`HtmxResponse::redirect()`](crate::response::HtmxResponse::redirect).
pub const REDIRECT: &str = "HX-Redirect"; pub const REDIRECT: &str = "HX-Redirect";
/// Provoca una recarga completa de la página. Ver /// Provoca una recarga completa de la página. Ver
/// [`HtmxResponse::refresh()`](crate::HtmxResponse::refresh). /// [`HtmxResponse::refresh()`](crate::response::HtmxResponse::refresh).
pub const REFRESH: &str = "HX-Refresh"; pub const REFRESH: &str = "HX-Refresh";
/// Reemplaza la URL actual en el historial. Ver /// Reemplaza la URL actual en el historial. Ver
/// [`HtmxResponse::replace_url()`](crate::HtmxResponse::replace_url). /// [`HtmxResponse::replace_url()`](crate::response::HtmxResponse::replace_url).
pub const REPLACE_URL: &str = "HX-Replace-Url"; pub const REPLACE_URL: &str = "HX-Replace-Url";
/// Anula el `hx-swap` del elemento. Ver /// Anula el `hx-swap` del elemento. Ver
/// [`HtmxResponse::reswap()`](crate::HtmxResponse::reswap). /// [`HtmxResponse::reswap()`](crate::response::HtmxResponse::reswap).
pub const RESWAP: &str = "HX-Reswap"; pub const RESWAP: &str = "HX-Reswap";
/// Anula el `hx-target` del elemento. Ver /// Anula el `hx-target` del elemento. Ver
/// [`HtmxResponse::retarget()`](crate::HtmxResponse::retarget). /// [`HtmxResponse::retarget()`](crate::response::HtmxResponse::retarget).
pub const RETARGET: &str = "HX-Retarget"; pub const RETARGET: &str = "HX-Retarget";
/// Anula el `hx-select` del elemento. Ver /// Anula el `hx-select` del elemento. Ver
/// [`HtmxResponse::reselect()`](crate::HtmxResponse::reselect). /// [`HtmxResponse::reselect()`](crate::response::HtmxResponse::reselect).
pub const RESELECT: &str = "HX-Reselect"; pub const RESELECT: &str = "HX-Reselect";
/// Dispara eventos JavaScript al completar la respuesta. Ver /// Dispara eventos JavaScript al completar la respuesta. Ver
/// [`HtmxResponse::trigger()`](crate::HtmxResponse::trigger). /// [`HtmxResponse::trigger()`](crate::response::HtmxResponse::trigger).
pub const TRIGGER: &str = "HX-Trigger"; pub const TRIGGER: &str = "HX-Trigger";
/// Dispara eventos tras la fase *settle*. Ver /// Dispara eventos tras la fase *settle*. Ver
/// [`HtmxResponse::trigger_after_settle()`](crate::HtmxResponse::trigger_after_settle). /// [`HtmxResponse::trigger_after_settle()`](crate::response::HtmxResponse::trigger_after_settle).
pub const TRIGGER_AFTER_SETTLE: &str = "HX-Trigger-After-Settle"; pub const TRIGGER_AFTER_SETTLE: &str = "HX-Trigger-After-Settle";
/// Dispara eventos tras el *swap*. Ver /// Dispara eventos tras el *swap*. Ver
/// [`HtmxResponse::trigger_after_swap()`](crate::HtmxResponse::trigger_after_swap). /// [`HtmxResponse::trigger_after_swap()`](crate::response::HtmxResponse::trigger_after_swap).
pub const TRIGGER_AFTER_SWAP: &str = "HX-Trigger-After-Swap"; pub const TRIGGER_AFTER_SWAP: &str = "HX-Trigger-After-Swap";
} }

View file

@ -93,18 +93,13 @@ include_locales!(LOCALES_HTMX);
pub mod hx; pub mod hx;
pub mod hx_table; pub mod hx_table;
pub mod request;
mod request; pub mod response;
pub use request::HtmxRequestExt;
mod response;
pub use response::HtmxResponse;
/// Prelude de `pagetop-htmx`. /// Prelude de `pagetop-htmx`.
pub mod prelude { pub mod prelude {
pub use crate::hx; pub use crate::hx;
pub use crate::hx_table; pub use crate::hx_table;
pub use crate::request::HtmxRequestExt; pub use crate::request::HtmxRequestExt;
pub use crate::response::HtmxResponse; pub use crate::response::HtmxResponse;
} }

View file

@ -4,8 +4,7 @@ use pagetop::prelude::*;
// **< HtmxRequestExt >***************************************************************************** // **< HtmxRequestExt >*****************************************************************************
/// Extiende [`HttpRequest`](pagetop::web::HttpRequest) con métodos para detectar y leer peticiones /// Extiende [`HttpRequest`] con métodos para detectar y leer peticiones HTMX.
/// HTMX.
/// ///
/// HTMX añade cabeceras especiales a cada petición AJAX. Este trait permite acceder a ellas de /// HTMX añade cabeceras especiales a cada petición AJAX. Este trait permite acceder a ellas de
/// forma expresiva, sin manipular [`pagetop::web::http::HeaderMap`] directamente. /// forma expresiva, sin manipular [`pagetop::web::http::HeaderMap`] directamente.

View file

@ -1,4 +1,4 @@
//! Implementación de [`HtmxResponse`] e [`IntoResponse`](pagetop::web::IntoResponse) para HTMX. //! Implementación de [`HtmxResponse`] e [`IntoResponse`] para HTMX.
use pagetop::prelude::*; use pagetop::prelude::*;
@ -10,8 +10,7 @@ use pagetop::prelude::*;
/// parciales acompañados de cabeceras especiales que instruyen al cliente sobre qué hacer con la /// parciales acompañados de cabeceras especiales que instruyen al cliente sobre qué hacer con la
/// respuesta: actualizar la URL del historial, disparar eventos JavaScript, redirigir, etc. /// respuesta: actualizar la URL del historial, disparar eventos JavaScript, redirigir, etc.
/// ///
/// Implementa [`IntoResponse`](pagetop::web::IntoResponse), por lo que puede devolverse /// Implementa [`IntoResponse`], por lo que puede devolverse directamente desde cualquier handler.
/// directamente desde cualquier handler.
/// ///
/// # Ejemplo /// # Ejemplo
/// ///

View file

@ -1,5 +1,5 @@
use pagetop::prelude::*; use pagetop::prelude::*;
use pagetop_htmx::HtmxRequestExt; use pagetop_htmx::prelude::*;
struct TestApp; struct TestApp;