🚧 Mejora la estructura de las acciones
This commit is contained in:
parent
1a32db1974
commit
a05355c4d1
15 changed files with 192 additions and 180 deletions
|
|
@ -154,7 +154,7 @@ impl MegaMenuItem {
|
|||
|
||||
use_handle!(COMPONENT_MEGAMENU);
|
||||
|
||||
action_before_prepare_component!(ACTION_BEFORE_PREPARE_MENU for MegaMenu);
|
||||
actions_for_component!(MegaMenu);
|
||||
|
||||
#[rustfmt::skip]
|
||||
#[derive(Default)]
|
||||
|
|
@ -189,7 +189,7 @@ impl ComponentTrait for MegaMenu {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_before_prepare_component(self, cx);
|
||||
run_actions_before_prepare_megamenu(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -219,6 +219,10 @@ impl ComponentTrait for MegaMenu {
|
|||
})
|
||||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_after_prepare_megamenu(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use pagetop::prelude::*;
|
|||
|
||||
use_handle!(COMPONENT_CONTAINER);
|
||||
|
||||
action_before_prepare_component!(ACTION_BEFORE_PREPARE_CONTAINER for Container);
|
||||
actions_for_component!(Container);
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum ContainerType {
|
||||
|
|
@ -51,7 +51,7 @@ impl ComponentTrait for Container {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_before_prepare_component(self, cx);
|
||||
run_actions_before_prepare_container(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -92,6 +92,10 @@ impl ComponentTrait for Container {
|
|||
}
|
||||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_after_prepare_container(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use pagetop::prelude::*;
|
|||
|
||||
use_handle!(COMPONENT_FORM);
|
||||
|
||||
action_before_prepare_component!(ACTION_BEFORE_PREPARE_FORM for Form);
|
||||
actions_for_component!(Form);
|
||||
|
||||
#[derive(Default)]
|
||||
pub enum FormMethod {
|
||||
|
|
@ -49,7 +49,7 @@ impl ComponentTrait for Form {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_before_prepare_component(self, cx);
|
||||
run_actions_before_prepare_form(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -70,6 +70,10 @@ impl ComponentTrait for Form {
|
|||
})
|
||||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_after_prepare_form(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use pagetop::prelude::*;
|
|||
|
||||
use_handle!(COMPONENT_COLUMN);
|
||||
|
||||
action_before_prepare_component!(ACTION_BEFORE_PREPARE_COLUMN for Column);
|
||||
actions_for_component!(Column);
|
||||
|
||||
const SIZE__DEFAULT: &str = "col-md";
|
||||
const SIZE__1_OF_12: &str = "col-md-1";
|
||||
|
|
@ -70,7 +70,7 @@ impl ComponentTrait for Column {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_before_prepare_component(self, cx);
|
||||
run_actions_before_prepare_column(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -81,6 +81,10 @@ impl ComponentTrait for Column {
|
|||
})
|
||||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_after_prepare_column(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use crate::component::grid;
|
|||
|
||||
use_handle!(COMPONENT_ROW);
|
||||
|
||||
action_before_prepare_component!(ACTION_BEFORE_PREPARE_ROW for Row);
|
||||
actions_for_component!(Row);
|
||||
|
||||
#[rustfmt::skip]
|
||||
#[derive(Default)]
|
||||
|
|
@ -39,7 +39,7 @@ impl ComponentTrait for Row {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_before_prepare_component(self, cx);
|
||||
run_actions_before_prepare_row(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -50,6 +50,10 @@ impl ComponentTrait for Row {
|
|||
})
|
||||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
run_actions_after_prepare_row(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,142 @@
|
|||
mod before_prepare_component;
|
||||
|
||||
mod after_prepare_component;
|
||||
|
||||
pub mod block;
|
||||
|
||||
pub mod page;
|
||||
|
||||
pub mod block {
|
||||
crate::actions_for_component!(Block);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! actions_for_component {
|
||||
( $Component:ty ) => {
|
||||
$crate::paste! {
|
||||
use $crate::prelude::*;
|
||||
|
||||
pub type [<Action $Component>] = fn(component: &$Component, cx: &mut Context);
|
||||
|
||||
// *************************************************************************************
|
||||
// ACTION BEFORE PREPARE COMPONENT
|
||||
// *************************************************************************************
|
||||
|
||||
$crate::use_handle!([<ACTION_BEFORE_PREPARE_ $Component:upper>] for Action);
|
||||
|
||||
pub struct [<BeforePrepare $Component>] {
|
||||
action: Option<[<Action $Component>]>,
|
||||
weight: isize,
|
||||
}
|
||||
|
||||
impl ActionTrait for [<BeforePrepare $Component>] {
|
||||
fn new() -> Self {
|
||||
[<BeforePrepare $Component>] {
|
||||
action: None,
|
||||
weight: 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn handle(&self) -> Handle {
|
||||
[<ACTION_BEFORE_PREPARE_ $Component:upper>]
|
||||
}
|
||||
|
||||
fn weight(&self) -> isize {
|
||||
self.weight
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyAction {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl [<BeforePrepare $Component>] {
|
||||
#[allow(dead_code)]
|
||||
pub fn with_action(mut self, action: [<Action $Component>]) -> Self {
|
||||
self.action = Some(action);
|
||||
self
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||
self.weight = weight;
|
||||
self
|
||||
}
|
||||
|
||||
pub(crate) fn run(&self, component: &mut $Component, cx: &mut Context) {
|
||||
if let Some(action) = self.action {
|
||||
action(component, cx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn [<run_actions_before_prepare_ $Component:lower>](
|
||||
component: &mut $Component,
|
||||
cx: &mut Context
|
||||
) {
|
||||
run_actions([<ACTION_BEFORE_PREPARE_ $Component:upper>], |action|
|
||||
action_ref::<[<BeforePrepare $Component>]>(&**action)
|
||||
.run(component, cx)
|
||||
);
|
||||
}
|
||||
|
||||
// *************************************************************************************
|
||||
// ACTION AFTER PREPARE COMPONENT
|
||||
// *************************************************************************************
|
||||
|
||||
$crate::use_handle!([<ACTION_AFTER_PREPARE_ $Component:upper>] for Action);
|
||||
|
||||
pub struct [<AfterPrepare $Component>] {
|
||||
action: Option<[<Action $Component>]>,
|
||||
weight: isize,
|
||||
}
|
||||
|
||||
impl ActionTrait for [<AfterPrepare $Component>] {
|
||||
fn new() -> Self {
|
||||
[<AfterPrepare $Component>] {
|
||||
action: None,
|
||||
weight: 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn handle(&self) -> Handle {
|
||||
[<ACTION_AFTER_PREPARE_ $Component:upper>]
|
||||
}
|
||||
|
||||
fn weight(&self) -> isize {
|
||||
self.weight
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyAction {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl [<AfterPrepare $Component>] {
|
||||
#[allow(dead_code)]
|
||||
pub fn with_action(mut self, action: [<Action $Component>]) -> Self {
|
||||
self.action = Some(action);
|
||||
self
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||
self.weight = weight;
|
||||
self
|
||||
}
|
||||
|
||||
pub(crate) fn run(&self, component: &mut $Component, cx: &mut Context) {
|
||||
if let Some(action) = self.action {
|
||||
action(component, cx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn [<run_actions_after_prepare_ $Component:lower>](
|
||||
component: &mut $Component,
|
||||
cx: &mut Context
|
||||
) {
|
||||
run_actions([<ACTION_AFTER_PREPARE_ $Component:upper>], |action|
|
||||
action_ref::<[<AfterPrepare $Component>]>(&**action)
|
||||
.run(component, cx)
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,67 +0,0 @@
|
|||
#[macro_export]
|
||||
macro_rules! action_after_prepare_component {
|
||||
( $ACTION_HANDLE:ident for $Component:ty ) => {
|
||||
$crate::paste! {
|
||||
$crate::use_handle!($ACTION_HANDLE);
|
||||
|
||||
pub type ActionAfter = fn(component: &$Component, cx: &mut Context);
|
||||
|
||||
pub struct [<AfterPrepare $Component>] {
|
||||
action: Option<ActionAfter>,
|
||||
weight: isize,
|
||||
}
|
||||
|
||||
impl ActionTrait for [<AfterPrepare $Component>] {
|
||||
fn new() -> Self {
|
||||
[<AfterPrepare $Component>] {
|
||||
action: None,
|
||||
weight: 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn handle(&self) -> Handle {
|
||||
$ACTION_HANDLE
|
||||
}
|
||||
|
||||
fn weight(&self) -> isize {
|
||||
self.weight
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyAction {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl [<AfterPrepare $Component>] {
|
||||
#[allow(dead_code)]
|
||||
pub fn with_action(mut self, action: ActionAfter) -> Self {
|
||||
self.action = Some(action);
|
||||
self
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||
self.weight = weight;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn run(&self, component: &mut $Component, cx: &mut Context) {
|
||||
if let Some(action) = self.action {
|
||||
action(component, cx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn run_actions_after_prepare_component(
|
||||
component: &mut $Component,
|
||||
cx: &mut Context
|
||||
) {
|
||||
run_actions($ACTION_HANDLE, |action|
|
||||
action_ref::<[<AfterPrepare $Component>]>(&**action)
|
||||
.run(component, cx)
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
#[macro_export]
|
||||
macro_rules! action_before_prepare_component {
|
||||
( $ACTION_HANDLE:ident for $Component:ty ) => {
|
||||
$crate::paste! {
|
||||
$crate::use_handle!($ACTION_HANDLE);
|
||||
|
||||
pub type ActionBefore = fn(component: &$Component, cx: &mut Context);
|
||||
|
||||
pub struct [<BeforePrepare $Component>] {
|
||||
action: Option<ActionBefore>,
|
||||
weight: isize,
|
||||
}
|
||||
|
||||
impl ActionTrait for [<BeforePrepare $Component>] {
|
||||
fn new() -> Self {
|
||||
[<BeforePrepare $Component>] {
|
||||
action: None,
|
||||
weight: 0,
|
||||
}
|
||||
}
|
||||
|
||||
fn handle(&self) -> Handle {
|
||||
$ACTION_HANDLE
|
||||
}
|
||||
|
||||
fn weight(&self) -> isize {
|
||||
self.weight
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyAction {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl [<BeforePrepare $Component>] {
|
||||
#[allow(dead_code)]
|
||||
pub fn with_action(mut self, action: ActionBefore) -> Self {
|
||||
self.action = Some(action);
|
||||
self
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||
self.weight = weight;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn run(&self, component: &mut $Component, cx: &mut Context) {
|
||||
if let Some(action) = self.action {
|
||||
action(component, cx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn run_actions_before_prepare_component(
|
||||
component: &mut $Component,
|
||||
cx: &mut Context
|
||||
) {
|
||||
run_actions($ACTION_HANDLE, |action|
|
||||
action_ref::<[<BeforePrepare $Component>]>(&**action)
|
||||
.run(component, cx)
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
action_before_prepare_component!(
|
||||
ACTION_BEFORE_PREPARE_BLOCK for Block
|
||||
);
|
||||
action_after_prepare_component!(
|
||||
ACTION_AFTER_PREPARE_BLOCK for Block
|
||||
);
|
||||
|
|
@ -1,13 +1,9 @@
|
|||
use crate::prelude::*;
|
||||
use crate::response::page::Page;
|
||||
|
||||
pub type ActionPage = fn(page: &mut Page);
|
||||
|
||||
mod before_prepare_page;
|
||||
pub use before_prepare_page::{
|
||||
run_actions_before_prepare_page, ActionBeforePreparePage, ACTION_BEFORE_PREPARE_PAGE,
|
||||
};
|
||||
pub use before_prepare_page::*;
|
||||
|
||||
mod before_render_page;
|
||||
pub use before_render_page::{
|
||||
run_actions_before_render_page, ActionBeforeRenderPage, ACTION_BEFORE_RENDER_PAGE,
|
||||
};
|
||||
pub use before_render_page::*;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use crate::prelude::*;
|
|||
|
||||
use super::ActionPage;
|
||||
|
||||
use_handle!(ACTION_BEFORE_PREPARE_PAGE);
|
||||
use_handle!(ACTION_BEFORE_PREPARE_PAGE for Action);
|
||||
|
||||
pub struct ActionBeforePreparePage {
|
||||
action: Option<ActionPage>,
|
||||
|
|
@ -41,7 +41,7 @@ impl ActionBeforePreparePage {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn run(&self, page: &mut Page) {
|
||||
pub(crate) fn run(&self, page: &mut Page) {
|
||||
if let Some(action) = self.action {
|
||||
action(page)
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ impl ActionBeforePreparePage {
|
|||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn run_actions_before_prepare_page(page: &mut Page) {
|
||||
pub(crate) fn run_actions_before_prepare_page(page: &mut Page) {
|
||||
run_actions(ACTION_BEFORE_PREPARE_PAGE, |action| {
|
||||
action_ref::<ActionBeforePreparePage>(&**action).run(page)
|
||||
});
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ use crate::prelude::*;
|
|||
|
||||
use super::ActionPage;
|
||||
|
||||
use_handle!(ACTION_BEFORE_RENDER_PAGE);
|
||||
use_handle!(ACTION_BEFORE_RENDER_PAGE for Action);
|
||||
|
||||
pub struct ActionBeforeRenderPage {
|
||||
action: Option<ActionPage>,
|
||||
|
|
@ -41,7 +41,7 @@ impl ActionBeforeRenderPage {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn run(&self, page: &mut Page) {
|
||||
pub(crate) fn run(&self, page: &mut Page) {
|
||||
if let Some(action) = self.action {
|
||||
action(page)
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ impl ActionBeforeRenderPage {
|
|||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn run_actions_before_render_page(page: &mut Page) {
|
||||
pub(crate) fn run_actions_before_render_page(page: &mut Page) {
|
||||
run_actions(ACTION_BEFORE_RENDER_PAGE, |action| {
|
||||
action_ref::<ActionBeforeRenderPage>(&**action).run(page)
|
||||
});
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ impl ComponentTrait for Block {
|
|||
}
|
||||
|
||||
fn before_prepare_component(&mut self, cx: &mut Context) {
|
||||
actions::block::run_actions_before_prepare_component(self, cx);
|
||||
actions::block::run_actions_before_prepare_block(self, cx);
|
||||
}
|
||||
|
||||
fn prepare_component(&self, cx: &mut Context) -> PrepareMarkup {
|
||||
|
|
@ -54,7 +54,7 @@ impl ComponentTrait for Block {
|
|||
}
|
||||
|
||||
fn after_prepare_component(&mut self, cx: &mut Context) {
|
||||
actions::block::run_actions_after_prepare_component(self, cx);
|
||||
actions::block::run_actions_after_prepare_block(self, cx);
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ pub use crate::{
|
|||
|
||||
// Funciones y macros útiles.
|
||||
pub use crate::util;
|
||||
pub use crate::{action, action_after_prepare_component, action_before_prepare_component};
|
||||
pub use crate::{action, actions_for_component};
|
||||
pub use crate::{default_settings, kv, serve_static_files, use_handle, use_locale, use_static};
|
||||
|
||||
// *************************************************************************************************
|
||||
|
|
|
|||
|
|
@ -82,12 +82,15 @@ macro_rules! kv {
|
|||
|
||||
#[macro_export]
|
||||
macro_rules! use_handle {
|
||||
( $($HANDLE:ident),* $(,)? ) => {
|
||||
$(
|
||||
/// Public constant handle to represent a unique PageTop building element.
|
||||
pub const $HANDLE: $crate::Handle =
|
||||
$crate::util::handle(module_path!(), file!(), line!(), column!());
|
||||
)*
|
||||
( $HANDLE:ident ) => {
|
||||
/// Public constant handle to represent a unique PageTop building element.
|
||||
pub const $HANDLE: $crate::Handle =
|
||||
$crate::util::handle(module_path!(), file!(), line!(), column!());
|
||||
};
|
||||
( $HANDLE:ident for Action ) => {
|
||||
/// Constant handle to represent a unique PageTop action.
|
||||
pub(crate) const $HANDLE: $crate::Handle =
|
||||
$crate::util::handle(module_path!(), file!(), line!(), column!());
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue