(function() { const savedTheme = localStorage.getItem('adminer_dark_mode'); if (savedTheme === 'light') { document.documentElement.classList.add('light-theme'); } else if (savedTheme === 'dark') { document.documentElement.classList.remove('light-theme'); } else { document.documentElement.classList.toggle('light-theme', window.matchMedia('(prefers-color-scheme: light)').matches); } })() function getCurrentTheme() { const savedTheme = localStorage.getItem('adminer_dark_mode'); return savedTheme || 'system'; } document.addEventListener('DOMContentLoaded', function() { const dropdownContainer = document.querySelector('.dropdown-container'); const triggerButton = document.getElementById('theme-trigger'); const themeMenu = document.getElementById('theme-menu'); const menuItems = document.querySelectorAll('.menu-item'); function updateTrigger() { const selectedItem = document.querySelector('.menu-item.selected'); if (selectedItem) { const icon = selectedItem.querySelector('svg'); if (icon) { triggerButton.innerHTML = ''; triggerButton.appendChild(icon.cloneNode(true)); } } } triggerButton.addEventListener('click', (event) => { event.stopPropagation(); themeMenu.classList.toggle('open'); }); menuItems.forEach(item => { item.addEventListener('click', () => { const currentlySelected = document.querySelector('.menu-item.selected'); if (currentlySelected) { currentlySelected.classList.remove('selected'); } item.classList.add('selected'); updateTrigger(); themeMenu.classList.remove('open'); applyTheme(item.dataset.themeValue); }); }); window.addEventListener('click', (event) => { if (themeMenu.classList.contains('open') && !dropdownContainer.contains(event.target)) { themeMenu.classList.remove('open'); } }); updateTrigger(); const htmlElement = document.documentElement; const lightModeMediaQuery = window.matchMedia('(prefers-color-scheme: light)'); lightModeMediaQuery.addEventListener('change', (e) => { const savedTheme = localStorage.getItem('adminer_dark_mode'); if (!savedTheme) { applyTheme('system'); } }); function applyInitialTheme() { const savedTheme = localStorage.getItem('adminer_dark_mode'); applyTheme(savedTheme || 'system'); } /** * Applies a theme and saves the choice to localStorage. * @param {string} theme The theme to apply: 'light', 'dark', or 'system'. */ function applyTheme(theme) { if (theme === 'light') { htmlElement.classList.add('light-theme'); } else if (theme === 'dark') { htmlElement.classList.remove('light-theme'); } else { htmlElement.classList.toggle('light-theme', lightModeMediaQuery.matches); } if (theme === 'system') { localStorage.removeItem('adminer_dark_mode'); } else { localStorage.setItem('adminer_dark_mode', theme); } const currentlySelected = document.querySelector('.menu-item.selected'); if (currentlySelected) { currentlySelected.classList.remove('selected'); } const activeMenuItem = document.querySelector(`.menu-item[data-theme-value="${theme}"]`); if (activeMenuItem) { activeMenuItem.classList.add('selected'); } updateTrigger(); } applyInitialTheme(); (function moveDarkSwitcherToTop() { const customNavMenu = document.querySelector('.custom-nav-menu'); const logout = document.querySelector('.logout').parentNode; customNavMenu.appendChild(logout); })(); });