// Main initialization document.addEventListener('DOMContentLoaded', function() { console.log('DOM loaded, initializing dashboard...'); // Check if we're on the dashboard page const hasTable = document.querySelector('table'); const isTicketPage = window.location.pathname.includes('/ticket/') || window.location.href.includes('ticket.php') || document.querySelector('.ticket-details') !== null; const isDashboard = hasTable && !isTicketPage; console.log('Has table:', hasTable); console.log('Is ticket page:', isTicketPage); console.log('Is dashboard:', isDashboard); if (isDashboard) { // Dashboard-specific initialization initStatusFilter(); initTableSorting(); console.log('Creating hamburger menu for dashboard...'); try { createHamburgerMenu(); console.log('Hamburger menu created successfully'); } catch (error) { console.error('Error creating hamburger menu:', error); } } else if (isTicketPage) { // Ticket page initialization console.log('Creating hamburger menu for ticket page...'); try { createHamburgerMenu(); console.log('Hamburger menu created successfully'); } catch (error) { console.error('Error creating hamburger menu:', error); } } // Initialize for all pages initThemeToggle(); initSettingsModal(); // Load saved theme preference const savedTheme = localStorage.getItem('theme') || 'light'; document.documentElement.setAttribute('data-theme', savedTheme); }); function initTableSorting() { const tableHeaders = document.querySelectorAll('th'); tableHeaders.forEach((header, index) => { header.style.cursor = 'pointer'; header.addEventListener('click', () => { const table = header.closest('table'); sortTable(table, index); }); }); } function initSettingsModal() { const settingsIcon = document.querySelector('.settings-icon'); if (settingsIcon) { settingsIcon.addEventListener('click', function(e) { e.preventDefault(); createSettingsModal(); }); } } function sortTable(table, column) { const headers = table.querySelectorAll('th'); headers.forEach(header => { header.classList.remove('sort-asc', 'sort-desc'); }); const rows = Array.from(table.querySelectorAll('tbody tr')); const currentDirection = table.dataset.sortColumn == column ? (table.dataset.sortDirection === 'asc' ? 'desc' : 'asc') : 'asc'; table.dataset.sortColumn = column; table.dataset.sortDirection = currentDirection; rows.sort((a, b) => { const aValue = a.children[column].textContent.trim(); const bValue = b.children[column].textContent.trim(); // Check if this is a date column const headerText = headers[column].textContent.toLowerCase(); if (headerText === 'created' || headerText === 'updated') { const dateA = new Date(aValue); const dateB = new Date(bValue); return currentDirection === 'asc' ? dateA - dateB : dateB - dateA; } // Numeric comparison const numA = parseFloat(aValue); const numB = parseFloat(bValue); if (!isNaN(numA) && !isNaN(numB)) { return currentDirection === 'asc' ? numA - numB : numB - numA; } // String comparison return currentDirection === 'asc' ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); }); const currentHeader = headers[column]; currentHeader.classList.add(currentDirection === 'asc' ? 'sort-asc' : 'sort-desc'); const tbody = table.querySelector('tbody'); rows.forEach(row => tbody.appendChild(row)); } function createSettingsModal() { const backdrop = document.createElement('div'); backdrop.className = 'settings-modal-backdrop'; backdrop.innerHTML = `