🏗️ Nuevo componente Html para simplificar L10n
This commit is contained in:
parent
a48c575198
commit
52baa4f671
8 changed files with 83 additions and 38 deletions
|
|
@ -1,4 +1,5 @@
|
|||
use super::LOCALE_ADMIN;
|
||||
use crate::LOCALE_ADMIN;
|
||||
|
||||
use pagetop::prelude::*;
|
||||
use pagetop_megamenu::component::{MegaMenu, MegaMenuItem};
|
||||
use pagetop_minimal::component::*;
|
||||
|
|
@ -7,62 +8,62 @@ pub async fn summary(request: server::HttpRequest) -> ResultPage<Markup, FatalEr
|
|||
let top_menu = MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::t("module_name", &LOCALE_ADMIN)))
|
||||
.with_item(MegaMenuItem::link(
|
||||
L10n::text("Opción 2"),
|
||||
L10n::n("Opción 2"),
|
||||
"https://www.google.es",
|
||||
))
|
||||
.with_item(MegaMenuItem::link_blank(
|
||||
L10n::text("Opción 3"),
|
||||
L10n::n("Opción 3"),
|
||||
"https://www.google.es",
|
||||
))
|
||||
.with_item(MegaMenuItem::submenu(
|
||||
L10n::text("Submenú 1"),
|
||||
L10n::n("Submenú 1"),
|
||||
MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 2"))),
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 2"))),
|
||||
))
|
||||
.with_item(MegaMenuItem::separator())
|
||||
.with_item(MegaMenuItem::submenu(
|
||||
L10n::text("Submenú 2"),
|
||||
L10n::n("Submenú 2"),
|
||||
MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 2"))),
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 2"))),
|
||||
))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 4")));
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 4")));
|
||||
|
||||
let side_menu = MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 1")))
|
||||
.with_item(MegaMenuItem::link(
|
||||
L10n::text("Opción 2"),
|
||||
L10n::n("Opción 2"),
|
||||
"https://www.google.es",
|
||||
))
|
||||
.with_item(MegaMenuItem::link_blank(
|
||||
L10n::text("Opción 3"),
|
||||
L10n::n("Opción 3"),
|
||||
"https://www.google.es",
|
||||
))
|
||||
.with_item(MegaMenuItem::submenu(
|
||||
L10n::text("Submenú 1"),
|
||||
L10n::n("Submenú 1"),
|
||||
MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 2"))),
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 2"))),
|
||||
))
|
||||
.with_item(MegaMenuItem::separator())
|
||||
.with_item(MegaMenuItem::submenu(
|
||||
L10n::text("Submenú 2"),
|
||||
L10n::n("Submenú 2"),
|
||||
MegaMenu::new()
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 2"))),
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 1")))
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 2"))),
|
||||
))
|
||||
.with_item(MegaMenuItem::label(L10n::text("Opción 4")));
|
||||
.with_item(MegaMenuItem::label(L10n::n("Opción 4")));
|
||||
|
||||
Page::new(request)
|
||||
.with_context(ContextOp::Theme("Bootsier"))
|
||||
.with_title(L10n::text("Admin"))
|
||||
.with_title(L10n::n("Admin"))
|
||||
.with_in("top-menu", top_menu)
|
||||
.with_in(
|
||||
"content",
|
||||
grid::Row::new()
|
||||
.with_column(grid::Column::new().with_component(side_menu))
|
||||
.with_column(grid::Column::new().with_component(L10n::html(html! {
|
||||
.with_column(grid::Column::new().with_component(Html::with(html! {
|
||||
p { "Columna 2"}
|
||||
}))),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ impl ModuleTrait for Node {
|
|||
}
|
||||
|
||||
async fn node(request: server::HttpRequest) -> ResultPage<Markup, FatalError> {
|
||||
Page::new(request).with_title(L10n::text("Nodo")).render()
|
||||
Page::new(request).with_title(L10n::n("Nodo")).render()
|
||||
}
|
||||
|
||||
fn before_render_page(page: &mut Page) {
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ impl ModuleTrait for User {
|
|||
|
||||
async fn login(request: server::HttpRequest) -> ResultPage<Markup, FatalError> {
|
||||
Page::new(request)
|
||||
.with_title(L10n::text("Identificación del usuario"))
|
||||
.with_title(L10n::n("Identificación del usuario"))
|
||||
.with_in(
|
||||
"content",
|
||||
Container::new()
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
mod html;
|
||||
pub use html::{Html, COMPONENT_HTML};
|
||||
|
||||
mod l10n;
|
||||
pub use l10n::{L10n, COMPONENT_L10N};
|
||||
|
||||
|
|
|
|||
48
pagetop/src/base/component/html.rs
Normal file
48
pagetop/src/base/component/html.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
define_handle!(COMPONENT_HTML);
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Html(Markup);
|
||||
|
||||
impl ComponentTrait for Html {
|
||||
fn new() -> Self {
|
||||
Html::default()
|
||||
}
|
||||
|
||||
fn handle(&self) -> Handle {
|
||||
COMPONENT_HTML
|
||||
}
|
||||
|
||||
fn default_render(&self, _: &mut RenderContext) -> Markup {
|
||||
html! { (self.html()) }
|
||||
}
|
||||
|
||||
fn as_ref_any(&self) -> &dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
|
||||
fn as_mut_any(&mut self) -> &mut dyn AnyComponent {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Html {
|
||||
pub fn with(html: Markup) -> Self {
|
||||
Html(html)
|
||||
}
|
||||
|
||||
// Html BUILDER.
|
||||
|
||||
#[fn_builder]
|
||||
pub fn alter_html(&mut self, html: Markup) -> &mut Self {
|
||||
self.0 = html;
|
||||
self
|
||||
}
|
||||
|
||||
// Html GETTERS.
|
||||
|
||||
pub fn html(&self) -> &Markup {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
|
@ -8,7 +8,7 @@ define_handle!(COMPONENT_L10N);
|
|||
pub enum L10nOp {
|
||||
#[default]
|
||||
None,
|
||||
Value(Markup),
|
||||
Text(&'static str),
|
||||
Translated(&'static str, &'static Locales),
|
||||
Escaped(&'static str, &'static Locales),
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ impl ComponentTrait for L10n {
|
|||
fn default_render(&self, rcx: &mut RenderContext) -> Markup {
|
||||
match self.op() {
|
||||
L10nOp::None => html! {},
|
||||
L10nOp::Value(value) => html! { (value) },
|
||||
L10nOp::Text(text) => html! { (text) },
|
||||
L10nOp::Translated(key, locales) => html! {
|
||||
(locales
|
||||
.lookup_with_args(
|
||||
|
|
@ -71,16 +71,9 @@ impl ComponentTrait for L10n {
|
|||
}
|
||||
|
||||
impl L10n {
|
||||
pub fn text(text: &'static str) -> Self {
|
||||
pub fn n(text: &'static str) -> Self {
|
||||
L10n {
|
||||
op: L10nOp::Value(html! { (text) }),
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn html(html: Markup) -> Self {
|
||||
L10n {
|
||||
op: L10nOp::Value(html),
|
||||
op: L10nOp::Text(text),
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ pub trait ModuleTrait: BaseModule + Send + Sync {
|
|||
fn handle(&self) -> Handle;
|
||||
|
||||
fn name(&self) -> L10n {
|
||||
L10n::text(self.single_name())
|
||||
L10n::n(self.single_name())
|
||||
}
|
||||
|
||||
fn description(&self) -> L10n {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ impl fmt::Display for FatalError {
|
|||
FatalError::AccessDenied(request) => {
|
||||
let error_page = Page::new(request.clone());
|
||||
if let Ok(page) = error_page
|
||||
.with_title(L10n::text("Error FORBIDDEN"))
|
||||
.with_title(L10n::n("Error FORBIDDEN"))
|
||||
.with_in("content", error403::Error403)
|
||||
.with_template("error")
|
||||
.render()
|
||||
|
|
@ -46,7 +46,7 @@ impl fmt::Display for FatalError {
|
|||
FatalError::NotFound(request) => {
|
||||
let error_page = Page::new(request.clone());
|
||||
if let Ok(page) = error_page
|
||||
.with_title(L10n::text("Error RESOURCE NOT FOUND"))
|
||||
.with_title(L10n::n("Error RESOURCE NOT FOUND"))
|
||||
.with_in("content", error404::Error404)
|
||||
.with_template("error")
|
||||
.render()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue