🏷️ RenderResources pasa a ser RenderContext

This commit is contained in:
Manuel Cillero 2023-01-03 19:18:12 +01:00
parent a25a7f4dfa
commit a73491de70
29 changed files with 151 additions and 151 deletions

View file

@ -41,7 +41,7 @@ pub async fn summary() -> ResultPage<Markup, FatalError> {
.with_item(MenuItem::label("Opción 4"));
Page::new()
.with_resource(ResourceOp::SetTheme("Bootsier"))
.with_context(ContextOp::SetTheme("Bootsier"))
.with_title("Admin")
.add_to("top-menu", top_menu)
.add_to(

View file

@ -51,12 +51,12 @@ impl ComponentTrait for Anchor {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
#[rustfmt::skip]
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
let target = match &self.target() {
AnchorTarget::Blank => Some("_blank"),
AnchorTarget::Parent => Some("_parent"),
@ -71,9 +71,9 @@ impl ComponentTrait for Anchor {
href=[self.href().get()]
target=[target]
{
(self.left_icon().render(rsx))
(self.left_icon().render(rcx))
span { (*self.html()) }
(self.right_icon().render(rsx))
(self.right_icon().render(rcx))
}
}
}

View file

@ -29,23 +29,23 @@ impl ComponentTrait for Block {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
let id = rsx.required_id::<Block>(self.id());
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
let id = rcx.required_id::<Block>(self.id());
html! {
div id=(id) class=[self.classes().get()] {
@if let Some(title) = self.title().get() {
h2 class="block-title" { (title) }
}
div class="block-body" {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
}

View file

@ -42,47 +42,47 @@ impl ComponentTrait for Container {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
match self.container_type() {
ContainerType::Header => html! {
header id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
},
ContainerType::Footer => html! {
footer id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
},
ContainerType::Main => html! {
main id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
},
ContainerType::Section => html! {
section id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
},
_ => html! {
div id=[self.id().get()] class=[self.classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
},
}

View file

@ -39,11 +39,11 @@ impl ComponentTrait for Button {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
let button_type = match self.button_type() {
ButtonType::Button => "button",
ButtonType::Submit => "submit",

View file

@ -36,11 +36,11 @@ impl ComponentTrait for Date {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
let id = self.name().get().map(|name| concat_string!("edit-", name));
html! {
div class=[self.classes().get()] {

View file

@ -40,15 +40,15 @@ impl ComponentTrait for Form {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
let method = match self.method() {
FormMethod::Post => Some("post".to_owned()),
FormMethod::Get => None,
@ -61,7 +61,7 @@ impl ComponentTrait for Form {
method=[method]
accept-charset=[self.charset().get()]
{
div { (self.elements().render(rsx)) }
div { (self.elements().render(rcx)) }
}
}
}

View file

@ -23,7 +23,7 @@ impl ComponentTrait for Hidden {
self.weight
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
let id = self.name().get().map(|name| concat_string!("value-", name));
html! {
input type="hidden" id=[id] name=[self.name().get()] value=[self.value().get()];

View file

@ -53,12 +53,12 @@ impl ComponentTrait for Input {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
#[rustfmt::skip]
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
let type_input = match self.input_type() {
InputType::Textfield => "text",
InputType::Password => "password",

View file

@ -61,18 +61,18 @@ impl ComponentTrait for Column {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! {
div id=[self.id().get()] class=[self.classes().get()] {
(self.components().render(rsx))
(self.components().render(rcx))
}
}
}

View file

@ -28,18 +28,18 @@ impl ComponentTrait for Row {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! {
div id=[self.id().get()] class=[self.classes().get()] {
(self.columns().render(rsx))
(self.columns().render(rcx))
}
}
}

View file

@ -51,11 +51,11 @@ impl ComponentTrait for Heading {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
let id = self.id().get();
let classes = self.classes().get();
html! { @match &self.heading_type() {

View file

@ -24,11 +24,11 @@ impl ComponentTrait for Html {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
html! { (*self.html()) }
}

View file

@ -24,17 +24,17 @@ impl ComponentTrait for Icon {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
rsx.alter(ResourceOp::AddStyleSheet(
fn before_render(&mut self, rcx: &mut RenderContext) {
rcx.alter(ContextOp::AddStyleSheet(
StyleSheet::located("/theme/icons/bootstrap-icons.css").with_version("1.8.2"),
));
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
html! { i class=[self.classes().get()] {}; }
}

View file

@ -26,11 +26,11 @@ impl ComponentTrait for Image {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, _: &mut RenderResources) -> Markup {
fn default_render(&self, _: &mut RenderContext) -> Markup {
html! {
img
src=[self.source().get()]

View file

@ -37,11 +37,11 @@ impl ComponentTrait for MenuItem {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
match self.item_type() {
MenuItemType::Void => html! {},
@ -63,7 +63,7 @@ impl ComponentTrait for MenuItem {
li class="submenu" {
a href="#" { (label) }
ul {
(menu.items().render(rsx))
(menu.items().render(rcx))
}
}
},
@ -186,31 +186,31 @@ impl ComponentTrait for Menu {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn before_render(&mut self, rsx: &mut RenderResources) {
before_render_inline(self, rsx);
fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rcx);
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
rsx.alter(ResourceOp::AddStyleSheet(
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
rcx.alter(ContextOp::AddStyleSheet(
StyleSheet::located("/theme/menu/css/menu.css").with_version("1.1.1"),
))
.alter(ResourceOp::AddStyleSheet(
.alter(ContextOp::AddStyleSheet(
StyleSheet::located("/theme/menu/css/menu-clean.css").with_version("1.1.1"),
))
.alter(ResourceOp::AddJavaScript(
.alter(ContextOp::AddJavaScript(
JavaScript::located("/theme/menu/js/menu.min.js").with_version("1.1.1"),
))
.alter(ResourceOp::AddJQuery);
.alter(ContextOp::AddJQuery);
let id = rsx.required_id::<Menu>(self.id());
let id = rcx.required_id::<Menu>(self.id());
html! {
ul id=(id) class=[self.classes().get()] {
(self.items().render(rsx))
(self.items().render(rcx))
}
script type="text/javascript" defer {
"jQuery(function(){jQuery('#" (id) "').smartmenus({"

View file

@ -38,17 +38,17 @@ impl ComponentTrait for Paragraph {
self.weight
}
fn is_renderable(&self, rsx: &RenderResources) -> bool {
(self.renderable.check)(rsx)
fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rcx)
}
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! {
p
id=[self.id().get()]
class=[self.classes().get()]
{
(self.components().render(rsx))
(self.components().render(rcx))
}
}
}

View file

@ -27,7 +27,7 @@ impl ModuleTrait for DefaultHomePage {
async fn demo() -> ResultPage<Markup, FatalError> {
Page::new()
.with_title(l("page_title").as_str())
.with_resource(ResourceOp::AddStyleSheet(StyleSheet::located(
.with_context(ContextOp::AddStyleSheet(StyleSheet::located(
"/theme/module/homepage/styles.css",
)))
.with_body_classes(ClassesOp::AddFirst, "default-homepage")

View file

@ -17,7 +17,7 @@ impl ThemeTrait for Aliner {
fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico")))
.alter_resource(ResourceOp::AddStyleSheet(
.alter_context(ContextOp::AddStyleSheet(
StyleSheet::located("/aliner/css/styles.css").with_weight(-99),
));
}

View file

@ -19,17 +19,17 @@ impl ThemeTrait for Bootsier {
fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico")))
.alter_resource(ResourceOp::AddStyleSheet(
.alter_context(ContextOp::AddStyleSheet(
StyleSheet::located("/bootsier/css/bootstrap.min.css")
.with_version("5.1.3")
.with_weight(-99),
))
.alter_resource(ResourceOp::AddJavaScript(
.alter_context(ContextOp::AddJavaScript(
JavaScript::located("/bootsier/js/bootstrap.bundle.min.js")
.with_version("5.1.3")
.with_weight(-99),
))
.alter_resource(ResourceOp::AddJQuery);
.alter_context(ContextOp::AddJQuery);
}
fn error_404_not_found(&self) -> Container {

View file

@ -17,19 +17,19 @@ impl ThemeTrait for Bulmix {
fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico")))
.alter_resource(ResourceOp::AddStyleSheet(
.alter_context(ContextOp::AddStyleSheet(
StyleSheet::located("/bulmix/css/bulma.min.css")
.with_version("0.9.4")
.with_weight(-99),
))
.alter_resource(ResourceOp::AddJQuery);
.alter_context(ContextOp::AddJQuery);
}
#[rustfmt::skip]
fn before_render_component(
&self,
component: &mut dyn ComponentTrait,
_rsx: &mut RenderResources,
_rcx: &mut RenderContext,
) {
match component.handle() {
COMPONENT_ANCHOR => {
@ -108,7 +108,7 @@ impl ThemeTrait for Bulmix {
fn render_component(
&self,
component: &dyn ComponentTrait,
_rsx: &mut RenderResources,
_rcx: &mut RenderContext,
) -> Option<Markup> {
match component.handle() {
COMPONENT_ICON => {

View file

@ -1,5 +1,5 @@
mod resources;
pub use resources::{RenderResources, ResourceOp};
mod context;
pub use context::{RenderContext, ContextOp};
mod definition;
pub use definition::{component_mut, component_ref, AnyComponent, BaseComponent, ComponentTrait};

View file

@ -1,4 +1,4 @@
use super::{ComponentTrait, RenderResources};
use super::{ComponentTrait, RenderContext};
use crate::html::{html, Markup};
@ -26,12 +26,12 @@ impl ComponentsBundle {
self.0.clear();
}
pub fn render(&self, rsx: &mut RenderResources) -> Markup {
pub fn render(&self, rcx: &mut RenderContext) -> Markup {
let mut components = self.0.clone();
components.sort_by_key(|c| c.read().unwrap().weight());
html! {
@for c in components.iter() {
(" ")(c.write().unwrap().render(rsx))(" ")
(" ")(c.write().unwrap().render(rcx))(" ")
}
}
}

View file

@ -8,7 +8,7 @@ static DEFAULT_THEME: LazyStatic<ThemeStaticRef> =
None => &base::theme::bootsier::Bootsier,
});
pub enum ResourceOp {
pub enum ContextOp {
SetTheme(&'static str),
AddStyleSheet(StyleSheet),
RemoveStyleSheet(&'static str),
@ -18,7 +18,7 @@ pub enum ResourceOp {
}
#[rustfmt::skip]
pub struct RenderResources {
pub struct RenderContext {
theme : ThemeStaticRef,
stylesheets: Assets<StyleSheet>,
javascripts: Assets<JavaScript>,
@ -26,10 +26,10 @@ pub struct RenderResources {
id_counter : usize,
}
impl Default for RenderResources {
impl Default for RenderContext {
#[rustfmt::skip]
fn default() -> Self {
RenderResources {
RenderContext {
theme : *DEFAULT_THEME,
stylesheets: Assets::<StyleSheet>::new(),
javascripts: Assets::<JavaScript>::new(),
@ -39,29 +39,29 @@ impl Default for RenderResources {
}
}
impl RenderResources {
impl RenderContext {
pub fn new() -> Self {
RenderResources::default()
RenderContext::default()
}
pub fn alter(&mut self, op: ResourceOp) -> &mut Self {
pub fn alter(&mut self, op: ContextOp) -> &mut Self {
match op {
ResourceOp::SetTheme(theme_name) => {
ContextOp::SetTheme(theme_name) => {
self.theme = theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME);
}
ResourceOp::AddStyleSheet(css) => {
ContextOp::AddStyleSheet(css) => {
self.stylesheets.add(css);
}
ResourceOp::RemoveStyleSheet(source) => {
ContextOp::RemoveStyleSheet(source) => {
self.stylesheets.remove(source);
}
ResourceOp::AddJavaScript(js) => {
ContextOp::AddJavaScript(js) => {
self.javascripts.add(js);
}
ResourceOp::RemoveJavaScript(source) => {
ContextOp::RemoveJavaScript(source) => {
self.javascripts.remove(source);
}
ResourceOp::AddJQuery => {
ContextOp::AddJQuery => {
if !self.with_jquery {
self.javascripts.add(
JavaScript::located("/theme/js/jquery.min.js")
@ -76,13 +76,13 @@ impl RenderResources {
self
}
/// Resources GETTERS.
/// Context GETTERS.
pub(crate) fn theme(&mut self) -> ThemeStaticRef {
self.theme
}
/// Resources RENDER.
/// Context RENDER.
pub fn render(&mut self) -> Markup {
html! {
@ -91,7 +91,7 @@ impl RenderResources {
}
}
// Resources EXTRAS.
// Context EXTRAS.
pub fn required_id<T>(&mut self, id: &IdentifierValue) -> String {
match id.get() {

View file

@ -1,4 +1,4 @@
use super::RenderResources;
use super::RenderContext;
use crate::html::{html, Markup};
use crate::util::{single_type_name, Handle};
@ -6,7 +6,7 @@ use crate::util::{single_type_name, Handle};
pub use std::any::Any as AnyComponent;
pub trait BaseComponent {
fn render(&mut self, rsx: &mut RenderResources) -> Markup;
fn render(&mut self, rcx: &mut RenderContext) -> Markup;
}
pub trait ComponentTrait: AnyComponent + BaseComponent + Send + Sync {
@ -29,15 +29,15 @@ pub trait ComponentTrait: AnyComponent + BaseComponent + Send + Sync {
}
#[allow(unused_variables)]
fn is_renderable(&self, rsx: &RenderResources) -> bool {
fn is_renderable(&self, rcx: &RenderContext) -> bool {
true
}
#[allow(unused_variables)]
fn before_render(&mut self, rsx: &mut RenderResources) {}
fn before_render(&mut self, rcx: &mut RenderContext) {}
#[allow(unused_variables)]
fn default_render(&self, rsx: &mut RenderResources) -> Markup {
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! {}
}
@ -47,17 +47,17 @@ pub trait ComponentTrait: AnyComponent + BaseComponent + Send + Sync {
}
impl<C: ComponentTrait> BaseComponent for C {
fn render(&mut self, rsx: &mut RenderResources) -> Markup {
fn render(&mut self, rcx: &mut RenderContext) -> Markup {
// Acciones del componente antes de renderizar.
self.before_render(rsx);
self.before_render(rcx);
// Acciones del tema antes de renderizar el componente.
rsx.theme().before_render_component(self, rsx);
rcx.theme().before_render_component(self, rcx);
match self.is_renderable(rsx) {
true => match rsx.theme().render_component(self, rsx) {
match self.is_renderable(rcx) {
true => match rcx.theme().render_component(self, rcx) {
Some(html) => html,
None => self.default_render(rsx),
None => self.default_render(rcx),
},
false => html! {},
}
@ -78,7 +78,7 @@ macro_rules! hook_before_render_component {
paste::paste! {
$crate::pub_handle!($ACTION_HANDLE);
type Action = fn(&$Component, &mut RenderResources);
type Action = fn(&$Component, &mut RenderContext);
pub struct [< BeforeRender $Component >] {
action: Option<Action>,
@ -119,18 +119,18 @@ macro_rules! hook_before_render_component {
self
}
pub fn run(&self, component: &mut $Component, rsx: &mut RenderResources) {
pub fn run(&self, component: &mut $Component, rcx: &mut RenderContext) {
if let Some(action) = self.action {
action(component, rsx)
action(component, rcx)
}
}
}
#[inline(always)]
fn before_render_inline(component: &mut $Component, rsx: &mut RenderResources) {
fn before_render_inline(component: &mut $Component, rcx: &mut RenderContext) {
run_actions($ACTION_HANDLE, |action|
action_ref::<[< BeforeRender $Component >]>(&**action)
.run(component, rsx)
.run(component, rcx)
);
}
}

View file

@ -1,6 +1,6 @@
use crate::core::component::RenderResources;
use crate::core::component::RenderContext;
pub type IsRenderable = fn(&RenderResources) -> bool;
pub type IsRenderable = fn(&RenderContext) -> bool;
pub struct Renderable {
pub check: IsRenderable,
@ -14,6 +14,6 @@ impl Default for Renderable {
}
}
fn render_always(_: &RenderResources) -> bool {
fn render_always(_: &RenderContext) -> bool {
true
}

View file

@ -1,5 +1,5 @@
use crate::base::component::{Container, Html};
use crate::core::component::{ComponentTrait, RenderResources};
use crate::core::component::{ComponentTrait, RenderContext};
use crate::html::{html, Favicon, Markup};
use crate::response::page::Page;
use crate::util::{single_type_name, Handle};
@ -64,7 +64,7 @@ pub trait ThemeTrait: BaseTheme + Send + Sync {
(f.render())
}
(page.resources().render())
(page.context().render())
}
}
}
@ -96,7 +96,7 @@ pub trait ThemeTrait: BaseTheme + Send + Sync {
fn before_render_component(
&self,
component: &mut dyn ComponentTrait,
rsx: &mut RenderResources,
rcx: &mut RenderContext,
) {
/*
Cómo usarlo:
@ -116,7 +116,7 @@ pub trait ThemeTrait: BaseTheme + Send + Sync {
fn render_component(
&self,
component: &dyn ComponentTrait,
rsx: &mut RenderResources,
rcx: &mut RenderContext,
) -> Option<Markup> {
None
/*

View file

@ -25,7 +25,7 @@ impl fmt::Display for FatalError {
// Error 403.
FatalError::AccessDenied => {
let mut error_page = Page::new();
let error_content = error_page.resources().theme().error_403_access_denied();
let error_content = error_page.context().theme().error_403_access_denied();
if let Ok(page) = error_page
.with_title("Error FORBIDDEN")
.using_template("error")
@ -40,7 +40,7 @@ impl fmt::Display for FatalError {
// Error 404.
FatalError::NotFound => {
let mut error_page = Page::new();
let error_content = error_page.resources().theme().error_404_not_found();
let error_content = error_page.context().theme().error_404_not_found();
if let Ok(page) = error_page
.with_title("Error RESOURCE NOT FOUND")
.using_template("error")

View file

@ -50,7 +50,7 @@ pub struct Page {
metadata : Vec<(&'static str, &'static str)>,
properties : Vec<(&'static str, &'static str)>,
favicon : Option<Favicon>,
resources : RenderResources,
context : RenderContext,
body_classes: Classes,
regions : HashMap<&'static str, ComponentsBundle>,
template : String,
@ -73,7 +73,7 @@ impl Default for Page {
metadata : Vec::new(),
properties : Vec::new(),
favicon : None,
resources : RenderResources::new(),
context : RenderContext::new(),
body_classes: Classes::new().with_value(ClassesOp::SetDefault, "body"),
regions : common_components(),
template : "default".to_owned(),
@ -123,8 +123,8 @@ impl Page {
self
}
pub fn with_resource(mut self, op: ResourceOp) -> Self {
self.alter_resource(op);
pub fn with_context(mut self, op: ContextOp) -> Self {
self.alter_context(op);
self
}
@ -189,8 +189,8 @@ impl Page {
self
}
pub fn alter_resource(&mut self, op: ResourceOp) -> &mut Self {
self.resources.alter(op);
pub fn alter_context(&mut self, op: ContextOp) -> &mut Self {
self.context.alter(op);
self
}
@ -234,8 +234,8 @@ impl Page {
&self.favicon
}
pub fn resources(&mut self) -> &mut RenderResources {
&mut self.resources
pub fn context(&mut self) -> &mut RenderContext {
&mut self.context
}
pub fn body_classes(&self) -> &Classes {
@ -255,13 +255,13 @@ impl Page {
});
// Acciones del tema antes de renderizar la página.
self.resources.theme().before_render_page(self);
self.context.theme().before_render_page(self);
// Primero, renderizar el cuerpo.
let body = self.resources.theme().render_page_body(self);
let body = self.context.theme().render_page_body(self);
// Luego, renderizar la cabecera.
let head = self.resources.theme().render_page_head(self);
let head = self.context.theme().render_page_head(self);
// Finalmente, renderizar la página.
Ok(html! {
@ -275,7 +275,7 @@ impl Page {
pub fn render_region(&mut self, region: &str) -> Option<Markup> {
match self.regions.get_mut(region) {
Some(components) => Some(components.render(&mut self.resources)),
Some(components) => Some(components.render(&mut self.context)),
None => None,
}
}