| .cargo | ||
| config | ||
| examples | ||
| extensions | ||
| helpers | ||
| src | ||
| static | ||
| tests | ||
| tools | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CREDITS.md | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| README.md | ||
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_component(Html::with(move |_| 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>.
📂 Repositorio
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-statics, es la librería que 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.
-
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 que mejoran la experiencia de desarrollo con PageTop.
Extensiones
- pagetop-aliner, es un tema para demos y pruebas que muestra esquemáticamente la composición de las páginas HTML.
🧪 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 simplementecargo 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:
-
Licencia MIT (LICENSE-MIT o también https://opensource.org/licenses/MIT)
-
Licencia Apache, Versión 2.0 (LICENSE-APACHE o también https://www.apache.org/licenses/LICENSE-2.0)
Puedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en el ecosistema Rust.
✨ Contribuir
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.