From 83fd12b5cc774aa24c381b78f99a33b92cf12447 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 26 Feb 2022 21:48:39 +0100 Subject: [PATCH] =?UTF-8?q?Modifica=20la=20forma=20de=20identificar=20tema?= =?UTF-8?q?s=20y=20m=C3=B3dulos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- src/base/module/admin/configure.rs | 17 ----------- src/base/module/admin/locales/en-US/admin.ftl | 2 ++ src/base/module/admin/locales/es-ES/admin.ftl | 2 ++ src/base/module/admin/mod.rs | 28 +++++++++++++++++-- src/base/module/admin/summary.rs | 2 +- src/base/module/homepage/mod.rs | 4 +++ src/base/module/user/mod.rs | 4 +++ src/base/theme/aliner/mod.rs | 4 +++ src/base/theme/bootsier/mod.rs | 4 +++ src/base/theme/minimal/mod.rs | 4 +++ src/core/module/api.rs | 2 ++ src/core/module/mod.rs | 4 +-- src/core/response/page/assets.rs | 6 ++-- src/core/response/page/page.rs | 6 ++-- src/core/theme/api.rs | 2 ++ src/core/theme/mod.rs | 4 +-- 16 files changed, 65 insertions(+), 30 deletions(-) delete mode 100644 src/base/module/admin/configure.rs create mode 100644 src/base/module/admin/locales/en-US/admin.ftl create mode 100644 src/base/module/admin/locales/es-ES/admin.ftl diff --git a/src/base/module/admin/configure.rs b/src/base/module/admin/configure.rs deleted file mode 100644 index 1859f016..00000000 --- a/src/base/module/admin/configure.rs +++ /dev/null @@ -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)) - ); - } -} diff --git a/src/base/module/admin/locales/en-US/admin.ftl b/src/base/module/admin/locales/en-US/admin.ftl new file mode 100644 index 00000000..7f37e03b --- /dev/null +++ b/src/base/module/admin/locales/en-US/admin.ftl @@ -0,0 +1,2 @@ +module_name = Admin module +module_desc = Administration module. diff --git a/src/base/module/admin/locales/es-ES/admin.ftl b/src/base/module/admin/locales/es-ES/admin.ftl new file mode 100644 index 00000000..d9211301 --- /dev/null +++ b/src/base/module/admin/locales/es-ES/admin.ftl @@ -0,0 +1,2 @@ +module_name = Admin module +module_desc = Módulo de administración. diff --git a/src/base/module/admin/mod.rs b/src/base/module/admin/mod.rs index 1444391b..7550c381 100644 --- a/src/base/module/admin/mod.rs +++ b/src/base/module/admin/mod.rs @@ -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)) + ); + } +} diff --git a/src/base/module/admin/summary.rs b/src/base/module/admin/summary.rs index a6fe5e5d..2f889e9e 100644 --- a/src/base/module/admin/summary.rs +++ b/src/base/module/admin/summary.rs @@ -33,7 +33,7 @@ pub async fn summary() -> server::Result { Page::prepare() - .using_theme(&bootsier::BootsierTheme) + .using_theme("bootsier") .with_title("Admin") diff --git a/src/base/module/homepage/mod.rs b/src/base/module/homepage/mod.rs index 2e4164d0..a8ed27b7 100644 --- a/src/base/module/homepage/mod.rs +++ b/src/base/module/homepage/mod.rs @@ -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") } diff --git a/src/base/module/user/mod.rs b/src/base/module/user/mod.rs index eea6528c..98ff27fa 100644 --- a/src/base/module/user/mod.rs +++ b/src/base/module/user/mod.rs @@ -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") } diff --git a/src/base/theme/aliner/mod.rs b/src/base/theme/aliner/mod.rs index 68e7d509..6df2fb93 100644 --- a/src/base/theme/aliner/mod.rs +++ b/src/base/theme/aliner/mod.rs @@ -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() } diff --git a/src/base/theme/bootsier/mod.rs b/src/base/theme/bootsier/mod.rs index 2d37cb05..58975335 100644 --- a/src/base/theme/bootsier/mod.rs +++ b/src/base/theme/bootsier/mod.rs @@ -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() } diff --git a/src/base/theme/minimal/mod.rs b/src/base/theme/minimal/mod.rs index 9ea6e87e..970181b7 100644 --- a/src/base/theme/minimal/mod.rs +++ b/src/base/theme/minimal/mod.rs @@ -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() } diff --git a/src/core/module/api.rs b/src/core/module/api.rs index bbbdb5eb..68488b84 100644 --- a/src/core/module/api.rs +++ b/src/core/module/api.rs @@ -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 { diff --git a/src/core/module/mod.rs b/src/core/module/mod.rs index c77e530e..c480df38 100644 --- a/src/core/module/mod.rs +++ b/src/core/module/mod.rs @@ -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, } diff --git a/src/core/response/page/assets.rs b/src/core/response/page/assets.rs index c515bb04..7e1205eb 100644 --- a/src/core/response/page/assets.rs +++ b/src/core/response/page/assets.rs @@ -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 } diff --git a/src/core/response/page/page.rs b/src/core/response/page/page.rs index dea08591..99041edd 100644 --- a/src/core/response/page/page.rs +++ b/src/core/response/page/page.rs @@ -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 } } diff --git a/src/core/theme/api.rs b/src/core/theme/api.rs index 8c0caad1..45f3e6a8 100644 --- a/src/core/theme/api.rs +++ b/src/core/theme/api.rs @@ -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 { diff --git a/src/core/theme/mod.rs b/src/core/theme/mod.rs index b3376d49..973af092 100644 --- a/src/core/theme/mod.rs +++ b/src/core/theme/mod.rs @@ -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, }