diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..5e89b86 --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,34 @@ +# 馃攦 Dependencias + +`PageTop` est谩 basado en [Rust](https://www.rust-lang.org/) y crece a hombros de gigantes +aprovechando algunas de las librer铆as m谩s robustas y populares del [ecosistema Rust](https://lib.rs) +como son: + + * [Actix Web](https://actix.rs/) para los servicios web. + * [Config](https://docs.rs/config) para cargar y procesar las opciones de configuraci贸n. + * [Tracing](https://github.com/tokio-rs/tracing) para la gesti贸n de trazas y registro de eventos + de la aplicaci贸n. + * [Fluent templates](https://github.com/XAMPPRocky/fluent-templates), que integra + [Fluent](https://projectfluent.org/) para internacionalizar las aplicaciones. + * Adem谩s de otros crates adicionales que se pueden explorar en los archivos `Cargo.toml` de + `PageTop` y sus extensiones. + + +# 馃棜 FIGfonts + +`PageTop` usa el *crate* [figlet-rs](https://crates.io/crates/figlet-rs) desarrollado por +*yuanbohan* para mostrar un banner de presentaci贸n en el terminal con el nombre de la aplicaci贸n en +caracteres [FIGlet](http://www.figlet.org). Las fuentes incluidas en `pagetop/src/app` son: + + * [slant.flf](http://www.figlet.org/fontdb_example.cgi?font=slant.flf) de *Glenn Chappell* + * [small.flf](http://www.figlet.org/fontdb_example.cgi?font=small.flf) de *Glenn Chappell* + (predeterminada) + * [speed.flf](http://www.figlet.org/fontdb_example.cgi?font=speed.flf) de *Claude Martins* + * [starwars.flf](http://www.figlet.org/fontdb_example.cgi?font=starwars.flf) de *Ryan Youck* + + +# 馃帹 Icono + +"La Criatura" sonriente es una simp谩tica creaci贸n de [Webalys](https://www.iconfinder.com/webalys). +Forma parte de su colecci贸n [Nasty Icons](https://www.iconfinder.com/iconsets/nasty), disponible en +[ICONFINDER](https://www.iconfinder.com). diff --git a/Cargo.lock b/Cargo.lock index 20087bf..906b338 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1569,7 +1569,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pagetop" -version = "0.0.14" +version = "0.0.61" dependencies = [ "actix-files", "actix-session", diff --git a/Cargo.toml b/Cargo.toml index 476168d..6844b7b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pagetop" -version = "0.0.14" +version = "0.0.61" edition = "2021" description = """\ diff --git a/README.md b/README.md index 6b4aff0..2619cb6 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,25 @@

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

[![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-license) +[![Doc API](https://img.shields.io/docsrs/pagetop?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop) +[![Crates.io](https://img.shields.io/crates/v/pagetop.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop) +[![Descargas](https://img.shields.io/crates/d/pagetop.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop) `PageTop` reivindica la esencia de la web cl谩sica usando [Rust](https://www.rust-lang.org/es) 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 @@ -27,6 +41,55 @@ async fn main() -> std::io::Result<()> { } ``` +S贸lo con esto, este c贸digo sirve por defecto una p谩gina web de bienvenida accesible desde un +navegador en la direcci贸n `http://localhost:8080` con la configuraci贸n predeterminada. + +Para personalizar el servicio, se puede crear una extensi贸n de `PageTop` de la siguiente manera: + +```rust +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 { + Page::new(Some(request)) + .with_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 `

`. + + +# 馃搨 Repositorio + +El c贸digo se organiza en un *workspace* donde actualmente se incluyen los siguientes subproyectos: + + * **[pagetop](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/src)**, 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](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/helpers/pagetop-build)**, + permite incluir f谩cilmente archivos est谩ticos o archivos SCSS compilados directamente en el + binario de las aplicaciones `PageTop`. + + * **[pagetop-macros](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/helpers/pagetop-macros)**, + proporciona una colecci贸n de macros que mejoran la experiencia de desarrollo con `PageTop`. + # 馃И Pruebas @@ -37,6 +100,7 @@ Para simplificar el flujo de trabajo, el repositorio incluye varios **alias de C | ------- | ----------- | | `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** diff --git a/examples/hello-name.rs b/examples/hello-name.rs new file mode 100644 index 0000000..7a6db54 --- /dev/null +++ b/examples/hello-name.rs @@ -0,0 +1,24 @@ +use pagetop::prelude::*; + +struct HelloName; + +impl Extension for HelloName { + fn configure_service(&self, scfg: &mut service::web::ServiceConfig) { + scfg.route("/hello/{name}", service::web::get().to(hello_name)); + } +} + +async fn hello_name( + request: HttpRequest, + path: service::web::Path, +) -> ResultPage { + let name = path.into_inner(); + Page::new(Some(request)) + .with_component(Html::with(move |_| html! { h1 { "Hello " (name) "!" } })) + .render() +} + +#[pagetop::main] +async fn main() -> std::io::Result<()> { + Application::prepare(&HelloName).run()?.await +} diff --git a/examples/hello-world.rs b/examples/hello-world.rs new file mode 100644 index 0000000..ba268dc --- /dev/null +++ b/examples/hello-world.rs @@ -0,0 +1,20 @@ +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 { + Page::new(Some(request)) + .with_component(Html::with(move |_| html! { h1 { "Hello World!" } })) + .render() +} + +#[pagetop::main] +async fn main() -> std::io::Result<()> { + Application::prepare(&HelloWorld).run()?.await +}