✨ Permite a plantillas cambiar atributos de <body>
This commit is contained in:
parent
d495c05b96
commit
26f1cda831
2 changed files with 30 additions and 15 deletions
|
|
@ -3,7 +3,7 @@ use crate::core::component::{ChildOp, Component, MessageLevel, StatusMessage};
|
||||||
use crate::core::theme::all::DEFAULT_THEME;
|
use crate::core::theme::all::DEFAULT_THEME;
|
||||||
use crate::core::theme::{ChildrenInRegions, DefaultRegion, RegionRef, TemplateRef, ThemeRef};
|
use crate::core::theme::{ChildrenInRegions, DefaultRegion, RegionRef, TemplateRef, ThemeRef};
|
||||||
use crate::html::{Assets, Favicon, JavaScript, StyleSheet};
|
use crate::html::{Assets, Favicon, JavaScript, StyleSheet};
|
||||||
use crate::html::{Markup, RoutePath, html};
|
use crate::html::{Markup, Props, PropsOp, RoutePath, html};
|
||||||
use crate::locale::L10n;
|
use crate::locale::L10n;
|
||||||
use crate::locale::{LangId, LanguageIdentifier, RequestLocale};
|
use crate::locale::{LangId, LanguageIdentifier, RequestLocale};
|
||||||
use crate::web::HttpRequest;
|
use crate::web::HttpRequest;
|
||||||
|
|
@ -137,6 +137,10 @@ pub trait Contextual: LangId {
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
fn with_assets(self, op: AssetsOp) -> Self;
|
fn with_assets(self, op: AssetsOp) -> Self;
|
||||||
|
|
||||||
|
/// Modifica identificador, clases CSS o atributos HTML del elemento `<body>`.
|
||||||
|
#[builder_fn]
|
||||||
|
fn with_body_props(self, op: PropsOp) -> Self;
|
||||||
|
|
||||||
/// Añade un componente o aplica una operación [`ChildOp`] en la región por defecto del
|
/// Añade un componente o aplica una operación [`ChildOp`] en la región por defecto del
|
||||||
/// documento.
|
/// documento.
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
|
|
@ -206,6 +210,9 @@ pub trait Contextual: LangId {
|
||||||
/// Devuelve los scripts JavaScript de los recursos del contexto.
|
/// Devuelve los scripts JavaScript de los recursos del contexto.
|
||||||
fn javascripts(&self) -> &Assets<JavaScript>;
|
fn javascripts(&self) -> &Assets<JavaScript>;
|
||||||
|
|
||||||
|
/// Devuelve identificador, clases CSS y atributos HTML del elemento `<body>`.
|
||||||
|
fn body_props(&self) -> &Props;
|
||||||
|
|
||||||
// **< Contextual HELPERS >*********************************************************************
|
// **< Contextual HELPERS >*********************************************************************
|
||||||
|
|
||||||
/// Elimina un parámetro del contexto. Devuelve `true` si la clave existía y se eliminó.
|
/// Elimina un parámetro del contexto. Devuelve `true` si la clave existía y se eliminó.
|
||||||
|
|
@ -284,6 +291,7 @@ pub struct Context {
|
||||||
favicon : Option<Favicon>, // Favicon, si se ha definido.
|
favicon : Option<Favicon>, // Favicon, si se ha definido.
|
||||||
stylesheets: Assets<StyleSheet>, // Hojas de estilo CSS.
|
stylesheets: Assets<StyleSheet>, // Hojas de estilo CSS.
|
||||||
javascripts: Assets<JavaScript>, // Scripts JavaScript.
|
javascripts: Assets<JavaScript>, // Scripts JavaScript.
|
||||||
|
body_props : Props, // Identificador, clases CSS y atributos del <body>.
|
||||||
regions : ChildrenInRegions, // Regiones de componentes para renderizar.
|
regions : ChildrenInRegions, // Regiones de componentes para renderizar.
|
||||||
params : HashMap<&'static str, (Box<dyn Any>, &'static str)>, // Parámetros en ejecución.
|
params : HashMap<&'static str, (Box<dyn Any>, &'static str)>, // Parámetros en ejecución.
|
||||||
id_counters: RefCell<HashMap<TypeId, usize>>, // RefCell permite mutar desde build_id(&self).
|
id_counters: RefCell<HashMap<TypeId, usize>>, // RefCell permite mutar desde build_id(&self).
|
||||||
|
|
@ -312,6 +320,7 @@ impl Context {
|
||||||
favicon : None,
|
favicon : None,
|
||||||
stylesheets: Assets::<StyleSheet>::new(),
|
stylesheets: Assets::<StyleSheet>::new(),
|
||||||
javascripts: Assets::<JavaScript>::new(),
|
javascripts: Assets::<JavaScript>::new(),
|
||||||
|
body_props : Props::default(),
|
||||||
regions : ChildrenInRegions::default(),
|
regions : ChildrenInRegions::default(),
|
||||||
params : HashMap::default(),
|
params : HashMap::default(),
|
||||||
id_counters: RefCell::new(HashMap::new()),
|
id_counters: RefCell::new(HashMap::new()),
|
||||||
|
|
@ -521,6 +530,12 @@ impl Contextual for Context {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[builder_fn]
|
||||||
|
fn with_body_props(mut self, op: PropsOp) -> Self {
|
||||||
|
self.body_props.alter_prop(op);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
|
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
|
||||||
self.regions
|
self.regions
|
||||||
|
|
@ -570,6 +585,10 @@ impl Contextual for Context {
|
||||||
&self.javascripts
|
&self.javascripts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn body_props(&self) -> &Props {
|
||||||
|
&self.body_props
|
||||||
|
}
|
||||||
|
|
||||||
// **< Contextual HELPERS >*********************************************************************
|
// **< Contextual HELPERS >*********************************************************************
|
||||||
|
|
||||||
fn remove_param(&mut self, key: &'static str) -> bool {
|
fn remove_param(&mut self, key: &'static str) -> bool {
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,6 @@ pub struct Page {
|
||||||
description : Attr<L10n>,
|
description : Attr<L10n>,
|
||||||
metadata : Vec<(&'static str, &'static str)>,
|
metadata : Vec<(&'static str, &'static str)>,
|
||||||
properties : Vec<(&'static str, &'static str)>,
|
properties : Vec<(&'static str, &'static str)>,
|
||||||
body_props : Props,
|
|
||||||
context : Context,
|
context : Context,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -105,7 +104,6 @@ impl Page {
|
||||||
description : Attr::<L10n>::default(),
|
description : Attr::<L10n>::default(),
|
||||||
metadata : Vec::default(),
|
metadata : Vec::default(),
|
||||||
properties : Vec::default(),
|
properties : Vec::default(),
|
||||||
body_props : Props::default(),
|
|
||||||
context : Context::new(Some(request)),
|
context : Context::new(Some(request)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -140,13 +138,6 @@ impl Page {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Modifica identificador, clases CSS o atributos HTML del elemento `<body>`.
|
|
||||||
#[builder_fn]
|
|
||||||
pub fn with_body_props(mut self, op: PropsOp) -> Self {
|
|
||||||
self.body_props.alter_prop(op);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
// **< Page GETTERS >***************************************************************************
|
// **< Page GETTERS >***************************************************************************
|
||||||
|
|
||||||
/// Devuelve el título traducido para el idioma de la página, si existe.
|
/// Devuelve el título traducido para el idioma de la página, si existe.
|
||||||
|
|
@ -169,11 +160,6 @@ impl Page {
|
||||||
&self.properties
|
&self.properties
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Devuelve identificador, clases CSS y atributos HTML del elemento `<body>`.
|
|
||||||
pub fn body_props(&self) -> &Props {
|
|
||||||
&self.body_props
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Devuelve una referencia mutable al [`Context`] de la página.
|
/// Devuelve una referencia mutable al [`Context`] de la página.
|
||||||
///
|
///
|
||||||
/// El [`Context`] actúa como intermediario para muchos métodos de `Page` (idioma, tema,
|
/// El [`Context`] actúa como intermediario para muchos métodos de `Page` (idioma, tema,
|
||||||
|
|
@ -305,6 +291,12 @@ impl Contextual for Page {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[builder_fn]
|
||||||
|
fn with_body_props(mut self, op: PropsOp) -> Self {
|
||||||
|
self.context.alter_body_props(op);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
#[builder_fn]
|
#[builder_fn]
|
||||||
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
|
fn with_child(mut self, op: impl Into<ChildOp>) -> Self {
|
||||||
self.context
|
self.context
|
||||||
|
|
@ -348,6 +340,10 @@ impl Contextual for Page {
|
||||||
self.context.javascripts()
|
self.context.javascripts()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn body_props(&self) -> &Props {
|
||||||
|
self.context.body_props()
|
||||||
|
}
|
||||||
|
|
||||||
// **< Contextual HELPERS >*********************************************************************
|
// **< Contextual HELPERS >*********************************************************************
|
||||||
|
|
||||||
fn remove_param(&mut self, key: &'static str) -> bool {
|
fn remove_param(&mut self, key: &'static str) -> bool {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue