136 lines
4.9 KiB
Rust
136 lines
4.9 KiB
Rust
//! Definiciones para crear barras de navegación [`Navbar`].
|
|
//!
|
|
//! Cada [`navbar::Item`](crate::theme::navbar::Item) representa un elemento individual de la barra
|
|
//! de navegación [`Navbar`], con distintos comportamientos según su finalidad, como menús
|
|
//! [`Nav`](crate::theme::Nav) o textos localizados usando [`L10n`](pagetop::locale::L10n).
|
|
//!
|
|
//! También puede mostrar una marca de identidad ([`navbar::Brand`](crate::theme::navbar::Brand))
|
|
//! que identifique la compañía, producto o nombre del proyecto asociado a la solución web.
|
|
//!
|
|
//! # Ejemplos
|
|
//!
|
|
//! Barra **simple**, sólo con un menú horizontal:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let navbar = Navbar::simple()
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::new()
|
|
//! .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
|
|
//! .add_item(nav::Item::link(L10n::n("About"), |_| "/about"))
|
|
//! .add_item(nav::Item::link(L10n::n("Contact"), |_| "/contact"))
|
|
//! ));
|
|
//! ```
|
|
//!
|
|
//! Barra **colapsable**, con botón de despliegue y contenido en el desplegable cuando colapsa:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let navbar = Navbar::simple_toggle()
|
|
//! .with_expand(BreakPoint::MD)
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::new()
|
|
//! .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
|
|
//! .add_item(nav::Item::link_blank(L10n::n("Docs"), |_| "https://docs.example.com"))
|
|
//! .add_item(nav::Item::link(L10n::n("Support"), |_| "/support"))
|
|
//! ));
|
|
//! ```
|
|
//!
|
|
//! Barra con **marca de identidad a la izquierda** y menú a la derecha, típica de una cabecera:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let brand = navbar::Brand::new()
|
|
//! .with_title(L10n::n("PageTop"))
|
|
//! .with_path(Some(|_| "/"));
|
|
//!
|
|
//! let navbar = Navbar::brand_left(brand)
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::new()
|
|
//! .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
|
|
//! .add_item(nav::Item::dropdown(
|
|
//! Dropdown::new()
|
|
//! .with_title(L10n::n("Tools"))
|
|
//! .add_item(dropdown::Item::link(L10n::n("Generator"), |_| "/tools/gen"))
|
|
//! .add_item(dropdown::Item::link(L10n::n("Reports"), |_| "/tools/reports"))
|
|
//! ))
|
|
//! .add_item(nav::Item::link_disabled(L10n::n("Disabled"), |_| "#"))
|
|
//! ));
|
|
//! ```
|
|
//!
|
|
//! Barra con **botón de despliegue a la izquierda** y **marca de identidad a la derecha**:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let brand = navbar::Brand::new()
|
|
//! .with_title(L10n::n("Intranet"))
|
|
//! .with_path(Some(|_| "/"));
|
|
//!
|
|
//! let navbar = Navbar::brand_right(brand)
|
|
//! .with_expand(BreakPoint::LG)
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::pills()
|
|
//! .add_item(nav::Item::link(L10n::n("Dashboard"), |_| "/dashboard"))
|
|
//! .add_item(nav::Item::link(L10n::n("Users"), |_| "/users"))
|
|
//! ));
|
|
//! ```
|
|
//!
|
|
//! Barra con el **contenido en un *offcanvas***, ideal para dispositivos móviles o menús largos:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let oc = Offcanvas::new()
|
|
//! .with_id("main_offcanvas")
|
|
//! .with_title(L10n::n("Main menu"))
|
|
//! .with_placement(offcanvas::Placement::Start)
|
|
//! .with_backdrop(offcanvas::Backdrop::Enabled);
|
|
//!
|
|
//! let navbar = Navbar::offcanvas(oc)
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::new()
|
|
//! .add_item(nav::Item::link(L10n::n("Home"), |_| "/"))
|
|
//! .add_item(nav::Item::link(L10n::n("Profile"), |_| "/profile"))
|
|
//! .add_item(nav::Item::dropdown(
|
|
//! Dropdown::new()
|
|
//! .with_title(L10n::n("More"))
|
|
//! .add_item(dropdown::Item::link(L10n::n("Settings"), |_| "/settings"))
|
|
//! .add_item(dropdown::Item::link(L10n::n("Help"), |_| "/help"))
|
|
//! ))
|
|
//! ));
|
|
//! ```
|
|
//!
|
|
//! Barra **fija arriba**:
|
|
//!
|
|
//! ```rust
|
|
//! # use pagetop::prelude::*;
|
|
//! # use pagetop_bootsier::prelude::*;
|
|
//! let brand = navbar::Brand::new()
|
|
//! .with_title(L10n::n("Main App"))
|
|
//! .with_path(Some(|_| "/"));
|
|
//!
|
|
//! let navbar = Navbar::brand_left(brand)
|
|
//! .with_position(navbar::Position::FixedTop)
|
|
//! .add_item(navbar::Item::nav(
|
|
//! Nav::new()
|
|
//! .add_item(nav::Item::link(L10n::n("Dashboard"), |_| "/"))
|
|
//! .add_item(nav::Item::link(L10n::n("Donors"), |_| "/donors"))
|
|
//! .add_item(nav::Item::link(L10n::n("Stock"), |_| "/stock"))
|
|
//! ));
|
|
//! ```
|
|
|
|
mod props;
|
|
pub use props::{Layout, Position};
|
|
|
|
mod brand;
|
|
pub use brand::Brand;
|
|
|
|
mod component;
|
|
pub use component::Navbar;
|
|
|
|
mod item;
|
|
pub use item::Item;
|