{{breadcrumbs}}
HUB / lib_html2_sidemenu.py
lib_html2_sidemenu.py
- Runtime
- Python
- Category
- HTML
- Path
- /storage/emulated/0/Projects/Management/Libraries/py/HTML/lib_html2_sidemenu.py
FILE // lib_html2_sidemenu.py
"""
Library: lib_html2_sidemenu.py
MFDB Version: 1.3.1
Format_Creator: Elton Boehnen
Status: OFFICIAL - v1.3.1
Date: 2026-05-06
"""
"""
Library: lib_html2_sidemenu.py
Family: HTML
Jurisdiction: ["PYTHON", "BEJSON_LIBRARIES"]
Status: OFFICIAL — BEJSON/Lib (v1.4)
Author: Elton Boehnen
Version: 1.3 OFFICIAL
Date: 2026-05-01
Description: Navigation components for BEJSON HTML generation.
Aligned with CSS Policy v3.0 (BEM top-bar/sidebar).
"""
import html as html_mod
def _sidebar_html(nav_links, title="Menu"):
"""
Build sidebar + overlay HTML based on v3.0 standards.
Returns (top_bar, sidebar, overlay) tuple.
"""
if not nav_links:
return "", "", ""
def safe_label(l):
l_str = str(l)
if "&" in l_str or "&#" in l_str or any(ord(c) > 127 for c in l_str):
return l_str
return html_mod.escape(l_str)
links = "".join(f'<a href="{html_mod.escape(str(h))}">{safe_label(l)}</a>\n' for l, h in nav_links)
top_bar = f"""<header class="top-bar" role="banner">
<button class="top-bar__toggle" onclick="document.querySelector('.sidebar').classList.toggle('open');document.querySelector('.sidebar-overlay').classList.toggle('open')" aria-label="Toggle navigation" aria-expanded="false">☰</button>
<span class="top-bar__brand">{html_mod.escape(str(title))}</span>
</header>"""
sidebar = f"""<nav class="sidebar" role="navigation" aria-label="Main navigation">{links}</nav>"""
overlay = f"""<div class="sidebar-overlay" onclick="document.querySelector('.sidebar').classList.remove('open');document.querySelector('.sidebar-overlay').classList.remove('open')"></div>"""
return top_bar, sidebar, overlay
def html_navbar(links, dark=False):
"""
[DEPRECATED] Standalone navbar overlay. Use _sidebar_html for v3.0 compatibility.
"""
link_html = "".join(f'<a href="{html_mod.escape(str(h))}">{html_mod.escape(str(l))}</a>\n' for l, h in links)
return f"""<button class="top-bar__toggle" onclick="document.querySelector('.sidebar-overlay').classList.toggle('open')">☰</button>
<div class="sidebar-overlay" onclick="if(event.target===this)this.classList.remove('open')">{link_html}</div>"""