Same class of bug as the topbar partial: icon and data-file references were relative (icons/apps/x.svg, data/apps/...), so on deep path routes (/app/<name>, /admin/config/x) the browser resolved them against the route dir and the SPA catch-all served index.html with HTTP 200 instead of 404 — broken images and silently-wrong JSON. Make every reference absolute (anchored on the quote/backtick so already-absolute /icons paths are untouched): - JS: all icons/ and data/ literals + templates across components/utils/system - html/topbar.html: logo <img> - generators: webui_config.sh and webui_create_app_categories.sh now emit /icons/... into apps.json / apps-categories.json (regenerated on install) - updated the two icon-path comments to match Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
72 lines
3.3 KiB
HTML
Executable File
72 lines
3.3 KiB
HTML
Executable File
<!-- Topbar -->
|
|
<div class="topbar">
|
|
<button class="mobile-menu-toggle" id="mobile-menu-toggle" aria-label="Toggle navigation menu">
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
|
</svg>
|
|
</button>
|
|
<div class="topbar-left">
|
|
<div class="libreportal-logo">
|
|
<img src="/icons/libreportal.svg" alt="LibrePortal" width="32" height="32">
|
|
</div>
|
|
</div>
|
|
<div class="mobile-drawer" id="mobile-drawer">
|
|
<nav class="topbar-nav">
|
|
<a href="/dashboard" class="nav-item" id="nav-dashboard">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect>
|
|
<line x1="9" y1="9" x2="15" y2="9"></line>
|
|
<line x1="9" y1="15" x2="15" y2="15"></line>
|
|
</svg>
|
|
Dashboard
|
|
</a>
|
|
<a href="/apps" class="nav-item" id="nav-app-center">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<rect x="3" y="3" width="7" height="7"></rect>
|
|
<rect x="14" y="3" width="7" height="7"></rect>
|
|
<rect x="14" y="14" width="7" height="7"></rect>
|
|
<rect x="3" y="14" width="7" height="7"></rect>
|
|
</svg>
|
|
App Center
|
|
</a>
|
|
<a href="/admin" class="nav-item" id="nav-config">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path>
|
|
</svg>
|
|
Admin
|
|
</a>
|
|
<a href="/tasks" class="nav-item" id="nav-tasks">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M9 11H3v2h6v-2zm0-4H3v2h6V7zm0 8H3v2h6v-2zm12-8h-6v2h6V7zm0 4h-6v2h6v-2zm0 4h-6v2h6v-2z"></path>
|
|
</svg>
|
|
Tasks
|
|
</a>
|
|
<a href="/backup" class="nav-item" id="nav-backup">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
|
|
<polyline points="17 8 12 3 7 8"></polyline>
|
|
<line x1="12" y1="3" x2="12" y2="15"></line>
|
|
</svg>
|
|
Backups
|
|
</a>
|
|
</nav>
|
|
<div class="mobile-drawer-page-section" id="mobile-drawer-page-section"></div>
|
|
<div class="topbar-controls">
|
|
<select id="theme-selector" class="theme-selector" aria-label="Theme">
|
|
<!-- Options populated by ThemeRegistry — see js/system/theme-registry.js -->
|
|
</select>
|
|
<button class="donate-btn">Donate</button>
|
|
<button class="logout-btn" id="logout-btn" title="Logout">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
<path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path>
|
|
<polyline points="16 17 21 12 16 7"></polyline>
|
|
<line x1="21" y1="12" x2="9" y2="12"></line>
|
|
</svg>
|
|
Logout
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|