pagetop/README.md

5 KiB
Raw Blame History

PageTop

Entorno de desarrollo para crear soluciones web modulares, extensibles y configurables.

Licencia Doc API Crates.io Descargas

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 PageTop o 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

Aplicación

  • drust, es una aplicación que utiliza PageTop para 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:

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.