/**
* Tractatus Admin Navbar Component
* Hamburger menu with organized admin page groups
*/
(function() {
'use strict';
class AdminNavbar {
constructor() {
this.mobileMenuOpen = false;
this.adminUser = JSON.parse(localStorage.getItem('admin_user') || '{}');
this.adminName = this.adminUser.name || this.adminUser.email || 'Admin';
this.init();
}
init() {
const container = document.getElementById('admin-navbar');
if (!container) return;
const pageTitle = container.dataset.pageTitle || 'Admin';
const pageIcon = container.dataset.pageIcon || 'default';
this.render(container, pageTitle, pageIcon);
this.attachEventListeners();
}
getIcon(iconType) {
const icons = {
default: '',
calendar: '',
dashboard: '',
blog: '',
analytics: '',
server: ''
};
return icons[iconType] || icons.default;
}
render(container, pageTitle, pageIcon) {
const iconSvg = this.getIcon(pageIcon);
container.innerHTML = `
`;
}
attachEventListeners() {
const menuBtn = document.getElementById('admin-menu-btn');
const menu = document.getElementById('admin-menu');
const menuPanel = document.getElementById('admin-menu-panel');
const closeBtn = document.getElementById('admin-menu-close-btn');
const backdrop = document.getElementById('admin-menu-backdrop');
const logoutBtn = document.getElementById('admin-logout-btn');
if (menuBtn && menu && menuPanel) {
menuBtn.addEventListener('click', () => this.openMenu(menu, menuPanel));
closeBtn.addEventListener('click', () => this.closeMenu(menu, menuPanel));
backdrop.addEventListener('click', () => this.closeMenu(menu, menuPanel));
}
if (logoutBtn) {
logoutBtn.addEventListener('click', () => {
localStorage.removeItem('admin_token');
localStorage.removeItem('admin_user');
window.location.href = '/admin/login.html';
});
}
}
openMenu(menu, panel) {
menu.classList.remove('hidden');
// Force reflow
panel.offsetHeight;
panel.classList.remove('translate-x-full');
this.mobileMenuOpen = true;
}
closeMenu(menu, panel) {
panel.classList.add('translate-x-full');
setTimeout(() => {
menu.classList.add('hidden');
}, 300);
this.mobileMenuOpen = false;
}
}
// Initialize when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => new AdminNavbar());
} else {
new AdminNavbar();
}
})();