| config | ||
| drust | ||
| helpers | ||
| packages/pagetop-seaorm | ||
| pagetop | ||
| tests | ||
| tools | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CREDITS.md | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| README.md | ||
PageTop reivindica la sencillez de la web clásica combinando SSR (renderizado en el servidor),
HTML, CSS y JavaScript. Proporciona un conjunto completo de funcionalidades que pueden extenderse y
adaptarse a las necesidades de cada solución web implementando:
- Acciones (actions). Las funcionalidades que incorporen acciones en su lógica de programa estarán proporcionando a los desarrolladores herramientas para alterar su comportamiento interno interceptando su flujo de ejecución.
- Componentes (components). Para encapsular HTML, CSS y JavaScript en unidades funcionales, configurables y bien definidas.
- Diseños (layouts). Permiten a los desarrolladores modificar la apariencia de páginas y componentes sin afectar a su funcionalidad.
- Paquetes (packages). Extienden o personalizan funcionalidades existentes interactuando con
las APIs de
PageTopo de paquetes de terceros.
⚡️ 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
}
Proporciona una página de bienvenida en http://localhost:8088 según la configuración predefinida.
Para personalizar el servicio puedes crear un paquete de PageTop:
use pagetop::prelude::*;
struct HelloWorld;
impl PackageTrait 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 prepara un paquete personalizado llamado HelloWorld que sirve una página web en la
ruta raíz (/) mostrando el mensaje "Hello world!" en un elemento HTML <h1>.
📂 Estructura del código
El repositorio 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.
Paquetes
- pagetop-seaorm,
integra SeaORM para trabajar con bases de datos en aplicaciones
PageTop.
Aplicación
- 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.
🚧 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.