6 KiB
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
PageTopo 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
}
Por defecto, este código sirve una página web de bienvenida accesible desde un navegador en la
dirección http://localhost:8088, siguiendo la configuración predeterminada.
Para personalizar el servicio, puedes crear una extensión de PageTop de la siguiente manera:
use pagetop::prelude::*;
struct HelloWorld;
impl ExtensionTrait 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)
.with_component(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>.
📂 Repositorio
El código se organiza en un workspace con los siguientes subproyectos:
- pagetop, es 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, permite incluir fácilmente archivos estáticos o archivos SCSS compilados directamente en el binario de las aplicaciones
PageTop. -
pagetop-macros, proporciona una colección de macros que mejoran la experiencia de desarrollo con
PageTop.
Extensiones
-
pagetop-seaorm, integra SeaORM para trabajar con bases de datos en aplicaciones
PageTop. -
pagetop-mdbook, incluye contenido generado por mdBook en aplicaciones desarrolladas con
PageTop. -
pagetop-hljs, utiliza HighlightJS para mostrar fragmentos de código con resaltado de sintaxis con
PageTop.
Temas
- pagetop-bootsier,
tema para
PageTopque usa Bootstrap para dar vida a tus diseños web.
Aplicaciones
-
drust, es una aplicación que utiliza
PageToppara crear un Sistema de Gestión de Contenidos (CMS) que permita construir sitios web dinámicos, administrados y configurables. -
website, es la aplicación web creada con el propio entorno
PageToppara descubrir a la comunidad su ecosistema en pagetop.cillero.es.
🚧 Advertencia
PageTop es un proyecto personal que hago por diversión para aprender cosas nuevas. Su API es
inestable y está sujeta a cambios frecuentes. No recomiendo su uso en producción, al menos mientras
no se libere una 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.
✨ Contribuciones
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.