Switched Panel Icon to Bootstrap Icon
This commit is contained in:
parent
211cdcc53c
commit
574c28c81d
|
|
@ -57,7 +57,8 @@ MVP - Minimum Viable Product Task List
|
||||||
- [ ] Web UI
|
- [ ] Web UI
|
||||||
- [ ] Progresive Web App
|
- [ ] Progresive Web App
|
||||||
- [ ] Editable Dashboard
|
- [ ] Editable Dashboard
|
||||||
|
- [ ] Panel Icon
|
||||||
|
|
||||||
|
|
||||||
**Resource Management**
|
**Resource Management**
|
||||||
- [ ] CPU Reserve Capacity Allocation
|
- [ ] CPU Reserve Capacity Allocation
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||||
"aedes": "^0.51.3",
|
"aedes": "^0.51.3",
|
||||||
"bootstrap": "^5.3.7",
|
"bootstrap": "^5.3.7",
|
||||||
|
"bootstrap-icons": "^1.13.1",
|
||||||
"chart.js": "^4.5.1",
|
"chart.js": "^4.5.1",
|
||||||
"csv-parse": "^5.6.0",
|
"csv-parse": "^5.6.0",
|
||||||
"d3": "^7.9.0",
|
"d3": "^7.9.0",
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
"open_browser": false,
|
"open_browser": false,
|
||||||
"weblibs": {
|
"weblibs": {
|
||||||
"bootstrap":"bootstrap/dist",
|
"bootstrap":"bootstrap/dist",
|
||||||
|
"bootstrap-icons":"bootstrap-icons",
|
||||||
"chartjs":"chart.js/dist",
|
"chartjs":"chart.js/dist",
|
||||||
"d3":"d3/dist",
|
"d3":"d3/dist",
|
||||||
"fontawesome":"@fortawesome/fontawesome-free",
|
"fontawesome":"@fortawesome/fontawesome-free",
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@
|
||||||
<!-- Bootstrap CSS -->
|
<!-- Bootstrap CSS -->
|
||||||
<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
|
||||||
|
|
||||||
|
<!-- Bootstrap Icons -->
|
||||||
|
<link rel="stylesheet" href="/bootstrap-icons/font/bootstrap-icons.min.css">
|
||||||
|
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link rel="stylesheet" href="/fontawesome/css/all.min.css">
|
<link rel="stylesheet" href="/fontawesome/css/all.min.css">
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -371,54 +371,99 @@ function loadNavTabs() {
|
||||||
// ===============================
|
// ===============================
|
||||||
// Side Panel (layout-collapsing)
|
// Side Panel (layout-collapsing)
|
||||||
// ===============================
|
// ===============================
|
||||||
async function loadSidePanel() {
|
// async function loadSidePanel() {
|
||||||
// console.log('DEBUG: loadSidePanel() called');
|
// // console.log('DEBUG: loadSidePanel() called');
|
||||||
|
|
||||||
|
// const panel = document.getElementById('sidepanel');
|
||||||
|
// const inner = document.getElementById('sidepanel-inner');
|
||||||
|
// const toggleBtn = document.getElementById('sidepanel-toggle');
|
||||||
|
|
||||||
|
// if (!panel || !inner || !toggleBtn) return;
|
||||||
|
|
||||||
|
// const currentPage =
|
||||||
|
// new URLSearchParams(window.location.search).get('page') || 'index';
|
||||||
|
|
||||||
|
// const isCollapsed =
|
||||||
|
// localStorage.getItem('sidepanel_collapsed') === 'true';
|
||||||
|
|
||||||
|
// if (isCollapsed) {
|
||||||
|
// panel.classList.add('collapsed');
|
||||||
|
// // toggleBtn.innerHTML = `<i class="fa-solid fa-folder-plus"></i>`;
|
||||||
|
// toggleBtn.innerHTML = '<i class="bi bi-layout-sidebar"></i>';
|
||||||
|
// } else {
|
||||||
|
// // toggleBtn.innerHTML = `<i class="fa-solid fa-folder-minus"></i>`;
|
||||||
|
// toggleBtn.innerHTML = '<i class="bi bi-layout-sidebar-reverse"></i>';
|
||||||
|
// }
|
||||||
|
|
||||||
|
// try {
|
||||||
|
// const res = await fetch('/api/nav/sidepanel');
|
||||||
|
// if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
||||||
|
|
||||||
|
// const sideNav = await res.json();
|
||||||
|
|
||||||
|
// renderAllSidePanelSections(inner, sideNav, currentPage);
|
||||||
|
// } catch (err) {
|
||||||
|
// console.error('Failed to load side panel:', err);
|
||||||
|
// inner.innerHTML = '';
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Collapse / expand behavior
|
||||||
|
// toggleBtn.onclick = () => {
|
||||||
|
// const collapsed = panel.classList.toggle('collapsed');
|
||||||
|
// localStorage.setItem('sidepanel_collapsed', collapsed);
|
||||||
|
|
||||||
|
// // toggleBtn.innerHTML = `
|
||||||
|
// // <i class="fa-solid ${
|
||||||
|
// // collapsed ? 'fa-folder-plus' : 'fa-folder-minus'
|
||||||
|
// // }"></i>
|
||||||
|
// // `;
|
||||||
|
|
||||||
|
// toggleBtn.innerHTML = `
|
||||||
|
// <i class="bi ${
|
||||||
|
// collapsed ? 'bi-layout-sidebar' : 'bi-layout-sidebar-reverse'
|
||||||
|
// }"></i>
|
||||||
|
// `;
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
async function loadSidePanel() {
|
||||||
const panel = document.getElementById('sidepanel');
|
const panel = document.getElementById('sidepanel');
|
||||||
const inner = document.getElementById('sidepanel-inner');
|
const inner = document.getElementById('sidepanel-inner');
|
||||||
const toggleBtn = document.getElementById('sidepanel-toggle');
|
const toggleBtn = document.getElementById('sidepanel-toggle');
|
||||||
|
|
||||||
if (!panel || !inner || !toggleBtn) return;
|
if (!panel || !inner || !toggleBtn) return;
|
||||||
|
|
||||||
const currentPage =
|
const currentPage =
|
||||||
new URLSearchParams(window.location.search).get('page') || 'index';
|
new URLSearchParams(window.location.search).get('page') || 'index';
|
||||||
|
|
||||||
const isCollapsed =
|
const isCollapsed =
|
||||||
localStorage.getItem('sidepanel_collapsed') === 'true';
|
localStorage.getItem('sidepanel_collapsed') === 'true';
|
||||||
|
|
||||||
if (isCollapsed) {
|
if (isCollapsed) {
|
||||||
panel.classList.add('collapsed');
|
panel.classList.add('collapsed');
|
||||||
toggleBtn.innerHTML = `<i class="fa-solid fa-folder-plus"></i>`;
|
toggleBtn.innerHTML = '<i class="bi bi-layout-sidebar"></i>';
|
||||||
} else {
|
} else {
|
||||||
toggleBtn.innerHTML = `<i class="fa-solid fa-folder-minus"></i>`;
|
toggleBtn.innerHTML = '<i class="bi bi-layout-sidebar-reverse"></i>';
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch('/api/nav/sidepanel');
|
const res = await fetch('/api/nav/sidepanel');
|
||||||
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
if (!res.ok) throw new Error(`HTTP ${res.status}`); // ✅ Fixed template literal
|
||||||
|
|
||||||
const sideNav = await res.json();
|
const sideNav = await res.json();
|
||||||
|
|
||||||
renderAllSidePanelSections(inner, sideNav, currentPage);
|
renderAllSidePanelSections(inner, sideNav, currentPage);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to load side panel:', err);
|
console.error('Failed to load side panel:', err);
|
||||||
inner.innerHTML = '';
|
inner.innerHTML = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collapse / expand behavior
|
// Collapse / expand behavior
|
||||||
toggleBtn.onclick = () => {
|
toggleBtn.onclick = () => {
|
||||||
const collapsed = panel.classList.toggle('collapsed');
|
const collapsed = panel.classList.toggle('collapsed');
|
||||||
localStorage.setItem('sidepanel_collapsed', collapsed);
|
localStorage.setItem('sidepanel_collapsed', collapsed);
|
||||||
|
|
||||||
toggleBtn.innerHTML = `
|
toggleBtn.innerHTML = `
|
||||||
<i class="fa-solid ${
|
<i class="bi ${collapsed ? 'bi-layout-sidebar' : 'bi-layout-sidebar-reverse'}"></i>
|
||||||
collapsed ? 'fa-folder-plus' : 'fa-folder-minus'
|
|
||||||
}"></i>
|
|
||||||
`;
|
`;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Find matching section by page
|
// Find matching section by page
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue