mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-08-02 18:10:18 +05:30
51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
class SidebarManager {
|
|
constructor() {
|
|
this.sidebar = document.getElementById('sidebar');
|
|
this.panelContent = document.getElementById('sidebar-panel-content');
|
|
this.panelTitle = document.querySelector('.sidebar-panel-title');
|
|
this.activePanel = null;
|
|
this.panels = new Map();
|
|
this.setupEventListeners();
|
|
}
|
|
|
|
setupEventListeners() {
|
|
document.querySelectorAll('.sidebar-icon').forEach(btn => {
|
|
btn.addEventListener('click', () => this.togglePanel(btn.dataset.panel));
|
|
});
|
|
document.querySelector('.sidebar-panel-close')?.addEventListener('click', () => this.collapse());
|
|
}
|
|
|
|
registerPanel(name, { title, render }) {
|
|
this.panels.set(name, { title, render });
|
|
}
|
|
|
|
togglePanel(name) {
|
|
if (this.activePanel === name) {
|
|
this.collapse();
|
|
} else {
|
|
this.expand(name);
|
|
}
|
|
}
|
|
|
|
expand(name) {
|
|
const panel = this.panels.get(name);
|
|
if (!panel) return;
|
|
this.sidebar.classList.remove('collapsed');
|
|
this.panelTitle.textContent = panel.title;
|
|
this.panelContent.innerHTML = '';
|
|
panel.render(this.panelContent);
|
|
this.activePanel = name;
|
|
document.querySelectorAll('.sidebar-icon').forEach(btn => {
|
|
btn.classList.toggle('active', btn.dataset.panel === name);
|
|
});
|
|
}
|
|
|
|
collapse() {
|
|
this.sidebar.classList.add('collapsed');
|
|
this.activePanel = null;
|
|
document.querySelectorAll('.sidebar-icon').forEach(btn => btn.classList.remove('active'));
|
|
}
|
|
}
|
|
|
|
module.exports = { SidebarManager };
|