From 3a2f721f63d1f6c5609e24dabf84387fd777493e Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 14 May 2025 13:44:48 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20=C3=84nderungen=20commited?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/update_mindmap.js | 159 +++++++++++++++++++++--------------- templates/mindmap.html | 35 ++------ 2 files changed, 100 insertions(+), 94 deletions(-) diff --git a/static/js/update_mindmap.js b/static/js/update_mindmap.js index 20bbb52..8ffcc1b 100644 --- a/static/js/update_mindmap.js +++ b/static/js/update_mindmap.js @@ -200,14 +200,16 @@ async function initializeMindmap() { description: node.description, hasChildren: node.has_children, expanded: false, - color: node.color_code, + color: node.color_code || getCategoryColor(node.category), fontColor: '#ffffff', - fontSize: node.is_center ? 20 : 16 + fontSize: node.is_center ? 20 : 16, + isCenter: node.is_center || false } })), // Kanten ...data.edges.map(edge => ({ data: { + id: `edge-${edge.source}-${edge.target}`, source: edge.source, target: edge.target, strength: edge.strength || 0.5 @@ -234,7 +236,7 @@ async function initializeMindmap() { style: mindmapStyles.node.base }, { - selector: 'node[isCenter]', + selector: 'node[?isCenter]', style: mindmapStyles.node.center }, { @@ -249,66 +251,32 @@ async function initializeMindmap() { layout: mindmapStyles.layout.base }); - // Füge neuronale Eigenschaften zu allen Knoten hinzu - cy.nodes().forEach(node => { - const data = node.data(); - // Verwende mindmapConfig für Kategorie-Farben oder einen Standardwert - const categoryColor = data.category && mindmapConfig.categories[data.category] - ? mindmapConfig.categories[data.category].color - : '#60a5fa'; - - node.data({ - ...data, - neuronSize: data.neuronSize || 8, - neuronActivity: data.neuronActivity || 0.8, - refractionPeriod: Math.random() * 300 + 700, - threshold: Math.random() * 0.3 + 0.6, - lastFired: 0, - color: data.color || categoryColor - }); - }); + // Nach der Initialisierung die Knoten sperren + window.cy.nodes().lock(); - // Füge synaptische Eigenschaften zu allen Kanten hinzu - cy.edges().forEach(edge => { - const data = edge.data(); - edge.data({ - ...data, - strength: data.strength || 0.5, - conductionVelocity: Math.random() * 0.5 + 0.3, - latency: Math.random() * 100 + 50 - }); - }); + // Verbessertes Neuronales Design anwenden + applyNeuralNetworkStyle(window.cy); + enhanceMindmap(); + + // Kategorienlegende anzeigen + document.getElementById('categoryLegend').style.display = 'flex'; - // Event-Listener für Knoten-Klicks - cy.on('tap', 'node', async function(evt) { - const node = evt.target; - console.log('Node clicked:', node.id(), 'hasChildren:', node.data('hasChildren'), 'expanded:', node.data('expanded')); - - if (node.data('hasChildren') && !node.data('expanded')) { - await loadSubthemes(node); - } - }); - - // Layout ausführen - cy.layout(mindmapStyles.layout.base).run(); - - // Starte neuronale Aktivitätssimulation - startNeuralActivitySimulation(cy); - - // Mindmap mit echten Daten befüllen (Styles, Farben etc.) - updateMindmap(); - - return true; + return window.cy; } catch (error) { - console.error('Fehler bei der Mindmap-Initialisierung:', error); - showUINotification({ - error: 'Mindmap konnte nicht initialisiert werden', - details: error.message - }, 'error'); - return false; + console.error('Fehler beim Initialisieren der Mindmap:', error); + showUINotification('Fehler beim Initialisieren der Mindmap: ' + error.message, 'error'); + throw error; } } +// Hilfsfunktion zum Abrufen der Kategoriefarbe +function getCategoryColor(category) { + if (!category) return '#666666'; // Standardfarbe + + const categoryData = mindmapConfig.categories[category]; + return categoryData ? categoryData.color : '#666666'; +} + // Warte bis DOM geladen ist document.addEventListener('DOMContentLoaded', function() { console.log('DOMContentLoaded Event ausgelöst'); @@ -1167,7 +1135,7 @@ function showNodeContextMenu(node, position) { startEdgeCreation(node); break; case 'delete': - deleteNode(node); + deleteElement(node); break; } @@ -1387,15 +1355,26 @@ function enableEdgeCreationMode(cy) { }); } -// Funktion zum Löschen eines Knotens -function deleteNode(node) { - if (!node) return; +// Funktion zum Löschen eines Elements (Knoten oder Kante) +function deleteElement(element) { + if (!element) return; - // Frage den Benutzer, ob er den Knoten wirklich löschen möchte - if (confirm(`Möchtest du den Knoten "${node.data('label')}" wirklich löschen?`)) { - // Entferne den Knoten und alle zugehörigen Kanten - node.remove(); - showUINotification('Knoten wurde gelöscht', 'success'); + // Sicherheitsabfrage für Knoten + if (element.isNode()) { + if (confirm('Möchten Sie diesen Knoten wirklich löschen? Alle Verbindungen werden ebenfalls entfernt.')) { + // Entferne alle verbundenen Kanten + element.connectedEdges().remove(); + // Entferne den Knoten + element.remove(); + showUINotification('Knoten wurde gelöscht', 'success'); + } + } + // Sicherheitsabfrage für Kanten + else if (element.isEdge()) { + if (confirm('Möchten Sie diese Verbindung wirklich löschen?')) { + element.remove(); + showUINotification('Verbindung wurde gelöscht', 'success'); + } } } @@ -1804,4 +1783,52 @@ function toggleLegend() { legend.style.display = isVisible ? 'none' : 'flex'; showUINotification(isVisible ? 'Legende ausgeblendet' : 'Legende eingeblendet', 'info', 1000); } +} + +// Funktion zum Zurücksetzen aller Änderungen und Neuinitialisierung der Mindmap +async function resetMindmap() { + try { + // Warnmeldung anzeigen + if (!confirm('Möchten Sie die Mindmap wirklich zurücksetzen? Alle nicht gespeicherten Änderungen gehen verloren.')) { + return false; + } + + // UI-Elemente aktualisieren + const editModeIndicator = document.getElementById('editModeIndicator'); + const toggleEditModeBtn = document.getElementById('toggleEditMode'); + const saveChangesBtn = document.getElementById('saveChanges'); + const cancelEditBtn = document.getElementById('cancelEdit'); + const crudPanel = document.getElementById('crudPanel'); + + // Bearbeitungsmodus deaktivieren + if (editModeIndicator) editModeIndicator.classList.remove('active'); + if (toggleEditModeBtn) toggleEditModeBtn.style.display = 'inline-flex'; + if (saveChangesBtn) saveChangesBtn.style.display = 'none'; + if (cancelEditBtn) cancelEditBtn.style.display = 'none'; + if (crudPanel) crudPanel.style.display = 'none'; + + // Loader und Statusmeldung anzeigen + const loader = document.getElementById('loader'); + const statusMessage = document.getElementById('statusMessage'); + + if (loader) loader.style.display = 'block'; + if (statusMessage) { + statusMessage.textContent = 'Setze Mindmap zurück...'; + statusMessage.style.display = 'block'; + } + + // Mindmap neu initialisieren + await initializeMindmap(); + + // Loader und Statusmeldung ausblenden + if (loader) loader.style.display = 'none'; + if (statusMessage) statusMessage.style.display = 'none'; + + showUINotification('Mindmap wurde zurückgesetzt', 'success'); + return true; + } catch (error) { + console.error('Fehler beim Zurücksetzen der Mindmap:', error); + showUINotification('Fehler beim Zurücksetzen der Mindmap: ' + error.message, 'error'); + return false; + } } \ No newline at end of file diff --git a/templates/mindmap.html b/templates/mindmap.html index 84cbf50..c286edc 100644 --- a/templates/mindmap.html +++ b/templates/mindmap.html @@ -456,7 +456,7 @@ -
+
Philosophie @@ -637,21 +637,7 @@ document.addEventListener('DOMContentLoaded', function() { // Bearbeitungsmodus abbrechen cancelEditBtn.addEventListener('click', function() { - if (confirm('Möchten Sie den Bearbeitungsmodus wirklich verlassen? Nicht gespeicherte Änderungen gehen verloren.')) { - isEditMode = false; - crudPanel.style.display = 'none'; - editModeIndicator.classList.remove('active'); - toggleEditModeBtn.style.display = 'inline-flex'; - saveChangesBtn.style.display = 'none'; - cancelEditBtn.style.display = 'none'; - window.cy.container().classList.remove('editing-mode'); - - // Neuinitialisierung der Mindmap - initializeMindmap().then(() => { - loader.style.display = 'none'; - statusMessage.style.display = 'none'; - }); - } + resetMindmap(); }); // CRUD-Funktionen @@ -675,13 +661,7 @@ document.addEventListener('DOMContentLoaded', function() { deleteElementBtn.addEventListener('click', function() { if (isEditMode && selectedElement) { - if (selectedElement.isNode()) { - deleteNode(selectedElement); - } else if (selectedElement.isEdge()) { - if (confirm('Möchten Sie diese Verbindung wirklich löschen?')) { - selectedElement.remove(); - } - } + deleteElement(selectedElement); } }); @@ -693,20 +673,19 @@ document.addEventListener('DOMContentLoaded', function() { // Zoom-Funktionen document.getElementById('zoomIn').addEventListener('click', function() { - if (window.cy) window.cy.zoom(window.cy.zoom() * 1.2); + if (window.cy) zoomIn(window.cy); }); document.getElementById('zoomOut').addEventListener('click', function() { - if (window.cy) window.cy.zoom(window.cy.zoom() * 0.8); + if (window.cy) zoomOut(window.cy); }); document.getElementById('resetView').addEventListener('click', function() { - if (window.cy) window.cy.fit(); + if (window.cy) resetView(window.cy); }); document.getElementById('toggleLegend').addEventListener('click', function() { - const legend = document.getElementById('categoryLegend'); - legend.style.display = legend.style.display === 'none' ? 'flex' : 'none'; + toggleLegend(); }); // Funktionen für Knoteninfo-Panel