Añade ejemplo de barra de menú de navegación

This commit is contained in:
Manuel Cillero 2025-11-02 20:47:50 +01:00
parent 93b669de43
commit 13fbdbe007
3 changed files with 149 additions and 0 deletions

101
examples/navbar-menus.rs Normal file
View file

@ -0,0 +1,101 @@
use pagetop::prelude::*;
use pagetop_bootsier::prelude::*;
struct SuperMenu;
impl Extension for SuperMenu {
fn dependencies(&self) -> Vec<ExtensionRef> {
vec![&pagetop_aliner::Aliner, &pagetop_bootsier::Bootsier]
}
fn initialize(&self) {
let home_path = |cx: &Context| match cx.langid().language.as_str() {
"en" => "/en",
_ => "/",
};
let navbar_menu = Navbar::brand_left(navbar::Brand::new().with_path(Some(home_path)))
.with_expand(BreakPoint::LG)
.add_item(navbar::Item::nav(
Nav::new()
.add_item(nav::Item::link(
L10n::l("sample_menus_item_link"),
home_path,
))
.add_item(nav::Item::link_blank(
L10n::l("sample_menus_item_blank"),
|_| "https://docs.rs/pagetop",
))
.add_item(nav::Item::dropdown(
Dropdown::new()
.with_title(L10n::l("sample_menus_test_title"))
.add_item(dropdown::Item::header(L10n::l("sample_menus_dev_header")))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_dev_getting_started"),
|_| "/dev/getting-started",
))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_dev_guides"),
|_| "/dev/guides",
))
.add_item(dropdown::Item::link_blank(
L10n::l("sample_menus_dev_forum"),
|_| "https://forum.example.dev",
))
.add_item(dropdown::Item::divider())
.add_item(dropdown::Item::header(L10n::l("sample_menus_sdk_header")))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_sdk_rust"),
|_| "/dev/sdks/rust",
))
.add_item(dropdown::Item::link(L10n::l("sample_menus_sdk_js"), |_| {
"/dev/sdks/js"
}))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_sdk_python"),
|_| "/dev/sdks/python",
))
.add_item(dropdown::Item::divider())
.add_item(dropdown::Item::header(L10n::l(
"sample_menus_plugin_header",
)))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_plugin_auth"),
|_| "/dev/sdks/rust/plugins/auth",
))
.add_item(dropdown::Item::link(
L10n::l("sample_menus_plugin_cache"),
|_| "/dev/sdks/rust/plugins/cache",
))
.add_item(dropdown::Item::divider())
.add_item(dropdown::Item::label(L10n::l("sample_menus_item_label")))
.add_item(dropdown::Item::link_disabled(
L10n::l("sample_menus_item_disabled"),
|_| "#",
)),
))
.add_item(nav::Item::link_disabled(
L10n::l("sample_menus_item_disabled"),
|_| "#",
)),
))
.add_item(navbar::Item::nav(
Nav::new()
.add_item(nav::Item::link(
L10n::l("sample_menus_item_sign_up"),
|_| "/auth/sign-up",
))
.add_item(nav::Item::link(L10n::l("sample_menus_item_login"), |_| {
"/auth/login"
})),
));
InRegion::Key("header").add(Child::with(navbar_menu));
}
}
#[pagetop::main]
async fn main() -> std::io::Result<()> {
Application::prepare(&SuperMenu).run()?.await
}

View file

@ -0,0 +1,24 @@
# menus.rs
sample_menus_item_label = Label
sample_menus_item_link = Link
sample_menus_item_blank = External link
sample_menus_item_disabled = Disabled link
sample_menus_test_title = Dropdown
sample_menus_dev_header = Intro
sample_menus_dev_getting_started = Getting started
sample_menus_dev_guides = Development guides
sample_menus_dev_forum = Developers forum
sample_menus_sdk_header = Software Development Kits
sample_menus_sdk_rust = SDKs Rust
sample_menus_sdk_js = SDKs JavaScript
sample_menus_sdk_python = SDKs Python
sample_menus_plugin_header = Plugins
sample_menus_plugin_auth = Rust Plugin Auth
sample_menus_plugin_cache = Rust Plugin Cache
sample_menus_item_sign_up = Sign up
sample_menus_item_login = Login

View file

@ -0,0 +1,24 @@
# menus.rs
sample_menus_item_label = Etiqueta
sample_menus_item_link = Enlace
sample_menus_item_blank = Enlace externo
sample_menus_item_disabled = Enlace deshabilitado
sample_menus_test_title = Desplegable
sample_menus_dev_header = Introducción
sample_menus_dev_getting_started = Primeros pasos
sample_menus_dev_guides = Guías de desarrollo
sample_menus_dev_forum = Foro de desarrolladores
sample_menus_sdk_header = Kits de Desarrollo Software
sample_menus_sdk_rust = SDKs de Rust
sample_menus_sdk_js = SDKs de JavaScript
sample_menus_sdk_python = SDKs de Python
sample_menus_plugin_header = Plugins
sample_menus_plugin_auth = Plugin Rust de autenticación
sample_menus_plugin_cache = Plugin Rust de caché
sample_menus_item_sign_up = Registrarse
sample_menus_item_login = Iniciar sesión