📝 Cambia el formato para la documentación #4

Merged
manuelcillero merged 1 commit from documentation into main 2025-08-10 01:10:06 +02:00
8 changed files with 404 additions and 256 deletions
Showing only changes of commit 3789800713 - Show all commits

View file

@ -11,6 +11,7 @@
[![Crates.io](https://img.shields.io/crates/v/pagetop.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/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) [![Descargas](https://img.shields.io/crates/d/pagetop.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop)
<br>
</div> </div>
`PageTop` reivindica la esencia de la web clásica usando [Rust](https://www.rust-lang.org/es) para `PageTop` reivindica la esencia de la web clásica usando [Rust](https://www.rust-lang.org/es) para
@ -32,7 +33,7 @@ según las necesidades de cada proyecto, incluyendo:
La aplicación más sencilla de `PageTop` se ve así: La aplicación más sencilla de `PageTop` se ve así:
```rust ```rust,no_run
use pagetop::prelude::*; use pagetop::prelude::*;
#[pagetop::main] #[pagetop::main]
@ -46,7 +47,7 @@ de bienvenida accesible desde un navegador local en la dirección `http://localh
Para personalizar el servicio, se puede crear una extensión de `PageTop` de la siguiente manera: Para personalizar el servicio, se puede crear una extensión de `PageTop` de la siguiente manera:
```rust ```rust,no_run
use pagetop::prelude::*; use pagetop::prelude::*;
struct HelloWorld; struct HelloWorld;
@ -83,9 +84,14 @@ El código se organiza en un *workspace* donde actualmente se incluyen los sigui
## Auxiliares ## Auxiliares
* **[pagetop-statics](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/helpers/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](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/helpers/pagetop-build)**, * **[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 prepara los archivos estáticos o archivos SCSS compilados para incluirlos en el binario de las
binario de las aplicaciones `PageTop`. aplicaciones `PageTop` durante la compilación de los ejecutables.
* **[pagetop-macros](https://git.cillero.es/manuelcillero/pagetop/src/branch/main/helpers/pagetop-macros)**, * **[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`. proporciona una colección de macros que mejoran la experiencia de desarrollo con `PageTop`.

View file

@ -18,6 +18,107 @@ clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares
configurables, basadas en HTML, CSS y JavaScript. configurables, basadas en HTML, CSS y JavaScript.
# ⚡️ Guía rápida
Añadir en el archivo `Cargo.toml` del proyecto:
```toml
[build-dependencies]
pagetop-build = { ... }
```
Y crear un archivo `build.rs` a la altura de `Cargo.toml` para indicar cómo se van a incluir los
archivos estáticos o cómo se van a compilar los archivos SCSS para el proyecto. Casos de uso:
## Incluir archivos estáticos desde un directorio
Hay que preparar una carpeta en el proyecto con todos los archivos que se quieren incluir, por
ejemplo `static`, y añadir el siguiente código en `build.rs` para crear el conjunto de recursos:
```rust,no_run
use pagetop_build::StaticFilesBundle;
fn main() -> std::io::Result<()> {
StaticFilesBundle::from_dir("./static", None)
.with_name("guides")
.build()
}
```
Si es necesario, se puede añadir un filtro para seleccionar archivos específicos de la carpeta, por
ejemplo:
```rust,no_run
use pagetop_build::StaticFilesBundle;
use std::path::Path;
fn main() -> std::io::Result<()> {
fn only_pdf_files(path: &Path) -> bool {
// Selecciona únicamente los archivos con extensión `.pdf`.
path.extension().map_or(false, |ext| ext == "pdf")
}
StaticFilesBundle::from_dir("./static", Some(only_pdf_files))
.with_name("guides")
.build()
}
```
## Compilar archivos SCSS a CSS
Se puede compilar un archivo SCSS, que podría importar otros a su vez, para preparar un recurso con
el archivo CSS minificado obtenido. Por ejemplo:
```rust,no_run
use pagetop_build::StaticFilesBundle;
fn main() -> std::io::Result<()> {
StaticFilesBundle::from_scss("./styles/main.scss", "styles.min.css")
.with_name("main_styles")
.build()
}
```
Este código compila el archivo `main.scss` de la carpeta `static` del proyecto, y prepara un recurso
llamado `main_styles` que contiene el archivo `styles.min.css` obtenido.
# 📦 Módulos generados
Cada conjunto de recursos [`StaticFilesBundle`] genera un archivo en el directorio estándar
[OUT_DIR](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts)
donde se incluyen los recursos necesarios para compilar el proyecto. Por ejemplo, para
`with_name("guides")` se crea un archivo llamado `guides.rs`.
No hay ningún problema en generar más de un conjunto de recursos para cada proyecto.
Normalmente no habrá que acceder a estos módulos; bastará con incluirlos en el proyecto con
[`include_files!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files.html), y luego con
[`include_files_service!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files_service.html)
configurar un servicio web para servir los recursos desde la ruta indicada:
```rust,ignore
use pagetop::prelude::*;
include_files!(guides);
pub struct MyExtension;
impl Extension for MyExtension {
// Servicio web que publica los recursos de `guides` en `/ruta/a/guides`.
fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
include_files_service!(scfg, guides => "/ruta/a/guides");
}
}
```
También se puede asignar el conjunto de recursos a una variable global; p.ej. `GUIDES`:
```rust,ignore
include_files!(GUIDES => guides);
```
# 🚧 Advertencia # 🚧 Advertencia
`PageTop` es un proyecto personal para aprender [Rust](https://www.rust-lang.org/es) y conocer su `PageTop` es un proyecto personal para aprender [Rust](https://www.rust-lang.org/es) y conocer su

View file

@ -1,122 +1,124 @@
//! <div align="center"> /*!
//! <div align="center">
//! <h1>PageTop Build</h1>
//! <h1>PageTop Build</h1>
//! <p>Prepara un conjunto de archivos estáticos o archivos SCSS compilados para ser incluidos en el binario de un proyecto <strong>PageTop</strong>.</p>
//! <p>Prepara un conjunto de archivos estáticos o archivos SCSS compilados para ser incluidos en el binario de un proyecto <strong>PageTop</strong>.</p>
//! [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Doc API](https://img.shields.io/docsrs/pagetop-build?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop-build) [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Crates.io](https://img.shields.io/crates/v/pagetop-build.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop-build) [![Doc API](https://img.shields.io/docsrs/pagetop-build?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop-build)
//! [![Descargas](https://img.shields.io/crates/d/pagetop-build.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop-build) [![Crates.io](https://img.shields.io/crates/v/pagetop-build.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop-build)
//! [![Descargas](https://img.shields.io/crates/d/pagetop-build.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop-build)
//! </div>
//! </div>
//! ## Sobre PageTop
//! ## Sobre PageTop
//! [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la
//! web clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
//! y configurables, basadas en HTML, CSS y JavaScript. clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
//! configurables, basadas en HTML, CSS y JavaScript.
//!
//! # ⚡️ Guía rápida
//! # Guía rápida
//! Añadir en el archivo `Cargo.toml` del proyecto:
//! Añadir en el archivo `Cargo.toml` del proyecto:
//! ```toml
//! [build-dependencies] ```toml
//! pagetop-build = { ... } [build-dependencies]
//! ``` pagetop-build = { ... }
//! ```
//! Y crear un archivo `build.rs` a la altura de `Cargo.toml` para indicar cómo se van a incluir los
//! archivos estáticos o cómo se van a compilar los archivos SCSS para el proyecto. Casos de uso: Y crear un archivo `build.rs` a la altura de `Cargo.toml` para indicar cómo se van a incluir los
//! archivos estáticos o cómo se van a compilar los archivos SCSS para el proyecto. Casos de uso:
//! ## Incluir archivos estáticos desde un directorio
//! ## Incluir archivos estáticos desde un directorio
//! Hay que preparar una carpeta en el proyecto con todos los archivos que se quieren incluir, por
//! ejemplo `static`, y añadir el siguiente código en `build.rs` para crear el conjunto de recursos: Hay que preparar una carpeta en el proyecto con todos los archivos que se quieren incluir, por
//! ejemplo `static`, y añadir el siguiente código en `build.rs` para crear el conjunto de recursos:
//! ```rust,no_run
//! use pagetop_build::StaticFilesBundle; ```rust,no_run
//! use pagetop_build::StaticFilesBundle;
//! fn main() -> std::io::Result<()> {
//! StaticFilesBundle::from_dir("./static", None) fn main() -> std::io::Result<()> {
//! .with_name("guides") StaticFilesBundle::from_dir("./static", None)
//! .build() .with_name("guides")
//! } .build()
//! ``` }
//! ```
//! Si es necesario, se puede añadir un filtro para seleccionar archivos específicos de la carpeta,
//! por ejemplo: Si es necesario, se puede añadir un filtro para seleccionar archivos específicos de la carpeta, por
//! ejemplo:
//! ```rust,no_run
//! use pagetop_build::StaticFilesBundle; ```rust,no_run
//! use std::path::Path; use pagetop_build::StaticFilesBundle;
//! use std::path::Path;
//! fn main() -> std::io::Result<()> {
//! fn only_pdf_files(path: &Path) -> bool { fn main() -> std::io::Result<()> {
//! // Selecciona únicamente los archivos con extensión `.pdf`. fn only_pdf_files(path: &Path) -> bool {
//! path.extension().map_or(false, |ext| ext == "pdf") // Selecciona únicamente los archivos con extensión `.pdf`.
//! } path.extension().map_or(false, |ext| ext == "pdf")
//! }
//! StaticFilesBundle::from_dir("./static", Some(only_pdf_files))
//! .with_name("guides") StaticFilesBundle::from_dir("./static", Some(only_pdf_files))
//! .build() .with_name("guides")
//! } .build()
//! ``` }
//! ```
//! ## Compilar archivos SCSS a CSS
//! ## Compilar archivos SCSS a CSS
//! Se puede compilar un archivo SCSS, que podría importar otros a su vez, para preparar un recurso
//! con el archivo CSS minificado obtenido. Por ejemplo: Se puede compilar un archivo SCSS, que podría importar otros a su vez, para preparar un recurso con
//! el archivo CSS minificado obtenido. Por ejemplo:
//! ```rust,no_run
//! use pagetop_build::StaticFilesBundle; ```rust,no_run
//! use pagetop_build::StaticFilesBundle;
//! fn main() -> std::io::Result<()> {
//! StaticFilesBundle::from_scss("./styles/main.scss", "styles.min.css") fn main() -> std::io::Result<()> {
//! .with_name("main_styles") StaticFilesBundle::from_scss("./styles/main.scss", "styles.min.css")
//! .build() .with_name("main_styles")
//! } .build()
//! ``` }
//! ```
//! Este código compila el archivo `main.scss` de la carpeta `static` del proyecto, y prepara un
//! recurso llamado `main_styles` que contiene el archivo `styles.min.css` obtenido. Este código compila el archivo `main.scss` de la carpeta `static` del proyecto, y prepara un recurso
//! llamado `main_styles` que contiene el archivo `styles.min.css` obtenido.
//!
//! # 📦 Módulos generados
//! # 📦 Módulos generados
//! Cada conjunto de recursos [`StaticFilesBundle`] genera un archivo en el directorio estándar
//! [OUT_DIR](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts) Cada conjunto de recursos [`StaticFilesBundle`] genera un archivo en el directorio estándar
//! donde se incluyen los recursos necesarios para compilar el proyecto. Por ejemplo, para [OUT_DIR](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts)
//! `with_name("guides")` se crea un archivo llamado `guides.rs`. donde se incluyen los recursos necesarios para compilar el proyecto. Por ejemplo, para
//! `with_name("guides")` se crea un archivo llamado `guides.rs`.
//! No hay ningún problema en generar más de un conjunto de recursos para cada proyecto.
//! No hay ningún problema en generar más de un conjunto de recursos para cada proyecto.
//! Normalmente no habrá que acceder a estos módulos; bastará con incluirlos en el proyecto con
//! [`include_files!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files.html), y luego con Normalmente no habrá que acceder a estos módulos; bastará con incluirlos en el proyecto con
//! [`include_files_service!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files_service.html) [`include_files!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files.html), y luego con
//! configurar un servicio web para servir los recursos desde la ruta indicada: [`include_files_service!`](https://docs.rs/pagetop/latest/pagetop/macro.include_files_service.html)
//! configurar un servicio web para servir los recursos desde la ruta indicada:
//! ```rust,ignore
//! use pagetop::prelude::*; ```rust,ignore
//! use pagetop::prelude::*;
//! include_files!(guides);
//! include_files!(guides);
//! pub struct MyExtension;
//! pub struct MyExtension;
//! impl Extension for MyExtension {
//! // Servicio web que publica los recursos de `guides` en `/ruta/a/guides`. impl Extension for MyExtension {
//! fn configure_service(&self, scfg: &mut service::web::ServiceConfig) { // Servicio web que publica los recursos de `guides` en `/ruta/a/guides`.
//! include_files_service!(scfg, guides => "/ruta/a/guides"); fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
//! } include_files_service!(scfg, guides => "/ruta/a/guides");
//! } }
//! ``` }
//! ```
//! También se puede asignar el conjunto de recursos a una variable global; p.ej. `GUIDES`:
//! También se puede asignar el conjunto de recursos a una variable global; p.ej. `GUIDES`:
//! ```rust,ignore
//! include_files!(GUIDES => guides); ```rust,ignore
//! ``` include_files!(GUIDES => guides);
```
*/
#![doc( #![doc(
html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico" html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico"

View file

@ -11,9 +11,16 @@
</div> </div>
## Descripción general ## Sobre PageTop
Entre sus macros se incluye una adaptación de [maud-macros](https://crates.io/crates/maud_macros) [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
## Créditos
Esta librería incluye entre sus macros una adaptación de
[maud-macros](https://crates.io/crates/maud_macros)
([0.27.0](https://github.com/lambda-fairy/maud/tree/v0.27.0/maud_macros)) de ([0.27.0](https://github.com/lambda-fairy/maud/tree/v0.27.0/maud_macros)) de
[Chris Wong](https://crates.io/users/lambda-fairy) y una versión renombrada de [Chris Wong](https://crates.io/users/lambda-fairy) y una versión renombrada de
[SmartDefault](https://crates.io/crates/smart_default) (0.7.1) de [SmartDefault](https://crates.io/crates/smart_default) (0.7.1) de
@ -21,12 +28,6 @@ Entre sus macros se incluye una adaptación de [maud-macros](https://crates.io/c
necesidad de referenciar `maud` o `smart_default` en las dependencias del archivo `Cargo.toml` de necesidad de referenciar `maud` o `smart_default` en las dependencias del archivo `Cargo.toml` de
cada proyecto `PageTop`. cada proyecto `PageTop`.
## Sobre PageTop
[PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
# 🚧 Advertencia # 🚧 Advertencia

View file

@ -1,21 +1,34 @@
//! <div align="center"> /*!
//! <div align="center">
//! <h1>PageTop Macros</h1>
//! <h1>PageTop Macros</h1>
//! <p>Una colección de macros que mejoran la experiencia de desarrollo con <strong>PageTop</strong>.</p>
//! <p>Una colección de macros que mejoran la experiencia de desarrollo con <strong>PageTop</strong>.</p>
//! [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Doc API](https://img.shields.io/docsrs/pagetop-macros?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop-macros) [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Crates.io](https://img.shields.io/crates/v/pagetop-macros.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop-macros) [![Doc API](https://img.shields.io/docsrs/pagetop-macros?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop-macros)
//! [![Descargas](https://img.shields.io/crates/d/pagetop-macros.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop-macros) [![Crates.io](https://img.shields.io/crates/v/pagetop-macros.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop-macros)
//! [![Descargas](https://img.shields.io/crates/d/pagetop-macros.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/pagetop-macros)
//! </div>
//! </div>
//! ## Sobre PageTop
//! ## Sobre PageTop
//! [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la
//! web clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
//! y configurables, basadas en HTML, CSS y JavaScript. clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
## Créditos
Esta librería incluye entre sus macros una adaptación de
[maud-macros](https://crates.io/crates/maud_macros)
([0.27.0](https://github.com/lambda-fairy/maud/tree/v0.27.0/maud_macros)) de
[Chris Wong](https://crates.io/users/lambda-fairy) y una versión renombrada de
[SmartDefault](https://crates.io/crates/smart_default) (0.7.1) de
[Jane Doe](https://crates.io/users/jane-doe), llamada `AutoDefault`. Estas macros eliminan la
necesidad de referenciar `maud` o `smart_default` en las dependencias del archivo `Cargo.toml` de
cada proyecto `PageTop`.
*/
#![doc( #![doc(
html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico" html_favicon_url = "https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/favicon.ico"

View file

@ -8,12 +8,21 @@
</div> </div>
## Sobre PageTop
[PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
## Descripción general ## Descripción general
Permite a `PageTop` incluir archivos estáticos en el ejecutable de la aplicación para servirlos de Esta librería permite incluir archivos estáticos en el ejecutable de las aplicaciones `PageTop` para
forma eficiente vía web, con detección de cambios que optimiza el tiempo de compilación. servirlos de forma eficiente vía web, con detección de cambios que optimizan el tiempo de
compilación.
Para ello, reúne el código de los *crates* [static-files](https://crates.io/crates/static_files) ## Créditos
Para ello, adapta el código de los *crates* [static-files](https://crates.io/crates/static_files)
(versión [0.2.5](https://github.com/static-files-rs/static-files/tree/v0.2.5)) y (versión [0.2.5](https://github.com/static-files-rs/static-files/tree/v0.2.5)) y
[actix-web-static-files](https://crates.io/crates/actix_web_static_files) (versión [actix-web-static-files](https://crates.io/crates/actix_web_static_files) (versión
[4.0.1](https://github.com/kilork/actix-web-static-files/tree/v4.0.1)), desarrollados ambos por [4.0.1](https://github.com/kilork/actix-web-static-files/tree/v4.0.1)), desarrollados ambos por
@ -22,12 +31,6 @@ Para ello, reúne el código de los *crates* [static-files](https://crates.io/cr
Estas implementaciones se integran en `PageTop` para evitar que cada proyecto tenga que declarar Estas implementaciones se integran en `PageTop` para evitar que cada proyecto tenga que declarar
`static-files` manualmente como dependencia en su `Cargo.toml`. `static-files` manualmente como dependencia en su `Cargo.toml`.
## Sobre PageTop
[PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
# 🚧 Advertencia # 🚧 Advertencia

View file

@ -1,18 +1,37 @@
//! <div align="center"> /*!
//! <div align="center">
//! <h1>PageTop Statics</h1>
//! <h1>PageTop Statics</h1>
//! <p>Librería para automatizar la recopilación de recursos estáticos en <strong>PageTop</strong>.</p>
//! <p>Librería para automatizar la recopilación de recursos estáticos en <strong>PageTop</strong>.</p>
//! [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! </div>
//! </div>
//! ## Sobre PageTop
//! ## Sobre PageTop
//! [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la
//! web clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles [PageTop](https://docs.rs/pagetop) es un entorno de desarrollo que reivindica la esencia de la web
//! y configurables, basadas en HTML, CSS y JavaScript. clásica para crear soluciones web SSR (*renderizadas en el servidor*) modulares, extensibles y
configurables, basadas en HTML, CSS y JavaScript.
## Descripción general
Esta librería permite incluir archivos estáticos en el ejecutable de las aplicaciones `PageTop` para
servirlos de forma eficiente vía web, con detección de cambios que optimizan el tiempo de
compilación.
## Créditos
Para ello, adapta el código de los *crates* [static-files](https://crates.io/crates/static_files)
(versión [0.2.5](https://github.com/static-files-rs/static-files/tree/v0.2.5)) y
[actix-web-static-files](https://crates.io/crates/actix_web_static_files) (versión
[4.0.1](https://github.com/kilork/actix-web-static-files/tree/v4.0.1)), desarrollados ambos por
[Alexander Korolev](https://crates.io/users/kilork).
Estas implementaciones se integran en `PageTop` para evitar que cada proyecto tenga que declarar
`static-files` manualmente como dependencia en su `Cargo.toml`.
*/
#![doc(test(no_crate_inject))] #![doc(test(no_crate_inject))]
#![doc( #![doc(

View file

@ -1,86 +1,89 @@
//! <div align="center"> /*!
//! <div align="center">
//! <img src="https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/banner.png" />
//! <img src="https://git.cillero.es/manuelcillero/pagetop/raw/branch/main/static/banner.png" />
//! <h1>PageTop</h1>
//! <h1>PageTop</h1>
//! <p>Un entorno de desarrollo para crear soluciones web modulares, extensibles y configurables.</p>
//! <p>Un entorno para el desarrollo de soluciones web modulares, extensibles y configurables.</p>
//! [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Doc API](https://img.shields.io/docsrs/pagetop?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop) [![Licencia](https://img.shields.io/badge/license-MIT%2FApache-blue.svg?label=Licencia&style=for-the-badge)](#-licencia)
//! [![Crates.io](https://img.shields.io/crates/v/pagetop.svg?style=for-the-badge&logo=ipfs)](https://crates.io/crates/pagetop) [![Doc API](https://img.shields.io/docsrs/pagetop?label=Doc%20API&style=for-the-badge&logo=Docs.rs)](https://docs.rs/pagetop)
//! [![Descargas](https://img.shields.io/crates/d/pagetop.svg?label=Descargas&style=for-the-badge&logo=transmission)](https://crates.io/crates/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)
//! <br>
//! </div> <br>
//! </div>
//! `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 `PageTop` reivindica la esencia de la web clásica usando [Rust](https://www.rust-lang.org/es) para
//! JavaScript. Ofrece un conjunto de herramientas que los desarrolladores pueden implementar, la creación de soluciones web SSR (*renderizadas en el servidor*) basadas en HTML, CSS y JavaScript.
//! extender o adaptar según las necesidades de cada proyecto, incluyendo: 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. * **Acciones** (*actions*): alteran la lógica interna de una funcionalidad interceptando su flujo
//! * **Componentes** (*components*): encapsulan HTML, CSS y JavaScript en unidades funcionales, de ejecución.
//! configurables y reutilizables. * **Componentes** (*components*): encapsulan HTML, CSS y JavaScript en unidades funcionales,
//! * **Extensiones** (*extensions*): añaden, extienden o personalizan funcionalidades usando las configurables y reutilizables.
//! APIs de `PageTop` o de terceros. * **Extensiones** (*extensions*): añaden, extienden o personalizan funcionalidades usando las APIs
//! * **Temas** (*themes*): son extensiones que permiten modificar la apariencia de páginas y de `PageTop` o de terceros.
//! componentes sin comprometer su funcionalidad. * **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í: # Guía rápida
//!
//! ```rust,no_run La aplicación más sencilla de `PageTop` se ve así:
//! use pagetop::prelude::*;
//! ```rust,no_run
//! #[pagetop::main] use pagetop::prelude::*;
//! async fn main() -> std::io::Result<()> {
//! Application::new().run()?.await #[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](crate::global::SETTINGS), muestra una página de bienvenida accesible
//! desde un navegador local en la dirección `http://localhost:8080`. 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:
//! Para personalizar el servicio, se puede crear una extensión de `PageTop` de la siguiente manera:
//! ```rust,no_run
//! use pagetop::prelude::*; ```rust,no_run
//! use pagetop::prelude::*;
//! struct HelloWorld;
//! struct HelloWorld;
//! impl Extension for HelloWorld {
//! fn configure_service(&self, scfg: &mut service::web::ServiceConfig) { impl Extension for HelloWorld {
//! scfg.route("/", service::web::get().to(hello_world)); 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(Some(request)) async fn hello_world(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
//! .with_component(Html::with(move |_| html! { h1 { "Hello world!" } })) Page::new(Some(request))
//! .render() .with_component(Html::with(move |_| html! { h1 { "Hello World!" } }))
//! } .render()
//! }
//! #[pagetop::main]
//! async fn main() -> std::io::Result<()> { #[pagetop::main]
//! Application::prepare(&HelloWorld).run()?.await 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>`. 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>`.
//! # 🧩 Gestión de Dependencias
//!
//! Los proyectos que utilizan `PageTop` gestionan las dependencias con `cargo`, como cualquier otro # 🧩 Gestión de Dependencias
//! proyecto en Rust.
//! Los proyectos que utilizan `PageTop` gestionan las dependencias con `cargo`, como cualquier otro
//! Sin embargo, es fundamental que cada extensión declare explícitamente sus proyecto en Rust.
//! [dependencias](core::extension::Extension::dependencies), si las tiene, para que `PageTop` pueda
//! estructurar e inicializar la aplicación de forma modular. Sin embargo, es fundamental que cada extensión declare explícitamente sus
[dependencias](core::extension::Extension::dependencies), si las tiene, para que `PageTop` pueda
estructurar e inicializar la aplicación de forma modular.
*/
#![cfg_attr(docsrs, feature(doc_cfg))] #![cfg_attr(docsrs, feature(doc_cfg))]
#![doc( #![doc(