File Manager
Viewing File: modern-layout.js
/**
* Modern Admin Layout - JavaScript
* Handles sidebar and topbar interactions for the admin interface
* Version: 1.0.0
*/
document.addEventListener('DOMContentLoaded', function() {
// Initialize sidebar toggle
const sidebarToggle = document.querySelector('.sidebar-toggle');
const sidebar = document.querySelector('.sidebar');
const sidebarOverlay = document.querySelector('.sidebar-overlay');
const content = document.querySelector('.main-panel');
// Toggle sidebar on mobile
if (sidebarToggle) {
sidebarToggle.addEventListener('click', function() {
sidebar.classList.toggle('show');
// Create overlay if it doesn't exist
if (!sidebarOverlay) {
const overlay = document.createElement('div');
overlay.classList.add('sidebar-overlay');
document.body.appendChild(overlay);
overlay.addEventListener('click', function() {
sidebar.classList.remove('show');
overlay.classList.remove('show');
});
} else {
sidebarOverlay.classList.toggle('show');
}
});
}
// Handle notifications dropdown
const notificationsToggle = document.querySelector('.notifications-toggle');
if (notificationsToggle) {
notificationsToggle.addEventListener('click', function(e) {
e.stopPropagation();
const dropdown = this.nextElementSibling;
dropdown.classList.toggle('show');
// Close dropdown when clicking outside
document.addEventListener('click', function closeDropdown(e) {
if (!dropdown.contains(e.target)) {
dropdown.classList.remove('show');
document.removeEventListener('click', closeDropdown);
}
});
});
}
// Theme toggler
const themeToggler = document.querySelector('.theme-toggle');
if (themeToggler) {
// Check for saved theme preference or respect OS preference
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const savedTheme = localStorage.getItem('theme');
// Apply the right theme on load
if (savedTheme === 'dark' || (!savedTheme && prefersDark)) {
document.body.classList.add('dark-mode');
}
themeToggler.addEventListener('click', function() {
document.body.classList.toggle('dark-mode');
const isDark = document.body.classList.contains('dark-mode');
localStorage.setItem('theme', isDark ? 'dark' : 'light');
});
}
// Profile dropdown
const profileToggle = document.querySelector('.user-profile-toggle');
if (profileToggle) {
profileToggle.addEventListener('click', function(e) {
e.stopPropagation();
const dropdown = document.querySelector('.user-dropdown');
dropdown.classList.toggle('show');
// Close dropdown when clicking outside
document.addEventListener('click', function closeDropdown(e) {
if (!dropdown.contains(e.target)) {
dropdown.classList.remove('show');
document.removeEventListener('click', closeDropdown);
}
});
});
}
// Search functionality
const searchInput = document.querySelector('.search-input');
if (searchInput) {
searchInput.addEventListener('focus', function() {
this.parentElement.classList.add('search-focused');
});
searchInput.addEventListener('blur', function() {
this.parentElement.classList.remove('search-focused');
});
}
});
// Alpine.js initialization for sidebar
document.addEventListener('alpine:init', () => {
Alpine.store('layout', {
sidebarOpen: window.innerWidth >= 992,
mobileSidebarOpen: false
});
});