diff --git a/assets/css/discord.css b/assets/css/discord.css index ec1c135..64c06c2 100644 --- a/assets/css/discord.css +++ b/assets/css/discord.css @@ -190,6 +190,14 @@ body { color: white; } +.category-wrapper.collapsed .category-group { + display: none; +} + +.category-wrapper.collapsed .category-collapse-toggle { + transform: rotate(-90deg); +} + .channel-category { color: var(--text-muted); font-size: 0.85em; diff --git a/assets/js/main.js b/assets/js/main.js index 3da79ed..eaf9793 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -2609,6 +2609,7 @@ document.addEventListener('DOMContentLoaded', () => { const currentSidebar = document.getElementById('sidebar-channels-list'); if (newSidebar && currentSidebar) { currentSidebar.innerHTML = newSidebar.innerHTML; + if (window.restoreCollapsedStates) window.restoreCollapsedStates(); } }) .catch(err => console.error('Error refreshing sidebar:', err)); @@ -2622,5 +2623,38 @@ document.addEventListener('DOMContentLoaded', () => { } }); + // Category Collapsible Logic + document.addEventListener('click', (e) => { + const categoryHeader = e.target.closest('.channel-category'); + if (categoryHeader) { + // Check if we didn't click on a settings button or add button + if (e.target.closest('.channel-settings-btn') || e.target.closest('.add-channel-btn')) { + return; + } + const wrapper = categoryHeader.closest('.category-wrapper'); + if (wrapper) { + wrapper.classList.toggle('collapsed'); + // Persist state in localStorage + const categoryId = wrapper.dataset.id; + const collapsedStates = JSON.parse(localStorage.getItem('categoryCollapsedStates') || '{}'); + collapsedStates[categoryId] = wrapper.classList.contains('collapsed'); + localStorage.setItem('categoryCollapsedStates', JSON.stringify(collapsedStates)); + } + } + }); + + // Restore collapsed states + window.restoreCollapsedStates = () => { + const collapsedStates = JSON.parse(localStorage.getItem('categoryCollapsedStates') || '{}'); + Object.entries(collapsedStates).forEach(([id, isCollapsed]) => { + if (isCollapsed) { + const wrapper = document.querySelector(`.category-wrapper[data-id="${id}"]`); + if (wrapper) { + wrapper.classList.add('collapsed'); + } + } + }); + }; + restoreCollapsedStates(); }); diff --git a/index.php b/index.php index b65e290..2be5341 100644 --- a/index.php +++ b/index.php @@ -459,11 +459,14 @@ $projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; // Render category and its children ?>
-
+
+ + + - +