Modifica la forma de identificar temas y módulos
Cada módulo y cada tema requerirá a partir de ahora un identificador que debería ser único y con alguna sintaxis particular aún por definir (por ejemplo, admitiendo sólo minúsculas y sin espacios).
This commit is contained in:
parent
3764f707da
commit
83fd12b5cc
16 changed files with 65 additions and 30 deletions
|
|
@ -1,17 +0,0 @@
|
|||
use crate::prelude::*;
|
||||
use crate::base::module::admin::summary::summary;
|
||||
|
||||
pub struct AdminModule;
|
||||
|
||||
impl Module for AdminModule {
|
||||
fn name(&self) -> String {
|
||||
"PageTop Admin".to_string()
|
||||
}
|
||||
|
||||
fn configure_module(&self, cfg: &mut server::web::ServiceConfig) {
|
||||
cfg.service(
|
||||
server::web::scope("/admin")
|
||||
.route("", server::web::get().to(summary))
|
||||
);
|
||||
}
|
||||
}
|
||||
2
src/base/module/admin/locales/en-US/admin.ftl
Normal file
2
src/base/module/admin/locales/en-US/admin.ftl
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
module_name = Admin module
|
||||
module_desc = Administration module.
|
||||
2
src/base/module/admin/locales/es-ES/admin.ftl
Normal file
2
src/base/module/admin/locales/es-ES/admin.ftl
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
module_name = Admin module
|
||||
module_desc = Módulo de administración.
|
||||
|
|
@ -1,4 +1,28 @@
|
|||
mod configure;
|
||||
pub use configure::AdminModule;
|
||||
use crate::prelude::*;
|
||||
|
||||
localize!("en-US", "src/base/module/admin/locales");
|
||||
|
||||
mod summary;
|
||||
|
||||
pub struct AdminModule;
|
||||
|
||||
impl Module for AdminModule {
|
||||
fn id(&self) -> &'static str {
|
||||
"admin"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
l("module_name")
|
||||
}
|
||||
|
||||
fn description(&self) -> String {
|
||||
l("module_desc")
|
||||
}
|
||||
|
||||
fn configure_module(&self, cfg: &mut server::web::ServiceConfig) {
|
||||
cfg.service(
|
||||
server::web::scope("/admin")
|
||||
.route("", server::web::get().to(summary::summary))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ pub async fn summary() -> server::Result<Markup> {
|
|||
|
||||
Page::prepare()
|
||||
|
||||
.using_theme(&bootsier::BootsierTheme)
|
||||
.using_theme("bootsier")
|
||||
|
||||
.with_title("Admin")
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ localize!("en-US", "src/base/module/homepage/locales");
|
|||
pub struct HomepageModule;
|
||||
|
||||
impl Module for HomepageModule {
|
||||
fn id(&self) -> &'static str {
|
||||
"homepage"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
l("module_name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ localize!("en-US", "src/base/module/user/locales");
|
|||
pub struct UserModule;
|
||||
|
||||
impl Module for UserModule {
|
||||
fn id(&self) -> &'static str {
|
||||
"user"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
l("module_name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ include!(concat!(env!("OUT_DIR"), "/aliner.rs"));
|
|||
pub struct AlinerTheme;
|
||||
|
||||
impl Theme for AlinerTheme {
|
||||
fn id(&self) -> &'static str {
|
||||
"aliner"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
"Aliner".to_string()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,10 @@ localize!("en-US", "src/base/theme/bootsier/locales");
|
|||
pub struct BootsierTheme;
|
||||
|
||||
impl Theme for BootsierTheme {
|
||||
fn id(&self) -> &'static str {
|
||||
"bootsier"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
"Bootsier".to_string()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@ use crate::prelude::*;
|
|||
pub struct MinimalTheme;
|
||||
|
||||
impl Theme for MinimalTheme {
|
||||
fn id(&self) -> &'static str {
|
||||
"minimal"
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
"Minimal".to_string()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ use crate::core::server;
|
|||
|
||||
/// Los módulos deben implementar este *trait*.
|
||||
pub trait Module: Send + Sync {
|
||||
fn id(&self) -> &'static str;
|
||||
|
||||
fn name(&self) -> String;
|
||||
|
||||
fn description(&self) -> String {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ pub fn register_module(m: &'static (dyn Module + 'static)) {
|
|||
MODULES.write().unwrap().push(m);
|
||||
}
|
||||
|
||||
pub fn find_module(name: &str) -> Option<&'static (dyn Module + 'static)> {
|
||||
pub fn find_module(id: &str) -> Option<&'static (dyn Module + 'static)> {
|
||||
let modules = MODULES.write().unwrap();
|
||||
match modules.iter().find(|t| t.name() == name) {
|
||||
match modules.iter().find(|t| t.id() == id) {
|
||||
Some(module) => Some(*module),
|
||||
_ => None,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::core::all::DEFAULT_THEME;
|
||||
use crate::core::theme::{Markup, PreEscaped, Theme, html};
|
||||
use crate::core::theme::{Markup, PreEscaped, Theme, find_theme, html};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Favicon.
|
||||
|
|
@ -195,8 +195,8 @@ impl Assets {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn using_theme(&mut self, theme: &'static dyn Theme) -> &mut Self {
|
||||
self.theme = theme;
|
||||
pub fn using_theme(&mut self, theme_id: &str) -> &mut Self {
|
||||
self.theme = find_theme(theme_id).unwrap_or(*DEFAULT_THEME);
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use crate::config::SETTINGS;
|
||||
use crate::core::server;
|
||||
use crate::core::all::COMPONENTS;
|
||||
use crate::core::theme::{DOCTYPE, Markup, Theme, html};
|
||||
use crate::core::theme::{DOCTYPE, Markup, html};
|
||||
use crate::core::response::page::{PageAssets, PageComponent, PageContainer};
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
|
@ -159,8 +159,8 @@ impl<'a> Page<'a> {
|
|||
|
||||
// Page EXTRAS.
|
||||
|
||||
pub fn using_theme(&mut self, theme: &'static dyn Theme) -> &mut Self {
|
||||
self.assets.using_theme(theme);
|
||||
pub fn using_theme(&mut self, theme_id: &str) -> &mut Self {
|
||||
self.assets.using_theme(theme_id);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ use crate::base::component::Chunck;
|
|||
|
||||
/// Los temas deben implementar este "trait".
|
||||
pub trait Theme: Send + Sync {
|
||||
fn id(&self) -> &'static str;
|
||||
|
||||
fn name(&self) -> String;
|
||||
|
||||
fn description(&self) -> String {
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ pub fn register_theme(t: &'static (dyn Theme + 'static)) {
|
|||
THEMES.write().unwrap().push(t);
|
||||
}
|
||||
|
||||
pub fn find_theme(name: &str) -> Option<&'static (dyn Theme + 'static)> {
|
||||
pub fn find_theme(id: &str) -> Option<&'static (dyn Theme + 'static)> {
|
||||
let themes = THEMES.write().unwrap();
|
||||
match themes.iter().find(|t| t.name() == name) {
|
||||
match themes.iter().find(|t| t.id() == id) {
|
||||
Some(theme) => Some(*theme),
|
||||
_ => None,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue