Un entorno para el desarrollo de soluciones web modulares, extensibles y configurables.
Find a file
2026-01-06 01:23:29 +01:00
.cargo 🔨 Añade soporte a changelog de pagetop-statics (#2) 2025-08-09 10:17:14 +02:00
config Añade soporte a temas en la API de extensiones 2025-07-20 23:51:15 +02:00
examples (locale): Refactoriza el sistema de localización 2025-12-14 14:33:35 +01:00
extensions (bootsier): Añade componentes para formularios 2026-01-06 01:17:35 +01:00
helpers 📝 Retoques menores en documentación 2026-01-06 01:23:26 +01:00
src 📝 Retoques menores en documentación 2026-01-06 01:23:26 +01:00
static (bootsier): Añade plantilla estándar propia 2025-11-30 10:53:49 +01:00
tests Extiende normalización de cadenas ASCII 2026-01-04 19:14:51 +01:00
tools 🔨 Actualiza *script* de generación de CHANGELOGs 2025-12-12 00:20:25 +01:00
.gitignore Añade gestión de trazas y registro de eventos 2025-07-06 23:03:21 +02:00
build.rs 🍱 Añade gestión de recursos estáticos de PageTop 2025-07-28 18:33:50 +02:00
Cargo.lock (pagetop): Añade gestión de rutas con parámetros 2025-12-12 00:14:55 +01:00
Cargo.toml (pagetop): Añade gestión de rutas con parámetros 2025-12-12 00:14:55 +01:00
CHANGELOG.md 🚚 Renombra add_component por add_child 2025-10-18 21:33:29 +02:00
CONTRIBUTING.md 📝 Actualiza el formato de mensajes commit 2025-12-21 15:20:53 +01:00
CREDITS.md 📝 (doc): Normaliza referencias al nombre PageTop 2025-09-03 21:05:35 +02:00
LICENSE-APACHE 📄 Añade las licencias del proyecto 2025-06-24 20:23:28 +02:00
LICENSE-MIT 📄 Añade las licencias del proyecto 2025-06-24 20:23:28 +02:00
MAINTAINERS.md 📝 Actualiza las guías de contribución 2025-12-21 09:47:35 +01:00
README.md 📝 Añade guías de contribución y revisa estilos 2025-12-19 11:15:49 +01:00

PageTop

Un entorno para el desarrollo de soluciones web modulares, extensibles y configurables.

Doc API Crates.io Descargas Licencia


PageTop reivindica la esencia de la web clásica usando Rust para la creación de soluciones web SSR (renderizadas en el servidor) basadas en HTML, CSS y JavaScript. Ofrece un conjunto de herramientas que los desarrolladores pueden implementar, extender o adaptar según las necesidades de cada proyecto, incluyendo:

  • Acciones (actions): alteran la lógica interna de una funcionalidad interceptando su flujo de ejecución.
  • Componentes (components): encapsulan HTML, CSS y JavaScript en unidades funcionales, configurables y reutilizables.
  • Extensiones (extensions): añaden, extienden o personalizan funcionalidades usando las APIs de PageTop o de terceros.
  • Temas (themes): son extensiones que permiten modificar la apariencia de páginas y componentes sin comprometer su funcionalidad.

Guía rápida

La aplicación más sencilla de PageTop se ve así:

use pagetop::prelude::*;

#[pagetop::main]
async fn main() -> std::io::Result<()> {
    Application::new().run()?.await
}

Este código arranca el servidor de PageTop. Con la configuración por defecto, muestra una página de bienvenida accesible desde un navegador local en la dirección http://localhost:8080.

Para personalizar el servicio, se puede crear una extensión de PageTop de la siguiente manera:

use pagetop::prelude::*;

struct HelloWorld;

impl Extension for HelloWorld {
    fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
        scfg.route("/", service::web::get().to(hello_world));
    }
}

async fn hello_world(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
    Page::new(request)
        .add_child(Html::with(|_| html! { h1 { "Hello World!" } }))
        .render()
}

#[pagetop::main]
async fn main() -> std::io::Result<()> {
    Application::prepare(&HelloWorld).run()?.await
}

Este programa implementa una extensión llamada HelloWorld que sirve una página web en la ruta raíz (/) mostrando el texto "Hello world!" dentro de un elemento HTML <h1>.

📂 Proyecto

El código se organiza en un workspace donde actualmente se incluyen los siguientes subproyectos:

  • pagetop, con el código fuente de la librería principal. Reúne algunos de los crates más estables y populares del ecosistema Rust para proporcionar APIs y recursos para la creación avanzada de soluciones web.

Auxiliares

  • pagetop-build, prepara los archivos estáticos o archivos SCSS compilados para incluirlos en el binario de las aplicaciones PageTop durante la compilación de los ejecutables.

  • pagetop-macros, proporciona una colección de macros procedurales que mejoran la experiencia de desarrollo con PageTop.

  • pagetop-minimal, ofrece macros declarativas esenciales para optimizar tareas comunes como la composición de texto, la concatenación de cadenas y el manejo de colecciones clave-valor.

  • pagetop-statics, permite incluir archivos estáticos en el ejecutable de las aplicaciones PageTop para servirlos de forma eficiente, con detección de cambios que optimizan el tiempo de compilación.

Extensiones

  • pagetop-aliner, es un tema para demos y pruebas que muestra esquemáticamente la composición de las páginas HTML.

  • pagetop-bootsier, tema basado en Bootstrap para integrar su catálogo de estilos y componentes flexibles.

🧪 Pruebas

Para simplificar el flujo de trabajo, el repositorio incluye varios alias de Cargo declarados en .cargo/config.toml. Basta con ejecutarlos desde la raíz del proyecto:

Comando Descripción
cargo ts Ejecuta los tests de pagetop (unit + integration) con la feature testing.
cargo ts --test util Lanza sólo las pruebas de integración del módulo util.
cargo ts --doc locale Lanza las pruebas de la documentación del módulo locale.
cargo tw Ejecuta los tests de todos los paquetes del workspace.

Nota Estos alias ya compilan con la configuración adecuada. No requieren --no-default-features. Si quieres activar las trazas del registro de eventos entonces usa simplemente cargo test.

🚧 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.

Contribuir

PageTop mantiene un único repositorio oficial:

El repositorio de GitHub actúa como espejo y punto de entrada para:

  • dar mayor visibilidad al proyecto,
  • facilitar la participación de la comunidad,
  • centralizar issues y pull requests externas.

Aunque GitHub permite abrir pull requests, la integración del código se realiza únicamente en el repositorio oficial. El repositorio de GitHub se sincroniza posteriormente para reflejar el mismo estado.

En todos los casos, se respeta la autoría original de las contribuciones integradas, tanto en el historial como en la documentación asociada al cambio.

Para conocer el proceso completo de participación, revisión e integración de cambios, consulta el archivo CONTRIBUTING.md.

Cualquier contribución para añadir al proyecto se considerará automáticamente bajo la doble licencia indicada arriba (MIT o Apache v2.0), sin términos o condiciones adicionales, tal y como permite la licencia Apache v2.0.