document.addEventListener("DOMContentLoaded", function() { document.querySelectorAll('.dropdown-submenu a.dropdown-toggle').forEach(function(element) { element.addEventListener('click', function(e) { if (!this.nextElementSibling.classList.contains('show')) { this.parentElement.parentElement.querySelectorAll('.dropdown-menu').forEach(function(menu) { menu.classList.remove('show'); }); } this.nextElementSibling.classList.toggle('show'); e.stopPropagation(); }); }); }); // Function to handle checkbox state changes function handleCheckboxChange() { let checkedNodeInfo = []; document.querySelectorAll('.dropdown-item input[type="checkbox"]').forEach((checkbox) => { if (checkbox.checked) { checkedNodeInfo.push(checkbox.id); } }); console.log("Checked nodes:", checkedNodeInfo); // Use this array in your app // updateGrid(checkedNodeInfo); } // Attach event listeners to checkboxes document.querySelectorAll('.dropdown-item input[type="checkbox"]').forEach((checkbox) => { checkbox.addEventListener('change', handleCheckboxChange); }); let firstNode = null; let secondNode = null; const socket = new WebSocket("ws://" + location.host); socket.onmessage = (event) => { const { nodeData, nodeStatus } = JSON.parse(event.data); renderGrid(nodeData, nodeStatus); }; function renderGrid(nodeData, nodeStatus) { const gridContainer = document.getElementById("grid"); gridContainer.innerHTML = ""; nodeData.forEach((row, y) => { const rowDiv = document.createElement("div"); rowDiv.className = "row"; row.forEach((cell, x) => { const cellDiv = document.createElement("div"); cellDiv.className = "node"; cellDiv.innerHTML = cell || "-"; cellDiv.style.backgroundColor = nodeStatus?.[y]?.[x] || "white"; const indicator = document.createElement("div"); indicator.className = "indicator"; cellDiv.appendChild(indicator); const nodeKey = `${y}-${x}`; if (nodeKey === firstNode) { cellDiv.classList.add("selected"); indicator.style.display = "block"; indicator.innerText = "1"; } else if (nodeKey === secondNode) { cellDiv.classList.add("selected"); indicator.style.display = "block"; indicator.innerText = "2"; } cellDiv.addEventListener("click", () => { if (nodeKey === firstNode) { firstNode = null; secondNode = null; } else if (nodeKey === secondNode) { secondNode = null; } else if (!firstNode) { firstNode = nodeKey; } else { secondNode = nodeKey; } renderGrid(nodeData, nodeStatus); }); rowDiv.appendChild(cellDiv); }); gridContainer.appendChild(rowDiv); }); } // function updateGrid(selectedMetrics) { // document.querySelectorAll('.node').forEach(node => { // let nodeId = node.getAttribute('data-node-id'); // node.innerHTML = nodeId; // if (selectedMetrics.includes("temp")) { // node.innerHTML += "
Temp: 45°C"; // } // if (selectedMetrics.includes("cutil")) { // node.innerHTML += "
CPU: 75%"; // } // if (selectedMetrics.includes("mutil")) { // node.innerHTML += "
Mem: 60%"; // } // if (selectedMetrics.includes("uptime")) { // node.innerHTML += "
Uptime: 2d 4h"; // } // }); // } // Initialize with an empty grid renderGrid( Array.from({ length: 5 }, () => Array(5).fill(null)), Array.from({ length: 5 }, () => Array(5).fill("white")) );