🏷️ 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")); .with_item(MenuItem::label("Opción 4"));
Page::new() Page::new()
.with_resource(ResourceOp::SetTheme("Bootsier")) .with_context(ContextOp::SetTheme("Bootsier"))
.with_title("Admin") .with_title("Admin")
.add_to("top-menu", top_menu) .add_to("top-menu", top_menu)
.add_to( .add_to(

View file

@ -51,12 +51,12 @@ impl ComponentTrait for Anchor {
self.weight self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
#[rustfmt::skip] #[rustfmt::skip]
fn default_render(&self, rsx: &mut RenderResources) -> Markup { fn default_render(&self, rcx: &mut RenderContext) -> Markup {
let target = match &self.target() { let target = match &self.target() {
AnchorTarget::Blank => Some("_blank"), AnchorTarget::Blank => Some("_blank"),
AnchorTarget::Parent => Some("_parent"), AnchorTarget::Parent => Some("_parent"),
@ -71,9 +71,9 @@ impl ComponentTrait for Anchor {
href=[self.href().get()] href=[self.href().get()]
target=[target] target=[target]
{ {
(self.left_icon().render(rsx)) (self.left_icon().render(rcx))
span { (*self.html()) } 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 self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn before_render(&mut self, rsx: &mut RenderResources) { fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rsx); before_render_inline(self, rcx);
} }
fn default_render(&self, rsx: &mut RenderResources) -> Markup { fn default_render(&self, rcx: &mut RenderContext) -> Markup {
let id = rsx.required_id::<Block>(self.id()); let id = rcx.required_id::<Block>(self.id());
html! { html! {
div id=(id) class=[self.classes().get()] { div id=(id) class=[self.classes().get()] {
@if let Some(title) = self.title().get() { @if let Some(title) = self.title().get() {
h2 class="block-title" { (title) } h2 class="block-title" { (title) }
} }
div class="block-body" { div class="block-body" {
(self.components().render(rsx)) (self.components().render(rcx))
} }
} }
} }

View file

@ -42,47 +42,47 @@ impl ComponentTrait for Container {
self.weight self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn before_render(&mut self, rsx: &mut RenderResources) { fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rsx); 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() { match self.container_type() {
ContainerType::Header => html! { ContainerType::Header => html! {
header id=[self.id().get()] class=[self.classes().get()] { header id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] { div class=[self.inner_classes().get()] {
(self.components().render(rsx)) (self.components().render(rcx))
} }
} }
}, },
ContainerType::Footer => html! { ContainerType::Footer => html! {
footer id=[self.id().get()] class=[self.classes().get()] { footer id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] { div class=[self.inner_classes().get()] {
(self.components().render(rsx)) (self.components().render(rcx))
} }
} }
}, },
ContainerType::Main => html! { ContainerType::Main => html! {
main id=[self.id().get()] class=[self.classes().get()] { main id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] { div class=[self.inner_classes().get()] {
(self.components().render(rsx)) (self.components().render(rcx))
} }
} }
}, },
ContainerType::Section => html! { ContainerType::Section => html! {
section id=[self.id().get()] class=[self.classes().get()] { section id=[self.id().get()] class=[self.classes().get()] {
div class=[self.inner_classes().get()] { div class=[self.inner_classes().get()] {
(self.components().render(rsx)) (self.components().render(rcx))
} }
} }
}, },
_ => html! { _ => html! {
div id=[self.id().get()] class=[self.classes().get()] { 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 self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (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() { let button_type = match self.button_type() {
ButtonType::Button => "button", ButtonType::Button => "button",
ButtonType::Submit => "submit", ButtonType::Submit => "submit",

View file

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

View file

@ -40,15 +40,15 @@ impl ComponentTrait for Form {
self.weight self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn before_render(&mut self, rsx: &mut RenderResources) { fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rsx); 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() { let method = match self.method() {
FormMethod::Post => Some("post".to_owned()), FormMethod::Post => Some("post".to_owned()),
FormMethod::Get => None, FormMethod::Get => None,
@ -61,7 +61,7 @@ impl ComponentTrait for Form {
method=[method] method=[method]
accept-charset=[self.charset().get()] 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 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)); let id = self.name().get().map(|name| concat_string!("value-", name));
html! { html! {
input type="hidden" id=[id] name=[self.name().get()] value=[self.value().get()]; 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 self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
#[rustfmt::skip] #[rustfmt::skip]
fn default_render(&self, _: &mut RenderResources) -> Markup { fn default_render(&self, _: &mut RenderContext) -> Markup {
let type_input = match self.input_type() { let type_input = match self.input_type() {
InputType::Textfield => "text", InputType::Textfield => "text",
InputType::Password => "password", InputType::Password => "password",

View file

@ -61,18 +61,18 @@ impl ComponentTrait for Column {
self.weight self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn before_render(&mut self, rsx: &mut RenderResources) { fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rsx); before_render_inline(self, rcx);
} }
fn default_render(&self, rsx: &mut RenderResources) -> Markup { fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! { html! {
div id=[self.id().get()] class=[self.classes().get()] { 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 self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn before_render(&mut self, rsx: &mut RenderResources) { fn before_render(&mut self, rcx: &mut RenderContext) {
before_render_inline(self, rsx); before_render_inline(self, rcx);
} }
fn default_render(&self, rsx: &mut RenderResources) -> Markup { fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! { html! {
div id=[self.id().get()] class=[self.classes().get()] { 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 self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn default_render(&self, _: &mut RenderResources) -> Markup { fn default_render(&self, _: &mut RenderContext) -> Markup {
let id = self.id().get(); let id = self.id().get();
let classes = self.classes().get(); let classes = self.classes().get();
html! { @match &self.heading_type() { html! { @match &self.heading_type() {

View file

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

View file

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

View file

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

View file

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

View file

@ -38,17 +38,17 @@ impl ComponentTrait for Paragraph {
self.weight self.weight
} }
fn is_renderable(&self, rsx: &RenderResources) -> bool { fn is_renderable(&self, rcx: &RenderContext) -> bool {
(self.renderable.check)(rsx) (self.renderable.check)(rcx)
} }
fn default_render(&self, rsx: &mut RenderResources) -> Markup { fn default_render(&self, rcx: &mut RenderContext) -> Markup {
html! { html! {
p p
id=[self.id().get()] id=[self.id().get()]
class=[self.classes().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> { async fn demo() -> ResultPage<Markup, FatalError> {
Page::new() Page::new()
.with_title(l("page_title").as_str()) .with_title(l("page_title").as_str())
.with_resource(ResourceOp::AddStyleSheet(StyleSheet::located( .with_context(ContextOp::AddStyleSheet(StyleSheet::located(
"/theme/module/homepage/styles.css", "/theme/module/homepage/styles.css",
))) )))
.with_body_classes(ClassesOp::AddFirst, "default-homepage") .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) { fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico"))) 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), 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) { fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico"))) 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") StyleSheet::located("/bootsier/css/bootstrap.min.css")
.with_version("5.1.3") .with_version("5.1.3")
.with_weight(-99), .with_weight(-99),
)) ))
.alter_resource(ResourceOp::AddJavaScript( .alter_context(ContextOp::AddJavaScript(
JavaScript::located("/bootsier/js/bootstrap.bundle.min.js") JavaScript::located("/bootsier/js/bootstrap.bundle.min.js")
.with_version("5.1.3") .with_version("5.1.3")
.with_weight(-99), .with_weight(-99),
)) ))
.alter_resource(ResourceOp::AddJQuery); .alter_context(ContextOp::AddJQuery);
} }
fn error_404_not_found(&self) -> Container { 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) { fn before_render_page(&self, page: &mut Page) {
page.alter_favicon(Some(Favicon::new().with_icon("/theme/favicon.ico"))) 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") StyleSheet::located("/bulmix/css/bulma.min.css")
.with_version("0.9.4") .with_version("0.9.4")
.with_weight(-99), .with_weight(-99),
)) ))
.alter_resource(ResourceOp::AddJQuery); .alter_context(ContextOp::AddJQuery);
} }
#[rustfmt::skip] #[rustfmt::skip]
fn before_render_component( fn before_render_component(
&self, &self,
component: &mut dyn ComponentTrait, component: &mut dyn ComponentTrait,
_rsx: &mut RenderResources, _rcx: &mut RenderContext,
) { ) {
match component.handle() { match component.handle() {
COMPONENT_ANCHOR => { COMPONENT_ANCHOR => {
@ -108,7 +108,7 @@ impl ThemeTrait for Bulmix {
fn render_component( fn render_component(
&self, &self,
component: &dyn ComponentTrait, component: &dyn ComponentTrait,
_rsx: &mut RenderResources, _rcx: &mut RenderContext,
) -> Option<Markup> { ) -> Option<Markup> {
match component.handle() { match component.handle() {
COMPONENT_ICON => { COMPONENT_ICON => {

View file

@ -1,5 +1,5 @@
mod resources; mod context;
pub use resources::{RenderResources, ResourceOp}; pub use context::{RenderContext, ContextOp};
mod definition; mod definition;
pub use definition::{component_mut, component_ref, AnyComponent, BaseComponent, ComponentTrait}; 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}; use crate::html::{html, Markup};
@ -26,12 +26,12 @@ impl ComponentsBundle {
self.0.clear(); 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(); let mut components = self.0.clone();
components.sort_by_key(|c| c.read().unwrap().weight()); components.sort_by_key(|c| c.read().unwrap().weight());
html! { html! {
@for c in components.iter() { @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, None => &base::theme::bootsier::Bootsier,
}); });
pub enum ResourceOp { pub enum ContextOp {
SetTheme(&'static str), SetTheme(&'static str),
AddStyleSheet(StyleSheet), AddStyleSheet(StyleSheet),
RemoveStyleSheet(&'static str), RemoveStyleSheet(&'static str),
@ -18,7 +18,7 @@ pub enum ResourceOp {
} }
#[rustfmt::skip] #[rustfmt::skip]
pub struct RenderResources { pub struct RenderContext {
theme : ThemeStaticRef, theme : ThemeStaticRef,
stylesheets: Assets<StyleSheet>, stylesheets: Assets<StyleSheet>,
javascripts: Assets<JavaScript>, javascripts: Assets<JavaScript>,
@ -26,10 +26,10 @@ pub struct RenderResources {
id_counter : usize, id_counter : usize,
} }
impl Default for RenderResources { impl Default for RenderContext {
#[rustfmt::skip] #[rustfmt::skip]
fn default() -> Self { fn default() -> Self {
RenderResources { RenderContext {
theme : *DEFAULT_THEME, theme : *DEFAULT_THEME,
stylesheets: Assets::<StyleSheet>::new(), stylesheets: Assets::<StyleSheet>::new(),
javascripts: Assets::<JavaScript>::new(), javascripts: Assets::<JavaScript>::new(),
@ -39,29 +39,29 @@ impl Default for RenderResources {
} }
} }
impl RenderResources { impl RenderContext {
pub fn new() -> Self { 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 { match op {
ResourceOp::SetTheme(theme_name) => { ContextOp::SetTheme(theme_name) => {
self.theme = theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME); self.theme = theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME);
} }
ResourceOp::AddStyleSheet(css) => { ContextOp::AddStyleSheet(css) => {
self.stylesheets.add(css); self.stylesheets.add(css);
} }
ResourceOp::RemoveStyleSheet(source) => { ContextOp::RemoveStyleSheet(source) => {
self.stylesheets.remove(source); self.stylesheets.remove(source);
} }
ResourceOp::AddJavaScript(js) => { ContextOp::AddJavaScript(js) => {
self.javascripts.add(js); self.javascripts.add(js);
} }
ResourceOp::RemoveJavaScript(source) => { ContextOp::RemoveJavaScript(source) => {
self.javascripts.remove(source); self.javascripts.remove(source);
} }
ResourceOp::AddJQuery => { ContextOp::AddJQuery => {
if !self.with_jquery { if !self.with_jquery {
self.javascripts.add( self.javascripts.add(
JavaScript::located("/theme/js/jquery.min.js") JavaScript::located("/theme/js/jquery.min.js")
@ -76,13 +76,13 @@ impl RenderResources {
self self
} }
/// Resources GETTERS. /// Context GETTERS.
pub(crate) fn theme(&mut self) -> ThemeStaticRef { pub(crate) fn theme(&mut self) -> ThemeStaticRef {
self.theme self.theme
} }
/// Resources RENDER. /// Context RENDER.
pub fn render(&mut self) -> Markup { pub fn render(&mut self) -> Markup {
html! { html! {
@ -91,7 +91,7 @@ impl RenderResources {
} }
} }
// Resources EXTRAS. // Context EXTRAS.
pub fn required_id<T>(&mut self, id: &IdentifierValue) -> String { pub fn required_id<T>(&mut self, id: &IdentifierValue) -> String {
match id.get() { match id.get() {

View file

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

View file

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

View file

@ -25,7 +25,7 @@ impl fmt::Display for FatalError {
// Error 403. // Error 403.
FatalError::AccessDenied => { FatalError::AccessDenied => {
let mut error_page = Page::new(); 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 if let Ok(page) = error_page
.with_title("Error FORBIDDEN") .with_title("Error FORBIDDEN")
.using_template("error") .using_template("error")
@ -40,7 +40,7 @@ impl fmt::Display for FatalError {
// Error 404. // Error 404.
FatalError::NotFound => { FatalError::NotFound => {
let mut error_page = Page::new(); 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 if let Ok(page) = error_page
.with_title("Error RESOURCE NOT FOUND") .with_title("Error RESOURCE NOT FOUND")
.using_template("error") .using_template("error")

View file

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