- Add 'none' as icon type option to hide icons on individual menu items
- Display custom icons in top navbar to match left sidebar appearance
- Fix console table Columns dropdown showing raw HTML by moving icon/link
rendering to JS post-init (bootstrap-table captures th innerHTML for
dropdown labels, so icons must be injected after initialization)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Icon and IconType columns to Menu_Items table allowing admins to
override the default material icon for each menu entry. Supports three
icon types: Material Icons, Font Awesome 4.7 classes, and uploaded
image files (stored in graphics/menu/).
Add renderMenuIcon() helper and $menuIconOverride global to pass
custom icons through to buildMenuItem() and getOptionsHTML() without
changing every get*HTML() function signature.
Options > Menu tab now shows icon preview, type selector, and
text/file input per row. Upload handler validates file type and
cleans up old images on change or reset.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Menu_Items table to store per-item enabled state, custom labels,
and sort order. Admins can enable/disable menu items, set custom
labels, and reorder via drag-and-drop in Options > Menu tab.
Refactor hardcoded get*HTML() calls in buildSidebarMenu(),
getNormalNavBarHTML(), and getCollapsedNavBarHTML() to data-driven
renderMenuItems() that reads from DB with fallback for empty table.
Remove deprecated Cycle view from menu (functionality merged into
Watch view). Add reset button to restore default menu configuration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>