🔥 (bootsier): Elimina AdminLTE
Retira AdminLTE 4 de Bootsier: CSS/JS, `bs::sidebar`, `BootsierRegions` y el shell propio de `CoreTemplates::Admin`. Sólo quedaba un sidebar de 5 secciones ya alcanzables desde el dashboard, las páginas de sección y el breadcrumb de `AdminFrame`.
This commit is contained in:
parent
6df71885cc
commit
11c2bdffb1
63 changed files with 201 additions and 7491 deletions
|
|
@ -2,13 +2,14 @@ use pagetop::prelude::*;
|
|||
|
||||
use crate::registry;
|
||||
|
||||
/// Componente que renderiza el menú de secciones visibles del panel de administración.
|
||||
/// Componente que renderiza la barra de navegación del panel de administración.
|
||||
///
|
||||
/// Construye el [`Nav`] en cada petición a partir de [`registry::admin_menu()`], ya filtrado por
|
||||
/// el usuario de la petición actual. Pensado para que un tema lo registre en su propia región de
|
||||
/// navegación (p. ej. `pagetop-bootsier` lo añade a su sidebar) e intercepte `Nav`/`nav::Item` en
|
||||
/// Construye la [`Navbar`] en cada petición a partir de [`registry::admin_navbar()`], ya filtrada
|
||||
/// por el usuario de la petición actual. Pensado para que un tema la registre en su propia región
|
||||
/// de navegación e intercepte `Navbar`/`Nav`/`Dropdown` en
|
||||
/// [`Theme::render_component()`](pagetop::core::theme::Theme::render_component) si quiere darle un
|
||||
/// aspecto propio; sin intercepción, se renderiza con el marcado por defecto de [`Nav`].
|
||||
/// aspecto propio (p. ej. `pagetop-bootsier` la reconoce automáticamente al ser componentes del
|
||||
/// núcleo); sin intercepción, se renderiza con el marcado por defecto de cada componente.
|
||||
///
|
||||
/// Sólo se renderiza en páginas creadas con
|
||||
/// [`Page::admin()`](pagetop::response::Page::admin) (plantilla
|
||||
|
|
@ -32,6 +33,6 @@ impl Component for AdminMenu {
|
|||
) {
|
||||
return Ok(html! {});
|
||||
}
|
||||
Ok(registry::admin_menu(cx).render(cx).await)
|
||||
Ok(registry::admin_navbar(cx).render(cx).await)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -271,25 +271,44 @@ pub fn global() -> &'static AdminRegistry {
|
|||
|
||||
// **< Menú de administración >*********************************************************************
|
||||
|
||||
/// Construye el menú plano de secciones visibles para el usuario de la petición actual.
|
||||
/// Construye la barra de navegación de administración para el usuario de la petición actual: un
|
||||
/// enlace al *dashboard* seguido de un desplegable por sección visible, con sus páginas accesibles
|
||||
/// dentro.
|
||||
///
|
||||
/// Pensado para que un tema lo use como navegación de `CoreTemplates::Admin` (p. ej. un sidebar) --
|
||||
/// ver [`crate::component::AdminMenu`]. `pagetop-admin` no impone ningún marcado propio: el
|
||||
/// [`Nav`] resultante se renderiza con su aspecto por defecto salvo que el tema lo intercepte en
|
||||
/// [`Theme::render_component()`](pagetop::core::theme::Theme::render_component).
|
||||
pub fn admin_menu(cx: &Context) -> Nav {
|
||||
/// Pensado para que un tema la use como navegación de `CoreTemplates::Admin` -- ver
|
||||
/// [`crate::component::AdminMenu`]. `pagetop-admin` no impone ningún marcado propio: la
|
||||
/// [`Navbar`] resultante se renderiza con su aspecto por defecto salvo que el tema lo intercepte
|
||||
/// en [`Theme::render_component()`](pagetop::core::theme::Theme::render_component). Se construye
|
||||
/// enteramente con componentes del núcleo (`Navbar`/`Nav`/`Dropdown`), sin depender de ningún
|
||||
/// tema concreto.
|
||||
pub fn admin_navbar(cx: &Context) -> Navbar {
|
||||
let reg = global();
|
||||
let current_path = cx.request().map(|r| r.path()).unwrap_or("");
|
||||
|
||||
let mut result = Nav::new();
|
||||
let mut nav = Nav::new().with_item(nav::Item::link(
|
||||
Lc::t("dashboard-title", &crate::LOCALES_ADMIN),
|
||||
crate::ADMIN_BASE_PATH,
|
||||
));
|
||||
|
||||
for section in reg.ordered_sections() {
|
||||
if !section.is_visible(cx) {
|
||||
continue;
|
||||
}
|
||||
let active = current_path.starts_with(section.path.as_str());
|
||||
result = result.with_item(
|
||||
nav::Item::link(section.title.clone(), section.path.clone()).with_active(active),
|
||||
);
|
||||
let pages: Vec<_> = reg
|
||||
.pages_for_section(§ion.key)
|
||||
.into_iter()
|
||||
.filter(|p| p.is_accessible(cx))
|
||||
.collect();
|
||||
if pages.is_empty() {
|
||||
continue;
|
||||
}
|
||||
let mut menu = Dropdown::new().with_title(section.title.clone());
|
||||
for page in pages {
|
||||
menu = menu.with_item(dropdown::Item::link(page.title.clone(), page.path.clone()));
|
||||
}
|
||||
nav = nav.with_item(nav::Item::dropdown(menu));
|
||||
}
|
||||
result
|
||||
|
||||
Navbar::simple()
|
||||
.with_position(navbar::Position::StickyTop)
|
||||
.with_item(navbar::Item::nav(nav))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue