From da229e494d3ef76fd328a4ff1c242062278fb008 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Wed, 3 Dec 2025 06:47:33 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20A=C3=B1ade=20soporte=20a=20contenid?= =?UTF-8?q?o=20HTML=20en=20=C3=ADtems=20de=20men=C3=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pagetop-bootsier/src/theme/nav/item.rs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/extensions/pagetop-bootsier/src/theme/nav/item.rs b/extensions/pagetop-bootsier/src/theme/nav/item.rs index faf68032..192f8df8 100644 --- a/extensions/pagetop-bootsier/src/theme/nav/item.rs +++ b/extensions/pagetop-bootsier/src/theme/nav/item.rs @@ -25,6 +25,9 @@ pub enum ItemKind { blank: bool, disabled: bool, }, + /// Contenido HTML arbitrario. El componente [`Html`] se renderiza tal cual como elemento del + /// menú, sin añadir ningún comportamiento de navegación adicional. + Html(Typed), /// Elemento que despliega un menú [`Dropdown`]. Dropdown(Typed), } @@ -148,6 +151,12 @@ impl Component for Item { }) } + ItemKind::Html(html) => PrepareMarkup::With(html! { + li id=[self.id()] class=[self.classes().get()] { + (html.render(cx)) + } + }), + ItemKind::Dropdown(menu) => { if let Some(dd) = menu.borrow() { let items = dd.items().render(cx); @@ -244,6 +253,17 @@ impl Item { } } + /// Crea un elemento con contenido HTML arbitrario. + /// + /// El contenido se renderiza tal cual lo devuelve el componente [`Html`], dentro de un `
  • ` + /// con las clases de navegación asociadas a [`Item`]. + pub fn html(html: Html) -> Self { + Item { + item_kind: ItemKind::Html(Typed::with(html)), + ..Default::default() + } + } + /// Crea un elemento de navegación que contiene un menú desplegable [`Dropdown`]. /// /// Sólo se tienen en cuenta **el título** (si no existe le asigna uno por defecto) y **la lista