diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 9c4a8ac..5265d63 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -57,7 +57,8 @@ MVP - Minimum Viable Product Task List - [ ] Web UI - [ ] Progresive Web App - [ ] Editable Dashboard - + - [ ] Panel Icon + **Resource Management** - [ ] CPU Reserve Capacity Allocation diff --git a/sdl-mgr/app/package.json b/sdl-mgr/app/package.json index 55ad9ed..80ce4c7 100644 --- a/sdl-mgr/app/package.json +++ b/sdl-mgr/app/package.json @@ -25,6 +25,7 @@ "@fortawesome/fontawesome-free": "^6.7.2", "aedes": "^0.51.3", "bootstrap": "^5.3.7", + "bootstrap-icons": "^1.13.1", "chart.js": "^4.5.1", "csv-parse": "^5.6.0", "d3": "^7.9.0", diff --git a/sdl-mgr/conf/modules/web.json b/sdl-mgr/conf/modules/web.json index f3710bb..992a2bf 100644 --- a/sdl-mgr/conf/modules/web.json +++ b/sdl-mgr/conf/modules/web.json @@ -5,6 +5,7 @@ "open_browser": false, "weblibs": { "bootstrap":"bootstrap/dist", + "bootstrap-icons":"bootstrap-icons", "chartjs":"chart.js/dist", "d3":"d3/dist", "fontawesome":"@fortawesome/fontawesome-free", diff --git a/sdl-mgr/html/index.html b/sdl-mgr/html/index.html index cdb154d..7c66dfe 100644 --- a/sdl-mgr/html/index.html +++ b/sdl-mgr/html/index.html @@ -9,6 +9,9 @@ + + + diff --git a/sdl-mgr/html/js/weblib.js b/sdl-mgr/html/js/weblib.js index dc6b7c4..46125dc 100644 --- a/sdl-mgr/html/js/weblib.js +++ b/sdl-mgr/html/js/weblib.js @@ -371,54 +371,99 @@ function loadNavTabs() { // =============================== // Side Panel (layout-collapsing) // =============================== -async function loadSidePanel() { - // console.log('DEBUG: loadSidePanel() called'); +// async function loadSidePanel() { +// // 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 = ``; +// toggleBtn.innerHTML = ''; +// } else { +// // toggleBtn.innerHTML = ``; +// toggleBtn.innerHTML = ''; +// } + +// 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 = ` +// // +// // `; + +// toggleBtn.innerHTML = ` +// +// `; +// }; +// } +async function loadSidePanel() { 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 = ``; + toggleBtn.innerHTML = ''; } else { - toggleBtn.innerHTML = ``; + toggleBtn.innerHTML = ''; } - + try { 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(); - 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 = ` - + `; }; } - // ------------------------------- // Find matching section by page // -------------------------------