127 lines
4.9 KiB
Markdown
127 lines
4.9 KiB
Markdown
<div align="center">
|
|
|
|
<img src="https://raw.githubusercontent.com/manuelcillero/pagetop/main/static/banner.png" />
|
|
|
|
<h1>PageTop</h1>
|
|
|
|
<p>An opinionated web framework to build modular <em>Server-Side Rendering</em> web solutions.</p>
|
|
|
|
[](#-license)
|
|
[](https://docs.rs/pagetop)
|
|
[](https://crates.io/crates/pagetop)
|
|
[](https://crates.io/crates/pagetop)
|
|
|
|
</div>
|
|
|
|
## Overview
|
|
|
|
The PageTop core API provides a comprehensive toolkit for extending its functionalities to specific
|
|
requirements and application scenarios through actions, components, packages, and themes:
|
|
|
|
* **Actions** serve as a mechanism to customize PageTop's internal behavior by intercepting its
|
|
execution flow.
|
|
* **Components** encapsulate HTML, CSS, and JavaScript into functional, configurable, and
|
|
well-defined units.
|
|
* **Packages** extend or customize existing functionality by interacting with PageTop APIs or
|
|
third-party package APIs.
|
|
* **Themes** enable developers to alter the appearance of pages and components without affecting
|
|
their functionality.
|
|
|
|
|
|
# ⚡️ Quick start
|
|
|
|
```rust
|
|
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
|
|
}
|
|
```
|
|
|
|
This program features a `HelloWorld` package, providing a service that serves a greeting web page
|
|
accessible via `http://localhost:8088` under default settings.
|
|
|
|
|
|
# 📂 Repository Structure
|
|
|
|
This repository is organized into a workspace that includes several subprojects, each serving a
|
|
distinct role within the PageTop ecosystem:
|
|
|
|
## Application
|
|
|
|
* [drust](https://github.com/manuelcillero/pagetop/tree/latest/drust):
|
|
A simple Content Management System (CMS) built on PageTop, which enables the creation, editing,
|
|
and maintenance of dynamic, fast, and modular websites. It uses the following essential packages
|
|
to provide standard CMS functionalities.
|
|
|
|
## Helpers
|
|
|
|
* [pagetop-macros](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-macros):
|
|
A collection of procedural macros that enhance the development experience within PageTop.
|
|
|
|
* [pagetop-build](https://github.com/manuelcillero/pagetop/tree/latest/helpers/pagetop-build):
|
|
Simplifies the process of embedding resources directly into binary files for PageTop applications.
|
|
|
|
## Packages
|
|
|
|
* [pagetop-user](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-user):
|
|
Facilitates user management, including roles, permissions, and session handling, for applications
|
|
built on PageTop.
|
|
|
|
* [pagetop-admin](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-admin):
|
|
Provides a unified interface for administrators to configure and manage package settings.
|
|
|
|
* [pagetop-node](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-node):
|
|
Enables the creation and customization of content types, enhancing website content management.
|
|
|
|
## Themes
|
|
|
|
* [pagetop-bootsier](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-bootsier):
|
|
Utilizes the *[Bootstrap](https://getbootstrap.com/)* framework to offer versatile page layouts
|
|
and component stylings.
|
|
|
|
* [pagetop-bulmix](https://github.com/manuelcillero/pagetop/tree/latest/packages/pagetop-bulmix):
|
|
Utilizes the *[Bulma](https://bulma.io/)* framework for sleek, responsive design elements.
|
|
|
|
|
|
# 🚧 Warning
|
|
|
|
**PageTop** framework is currently in active development. The API is unstable and subject to
|
|
frequent changes. Production use is not recommended until version **0.1.0**.
|
|
|
|
|
|
# 📜 License
|
|
|
|
PageTop is free, open source and permissively licensed! Except where noted (below and/or in
|
|
individual files), all code in this project is dual-licensed under either:
|
|
|
|
* MIT License
|
|
([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT)
|
|
|
|
* Apache License, Version 2.0,
|
|
([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)
|
|
|
|
at your option. This means you can select the license you prefer! This dual-licensing approach is
|
|
the de-facto standard in the Rust ecosystem.
|
|
|
|
|
|
# ✨ Contributions
|
|
|
|
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the
|
|
work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
|
|
additional terms or conditions.
|