/* Sage Modern UI Shell Theme & Layout Controller Handles: theme switching (dark/light), sidebar collapse, localStorage persistence */ (function() { 'use strict'; var THEME_KEY = 'sage_ui_theme'; var SIDEBAR_KEY = 'sage_sidebar_collapsed'; // Initialize theme on page load function initTheme() { var saved = null; try { saved = localStorage.getItem(THEME_KEY); } catch(e) {} var theme = saved || 'dark'; document.documentElement.setAttribute('data-theme', theme); updateThemeIcon(theme); } // Toggle between dark and light function toggleTheme() { var current = document.documentElement.getAttribute('data-theme') || 'dark'; var next = current === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', next); try { localStorage.setItem(THEME_KEY, next); } catch(e) {} updateThemeIcon(next); } // Update the theme toggle icon based on current theme function updateThemeIcon(theme) { var btn = document.getElementById('theme_toggle_btn'); if (!btn) return; if (theme === 'light') { // Show moon icon (switch to dark) btn.innerHTML = ''; } else { // Show sun icon (switch to light) btn.innerHTML = ''; } } // Initialize sidebar state function initSidebar() { var collapsed = false; try { collapsed = localStorage.getItem(SIDEBAR_KEY) === 'true'; } catch(e) {} var sidebar = document.getElementById('sage_sidebar'); if (sidebar && collapsed) { sidebar.classList.add('collapsed'); } } // Toggle sidebar collapse function toggleSidebar() { var sidebar = document.getElementById('sage_sidebar'); if (!sidebar) return; sidebar.classList.toggle('collapsed'); var isCollapsed = sidebar.classList.contains('collapsed'); try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {} // Update toggle icon var btn = document.getElementById('sidebar_toggle_btn'); if (btn) { if (isCollapsed) { btn.innerHTML = ''; } else { btn.innerHTML = ''; } } } // Initialize SPA Router function initRouter() { if (typeof bricks === 'undefined' || !bricks.Router) { console.log('[Shell] Router not available'); return; } bricks.Router.init({ targets: [ { id: 'sage_main_content', param: 'page' } ] }); } // Reload global menu after login/logout window.sageReloadMenu = async function() { if (typeof bricks === 'undefined') return; var sidebar = bricks.getWidgetById('sage_sidebar', bricks.app); if (!sidebar) { console.log('[Shell] sage_sidebar not found'); return; } // Clear existing children sidebar.subwidgets.forEach(function(w) { w.destroy && w.destroy(); }); sidebar.subwidgets = []; sidebar.el.innerHTML = ''; // Rebuild menu urlwidget var menuUrl = bricks.app.baseUrl + '/global_menu.ui?_webbricks_=1'; var desc = { "widgettype": "urlwidget", "options": { "url": menuUrl } }; try { var w = await bricks.widgetBuild(desc, sidebar); if (w) { sidebar.addSubWidget(w); console.log('[Shell] Menu reloaded'); } } catch(e) { console.log('[Shell] Menu reload error:', e); } }; // Run on DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { initTheme(); initSidebar(); initRouter(); }); } else { initTheme(); initSidebar(); initRouter(); } // Expose global functions for bricks bind access window.sageToggleTheme = toggleTheme; window.sageToggleSidebar = toggleSidebar; window.sageInitTheme = initTheme; window.sageInitSidebar = initSidebar; })();