pagetop/extensions/pagetop-htmx
Manuel Cillero 9db1d4bab0 (htmx): Añade soporte OOB a HtmxResponse
Nuevo método `oob()` para incluir fragmentos adicionales marcados con
`hx-swap-oob` en el cuerpo de la respuesta, sin necesidad de construir
el envoltorio a mano ni depender del `hx-target` de la petición.

De paso, `set_header()` usa ya las constantes de `hx::response` en vez
de literales repetidos, y se revisan comentarios.
2026-07-26 17:55:25 +02:00
..
assets/js (build): Introduce nuevas funciones de build 2026-06-14 21:18:54 +02:00
src (htmx): Añade soporte OOB a HtmxResponse 2026-07-26 17:55:25 +02:00
tests (htmx): Añade soporte OOB a HtmxResponse 2026-07-26 17:55:25 +02:00
build.rs (build): Introduce nuevas funciones de build 2026-06-14 21:18:54 +02:00
Cargo.toml (htmx): Añade soporte HTMX a tablas ordenables 2026-07-23 07:21:27 +02:00
LICENSE-APACHE (htmx): Añade integración con HTMX 2 2026-06-13 18:41:15 +02:00
LICENSE-MIT (htmx): Añade integración con HTMX 2 2026-06-13 18:41:15 +02:00
README.md (htmx): Añade soporte HTMX a tablas ordenables 2026-07-23 07:21:27 +02:00

PageTop HTMX

Extensión para PageTop que integra HTMX para enriquecer las páginas con interacciones dinámicas.

Doc API Crates.io Descargas Licencia

Sobre PageTop

PageTop es un entorno de desarrollo que reivindica la esencia de la web clásica para crear soluciones web SSR (renderizadas en el servidor) modulares, extensibles y configurables, basadas en HTML, CSS y JavaScript.

Guía rápida

Añade la dependencia a tu Cargo.toml:

[dependencies]
pagetop-htmx = { ... }

Declara la extensión en tu aplicación (o extensión que la requiera). Recuerda que el orden en dependencies() determina la prioridad relativa frente a las otras extensiones:

use pagetop::prelude::*;

struct MyApp;

#[async_trait]
impl Extension for MyApp {
    fn dependencies(&self) -> Vec<ExtensionRef> {
        vec![
            // ...
            &pagetop_htmx::Htmx
            // ...
        ]
    }
}

A partir de ese momento, todas las páginas de la aplicación incluirán automáticamente el script de HTMX 2. Puedes usar los atributos hx-* directamente en tus componentes o el código HTML generado:

use pagetop::prelude::*;

async fn homepage(request: HttpRequest) -> Result<Markup, ErrorPage> {
    Page::new(request)
        .with_child(Html::with(|_| html! {
            button hx-get="/api/hello" hx-target="#result" {
                "Say hello"
            }
            div #result {}
        }))
        .render().await
}

Cuando los valores se construyen en tiempo de ejecución o quieres que una extensión aplique estos atributos sin que el componente dependa de HTMX, usa Props junto con las constantes de hx en lugar de escribirlos como literales en html!:

use pagetop::prelude::*;
use pagetop_htmx::prelude::*;

async fn homepage(request: HttpRequest) -> Result<Markup, ErrorPage> {
    let props = Props::new(hx::GET, "/api/hello")
        .with_prop(PropsOp::set(hx::TARGET, "#result"));

    Page::new(request)
        .with_child(Html::with(move |_| html! {
            button (props) { "Say hello" }
            div #result {}
        }))
        .render().await
}

Créditos

Este crate integra la biblioteca HTMX 2.0.10, distribuida bajo licencia BSD 2-Clause.

Advertencia

PageTop es un proyecto personal para aprender Rust y conocer su ecosistema. Su API está sujeta a cambios frecuentes. No se recomienda su uso en producción, al menos hasta que se libere la versión 1.0.0.

Licencia

El código está disponible bajo una doble licencia:

Puedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en el ecosistema Rust.