fix networkmap
Deploy / deploy (push) Successful in 38s

This commit is contained in:
2026-05-07 18:59:16 +02:00
parent ab631b8b1b
commit 2e2f08e435
+27 -27
View File
@@ -377,14 +377,14 @@ function getNodeColorVal(type) {
// ==================== CANVAS RENDERING ==================== // ==================== CANVAS RENDERING ====================
const NODE_FA_ICONS = { const NODE_FA_ICONS = {
host: { path: 'M-7,-7h14v10h-14z M-5,3h3v4h-3z M2,3h3v4h-3z M0,-10v-3', color: '#3b82f6' }, host: { icon: '\uf108', color: '#3b82f6' },
server: { path: 'M-8,-8h16v4h-16z M-8,-2h16v4h-16z M-8,4h16v4h-16z M-8,10h16v4h-16z', color: '#8b5cf6' }, server: { icon: '\uf233', color: '#8b5cf6' },
router: { path: 'M-10,0l10,-8v5h6v6h-6v5z', color: '#f59e0b' }, router: { icon: '\uf4d8', color: '#f59e0b' },
firewall: { path: 'M-9,-4l3,-4h12l3,4v8l-3,4h-12l-3,-4z M-4,-2h8v4h-8z', color: '#ef4444' }, firewall: { icon: '\uf6ed', color: '#ef4444' },
switch: { path: 'M-10,-4h20v2h-20z M-10,0h20v2h-20z M-10,4h20v2h-20z', color: '#06b6d4' }, switch: { icon: '\uf2d1', color: '#06b6d4' },
cloud: { path: 'M-2,-9c-5,0-8,3-7,7c-2,2-3,5-1,8h5c2,3,7,3,10,2h5c3-2,3-7,1-9c1-4-2-8-5-8c-1,0-3,1-4,2c-1-1-2-2-4-2z', color: '#22c55e' }, cloud: { icon: '\uf0c2', color: '#22c55e' },
endpoint: { path: 'M-9,-7c0-2,2-4,4-4h10c2,0,4,2,4,4v14c0,2-2,4-4,4h-10c-2,0-4-2-4-4z M-5,7h10v2h-10z M-5,3h10v2h-10z M0,-2c2,0,3,1,3,3c0,2-1,3-3,3c-2,0-3-1-3-3c0-2,1-3,3-3z', color: '#ec4899' }, endpoint: { icon: '\uf109', color: '#ec4899' },
other: { path: 'M-6,-6h12v12h-12z', color: '#6b7280' } other: { icon: '\uf111', color: '#6b7280' }
}; };
function buildCanvasGraph() { function buildCanvasGraph() {
@@ -394,7 +394,7 @@ function buildCanvasGraph() {
id: n.id, label: n.label, ip: n.ip_address, id: n.id, label: n.label, ip: n.ip_address,
type: n.node_type, status: n.status, group: n.group_name, type: n.node_type, status: n.status, group: n.group_name,
x: parseFloat(n.pos_x) || 100, y: parseFloat(n.pos_y) || 100, x: parseFloat(n.pos_x) || 100, y: parseFloat(n.pos_y) || 100,
iconPath: fa.path, color: fa.color, w: 36, h: 36 icon: fa.icon, color: fa.color, w: 36, h: 36
}; };
}); });
@@ -499,22 +499,18 @@ function drawCanvasNode(n) {
ctx.stroke(); ctx.stroke();
ctx.shadowBlur = 0; ctx.shadowBlur = 0;
// Draw icon // Draw icon using Font Awesome
ctx.save(); ctx.save();
ctx.translate(n.x, n.y); ctx.font = '500 22px "Font Awesome 6 Free", "FontAwesome", "Font Awesome 5 Free", sans-serif';
const s = 1.2; ctx.textAlign = 'center';
ctx.scale(s, s); ctx.textBaseline = 'middle';
const path = new Path2D(n.iconPath);
ctx.fillStyle = n.color; ctx.fillStyle = n.color;
ctx.lineWidth = 1.8; ctx.fillText(n.icon, n.x, n.y);
ctx.strokeStyle = n.color;
ctx.fill(path);
ctx.stroke(path);
ctx.restore(); ctx.restore();
// Status dot // Status dot
ctx.beginPath(); ctx.beginPath();
ctx.arc(17, -17, 5, 0, Math.PI * 2); ctx.arc(n.x + 17, n.y - 17, 5, 0, Math.PI * 2);
const sc = { online: '#22c55e', offline: '#6b7280', unknown: '#9ca3af', compromised: '#ef4444', monitoring: '#eab308' }; const sc = { online: '#22c55e', offline: '#6b7280', unknown: '#9ca3af', compromised: '#ef4444', monitoring: '#eab308' };
ctx.fillStyle = sc[n.status] || '#9ca3af'; ctx.fillStyle = sc[n.status] || '#9ca3af';
ctx.fill(); ctx.fill();
@@ -571,9 +567,6 @@ function onMouseDown(e) {
const mx = e.clientX - rect.left - panX; const mx = e.clientX - rect.left - panX;
const my = e.clientY - rect.top - panY; const my = e.clientY - rect.top - panY;
// Always build graph fresh before interacting
buildCanvasGraph();
const resize = getShapeResizeHandleAt(mx, my); const resize = getShapeResizeHandleAt(mx, my);
if (resize) { if (resize) {
dragType = 'resize'; dragTarget = resize.shape; dragType = 'resize'; dragTarget = resize.shape;
@@ -613,11 +606,15 @@ function onMouseMove(e) {
dragTarget.x = e.clientX - rect.left - panX - dragOffX; dragTarget.x = e.clientX - rect.left - panX - dragOffX;
dragTarget.y = e.clientY - rect.top - panY - dragOffY; dragTarget.y = e.clientY - rect.top - panY - dragOffY;
renderNetwork(); renderNetwork();
} else if (dragType === 'shape' && dragTarget) { return;
}
if (dragType === 'shape' && dragTarget) {
dragTarget.x = e.clientX - rect.left - panX - dragOffX; dragTarget.x = e.clientX - rect.left - panX - dragOffX;
dragTarget.y = e.clientY - rect.top - panY - dragOffY; dragTarget.y = e.clientY - rect.top - panY - dragOffY;
renderNetwork(); renderNetwork();
} else if (dragType === 'resize' && dragTarget) { return;
}
if (dragType === 'resize' && dragTarget) {
const dx = e.clientX - rect.left - panX - dragOffX; const dx = e.clientX - rect.left - panX - dragOffX;
const dy = e.clientY - rect.top - panY - dragOffY; const dy = e.clientY - rect.top - panY - dragOffY;
const s = dragTarget; const s = dragTarget;
@@ -631,16 +628,19 @@ function onMouseMove(e) {
if (nh < 50) { if (o.cy === 0) ny = o.y + o.h - 50; nh = 50; } if (nh < 50) { if (o.cy === 0) ny = o.y + o.h - 50; nh = 50; }
s.x = nx; s.y = ny; s.w = nw; s.h = nh; s.x = nx; s.y = ny; s.w = nw; s.h = nh;
renderNetwork(); renderNetwork();
} else if (isPanning) { return;
}
if (isPanning) {
panX = e.clientX - panStartX; panY = e.clientY - panStartY; panX = e.clientX - panStartX; panY = e.clientY - panStartY;
renderNetwork(); renderNetwork();
} else { return;
}
const mx = e.clientX - rect.left - panX; const mx = e.clientX - rect.left - panX;
const my = e.clientY - rect.top - panY; const my = e.clientY - rect.top - panY;
if (getShapeResizeHandleAt(mx, my)) canvas.style.cursor = 'nwse-resize'; if (getShapeResizeHandleAt(mx, my)) canvas.style.cursor = 'nwse-resize';
else if (getCanvasNodeAt(mx, my) || getShapeAt(mx, my)) canvas.style.cursor = 'pointer'; else if (getCanvasNodeAt(mx, my) || getShapeAt(mx, my)) canvas.style.cursor = 'pointer';
else canvas.style.cursor = 'grab'; else canvas.style.cursor = 'grab';
}
} }
function onMouseUp(e) { function onMouseUp(e) {