Modifica identificación de módulos y temas
This commit is contained in:
parent
3366a6acdc
commit
af9afca777
9 changed files with 49 additions and 21 deletions
|
|
@ -1,9 +1,9 @@
|
|||
use pagetop::prelude::*;
|
||||
|
||||
fn bootstrap() {
|
||||
register_module(&pagetop_admin::Admin);
|
||||
register_module(&pagetop_user::User);
|
||||
register_module(&pagetop_node::Node);
|
||||
include_module(&pagetop_admin::Admin);
|
||||
include_module(&pagetop_user::User);
|
||||
include_module(&pagetop_node::Node);
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use crate::html::{Markup, PreEscaped, html};
|
|||
use crate::api::theme::*;
|
||||
|
||||
static DEFAULT_THEME: Lazy<&dyn ThemeTrait> = Lazy::new(|| {
|
||||
match theme_by_name(&SETTINGS.app.theme) {
|
||||
match theme_by_single_name(&SETTINGS.app.theme) {
|
||||
Some(theme) => theme,
|
||||
None => &base::theme::bootsier::Bootsier,
|
||||
}
|
||||
|
|
@ -197,7 +197,7 @@ impl Assets {
|
|||
}
|
||||
|
||||
pub fn using_theme(&mut self, theme_name: &str) -> &mut Self {
|
||||
self.theme = theme_by_name(theme_name).unwrap_or(*DEFAULT_THEME);
|
||||
self.theme = theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME);
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ static MODULES: Lazy<RwLock<Vec<&dyn ModuleTrait>>> = Lazy::new(|| {
|
|||
RwLock::new(Vec::new())
|
||||
});
|
||||
|
||||
pub fn register_module(module: &'static dyn ModuleTrait) {
|
||||
pub fn include_module(module: &'static dyn ModuleTrait) {
|
||||
let mut list: Vec<&dyn ModuleTrait> = Vec::new();
|
||||
add_to(&mut list, module);
|
||||
list.reverse();
|
||||
|
|
@ -20,7 +20,7 @@ pub fn register_module(module: &'static dyn ModuleTrait) {
|
|||
fn add_to(list: &mut Vec<&dyn ModuleTrait>, module: &'static dyn ModuleTrait) {
|
||||
if !MODULES.read().unwrap().iter().any(|m| m.handler() == module.handler()) {
|
||||
if !list.iter().any(|m| m.handler() == module.handler()) {
|
||||
trace::debug!("Register module: \"{}\"", module.name());
|
||||
trace::debug!("Including module \"{}\"", module.single_name());
|
||||
list.push(module);
|
||||
|
||||
let mut dependencies = module.dependencies();
|
||||
|
|
|
|||
|
|
@ -4,18 +4,26 @@ use crate::api::action::ActionItem;
|
|||
#[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))]
|
||||
use crate::db::MigrationItem;
|
||||
|
||||
pub trait BaseModule {
|
||||
fn single_name(&self) -> &'static str;
|
||||
}
|
||||
|
||||
/// Los módulos deben implementar este *trait*.
|
||||
pub trait ModuleTrait: Send + Sync {
|
||||
pub trait ModuleTrait: BaseModule + Send + Sync {
|
||||
fn handler(&self) -> &'static str;
|
||||
|
||||
fn name(&self) -> String {
|
||||
util::single_type_name::<Self>().to_owned()
|
||||
self.single_name().to_owned()
|
||||
}
|
||||
|
||||
fn description(&self) -> Option<String> {
|
||||
None
|
||||
}
|
||||
|
||||
fn dependencies(&self) -> Vec<&'static dyn ModuleTrait> {
|
||||
vec![]
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn configure_service(&self, cfg: &mut app::web::ServiceConfig) {
|
||||
}
|
||||
|
|
@ -29,8 +37,10 @@ pub trait ModuleTrait: Send + Sync {
|
|||
fn migrations(&self) -> Vec<MigrationItem> {
|
||||
vec![]
|
||||
}
|
||||
}
|
||||
|
||||
fn dependencies(&self) -> Vec<&'static dyn ModuleTrait> {
|
||||
vec![]
|
||||
impl<M: ?Sized + ModuleTrait> BaseModule for M {
|
||||
fn single_name(&self) -> &'static str {
|
||||
util::single_type_name::<Self>()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
mod definition;
|
||||
pub use definition::ModuleTrait;
|
||||
pub use definition::{
|
||||
BaseModule,
|
||||
ModuleTrait,
|
||||
};
|
||||
|
||||
pub(crate) mod all;
|
||||
pub use all::register_module;
|
||||
pub use all::{
|
||||
include_module,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,14 +13,14 @@ static THEMES: Lazy<RwLock<Vec<&dyn ThemeTrait>>> = Lazy::new(|| {
|
|||
pub fn register_theme(theme: &'static dyn ThemeTrait) {
|
||||
let mut themes = THEMES.write().unwrap();
|
||||
if !themes.iter().any(|t| t.handler() == theme.handler()) {
|
||||
trace::debug!("Register theme: \"{}\"", theme.name());
|
||||
trace::debug!("Registering theme \"{}\"", theme.single_name());
|
||||
themes.push(theme);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn theme_by_name(name: &str) -> Option<&'static dyn ThemeTrait> {
|
||||
pub fn theme_by_single_name(single_name: &str) -> Option<&'static dyn ThemeTrait> {
|
||||
match THEMES.write().unwrap().iter().find(
|
||||
|t| t.name().to_lowercase() == name.to_lowercase()
|
||||
|t| t.single_name().to_lowercase() == single_name.to_lowercase()
|
||||
) {
|
||||
Some(theme) => Some(*theme),
|
||||
_ => None,
|
||||
|
|
|
|||
|
|
@ -5,12 +5,16 @@ use crate::api::component::{Assets, ComponentTrait, Favicon};
|
|||
use crate::response::page::Page;
|
||||
use crate::base::component::Chunck;
|
||||
|
||||
pub trait BaseTheme {
|
||||
fn single_name(&self) -> &'static str;
|
||||
}
|
||||
|
||||
/// Los temas deben implementar este "trait".
|
||||
pub trait ThemeTrait: Send + Sync {
|
||||
pub trait ThemeTrait: BaseTheme + Send + Sync {
|
||||
fn handler(&self) -> &'static str;
|
||||
|
||||
fn name(&self) -> String {
|
||||
util::single_type_name::<Self>().to_owned()
|
||||
self.single_name().to_owned()
|
||||
}
|
||||
|
||||
fn description(&self) -> Option<String> {
|
||||
|
|
@ -130,3 +134,9 @@ pub trait ThemeTrait: Send + Sync {
|
|||
.render()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ?Sized + ThemeTrait> BaseTheme for T {
|
||||
fn single_name(&self) -> &'static str {
|
||||
util::single_type_name::<Self>()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
mod definition;
|
||||
pub use definition::ThemeTrait;
|
||||
pub use definition::{
|
||||
BaseTheme,
|
||||
ThemeTrait,
|
||||
};
|
||||
|
||||
pub(crate) mod all;
|
||||
pub use all::{
|
||||
register_theme,
|
||||
theme_by_name,
|
||||
theme_by_single_name,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ impl Application {
|
|||
|
||||
// Registra el módulo de presentación de PageTop.
|
||||
// Normalmente se sobrecargará en la función de inicio.
|
||||
module::register_module(&base::module::demopage::Demopage);
|
||||
module::include_module(&base::module::demopage::Demopage);
|
||||
|
||||
// Registra las acciones de todos los módulos.
|
||||
module::all::register_actions();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue