Commit Graph

3 Commits

Author SHA1 Message Date
4dca3c1917 Update theme selector and deploy tooling 2025-12-29 10:55:51 +01:00
1002c4a53b fix: add missing getTheme() function to theme.js
Fixed TypeError: Theme.getTheme is not a function error in settings.js

Problem:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- settings.js calls Theme.getTheme() on line 14
- theme.js did not export getTheme() function
- Error: TypeError: Theme.getTheme is not a function
- SecuBox settings page failed to load

Solution:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Added getTheme() function to theme.js module:
- Returns Promise that resolves with theme preference
- Calls API.getTheme() to fetch theme from backend
- Returns 'dark' as fallback if API call fails
- Consistent with other theme module functions

Implementation:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```javascript
/**
 * Get theme preference from backend
 * @returns {Promise<string>} Theme preference ('dark', 'light', or 'system')
 */
getTheme: function() {
    return API.getTheme().then(function(data) {
        return data.theme || 'dark';
    }).catch(function(err) {
        console.error('Failed to load theme preference:', err);
        return 'dark';
    });
}
```

Module now exports 4 functions:
1. init() - Initialize theme system
2. applyTheme(theme) - Apply theme to page
3. getCurrentTheme() - Get effective theme from DOM
4. getTheme() - Get theme preference from backend (NEW)

Testing:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Deployed to router
 Permissions fixed (644)
 Cache cleared
 Services restarted

Test URL: https://192.168.8.191/cgi-bin/luci/admin/secubox/settings

Files Modified:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
* luci-app-secubox/htdocs/luci-static/resources/secubox/theme.js (+13 lines)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 20:55:14 +01:00
5902ac500a release: v0.1.1 - Unified Theme System with Dark/Light Mode Support
Major Features:
• Centralized theme system across SecuBox and System Hub
• Three theme modes: dark (default), light, and system (auto-detect)
• Single theme setting in SecuBox controls both plugins
• Real-time theme switching with OS preference detection

SecuBox Changes:
• Added theme.js manager for centralized theme control
• Implemented CSS variables for dark/light mode (secubox.css)
• Fixed hardcoded colors in dashboard.css, alerts.css, monitoring.css
• Integrated theme.js in all 7 views (dashboard, modules, alerts, monitoring, settings, etc.)
• Added get_theme RPC method to luci.secubox backend
• Updated ACL permissions to include get_theme (read access)
• Version updated to 0.1.1

System Hub Changes:
• Added theme.js manager using SecuBox theme API
• Implemented CSS variables for dark/light mode (dashboard.css)
• Integrated theme.js in all 9 views (overview, health, services, logs, backup, components, remote, settings, diagnostics)
• Version updated to 0.1.1
• README updated with maintainer info

Theme System Architecture:
• Configuration: /etc/config/secubox (option theme: dark|light|system)
• RPCD Backend: luci.secubox/get_theme method
• Frontend: theme.js modules (secubox/theme.js, system-hub/theme.js)
• CSS Variables: --sb-bg, --sb-bg-card, --sb-border, --sb-text, --sb-text-muted, --sb-shadow
• Auto-detection: prefers-color-scheme media query for system mode

Documentation:
• Added LUCI_DEVELOPMENT_REFERENCE.md with comprehensive LuCI development patterns
• Documented ubus/RPC types, baseclass.extend() patterns, ACL structure
• Common errors and solutions from implementation experience

Bug Fixes:
• Fixed SecuBox theme not applying visually (CSS variables now used)
• Fixed missing secubox.css in view imports
• Fixed ACL access denied for get_theme method
• Fixed hardcoded colors preventing theme switching

Testing:
• Verified theme switching works in all SecuBox tabs
• Verified theme switching works in all System Hub tabs
• Verified dark/light/system modes function correctly
• Verified single setting controls both plugins

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 16:09:15 +01:00