Move sidebar toggle from sidebar panel to breadcrumb navigation, positioned left of the HOME icon. Uses distinct icons for open (sidebar-inset) and closed (sidebar) states. Sidebar state persists via sessionStorage. Remove old non-functional toggle buttons from layout and HTMLBlock plugin.
92 lines
3.1 KiB
JavaScript
92 lines
3.1 KiB
JavaScript
// Main application JavaScript
|
|
// This file contains general application functionality
|
|
|
|
/**
|
|
* Toggle sidebar visibility (open/close)
|
|
*/
|
|
function toggleSidebar() {
|
|
const sidebar = document.getElementById('site-sidebar');
|
|
const contentCol = sidebar ? sidebar.nextElementSibling || sidebar.parentElement.querySelector('.content-column') : null;
|
|
const icon = document.querySelector('.sidebar-toggle-btn i');
|
|
|
|
if (!sidebar) return;
|
|
|
|
sidebar.classList.toggle('sidebar-hidden');
|
|
|
|
// Adjust content column width and toggle icon
|
|
if (sidebar.classList.contains('sidebar-hidden')) {
|
|
if (contentCol) {
|
|
contentCol.classList.remove('col-lg-9', 'col-md-8');
|
|
contentCol.classList.add('col-12');
|
|
}
|
|
if (icon) {
|
|
icon.classList.remove('bi-layout-sidebar-inset');
|
|
icon.classList.add('bi-layout-sidebar');
|
|
}
|
|
sessionStorage.setItem('sidebarHidden', 'true');
|
|
} else {
|
|
if (contentCol) {
|
|
contentCol.classList.remove('col-12');
|
|
contentCol.classList.add('col-lg-9', 'col-md-8');
|
|
}
|
|
if (icon) {
|
|
icon.classList.remove('bi-layout-sidebar');
|
|
icon.classList.add('bi-layout-sidebar-inset');
|
|
}
|
|
sessionStorage.setItem('sidebarHidden', 'false');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Restore sidebar state from sessionStorage on page load
|
|
*/
|
|
function restoreSidebarState() {
|
|
if (sessionStorage.getItem('sidebarHidden') === 'true') {
|
|
const sidebar = document.getElementById('site-sidebar');
|
|
if (sidebar) {
|
|
toggleSidebar();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Initialize application when DOM is ready
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
console.log('CodePress CMS initialized');
|
|
|
|
// Restore sidebar state
|
|
restoreSidebarState();
|
|
|
|
// Handle nested dropdowns for touch devices
|
|
const dropdownSubmenus = document.querySelectorAll('.dropdown-submenu');
|
|
|
|
dropdownSubmenus.forEach(function(submenu) {
|
|
const toggle = submenu.querySelector('.dropdown-toggle');
|
|
const dropdown = submenu.querySelector('.dropdown-menu');
|
|
|
|
if (toggle && dropdown) {
|
|
// Prevent default link behavior
|
|
toggle.addEventListener('click', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
// Close other submenus at the same level
|
|
const parent = submenu.parentElement;
|
|
parent.querySelectorAll('.dropdown-submenu').forEach(function(sibling) {
|
|
if (sibling !== submenu) {
|
|
sibling.querySelector('.dropdown-menu').classList.remove('show');
|
|
}
|
|
});
|
|
|
|
// Toggle current submenu
|
|
dropdown.classList.toggle('show');
|
|
});
|
|
|
|
// Close submenu when clicking outside
|
|
document.addEventListener('click', function(e) {
|
|
if (!submenu.contains(e.target)) {
|
|
dropdown.classList.remove('show');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}); |