chore: Änderungen commited

This commit is contained in:
2025-05-14 13:44:48 +02:00
parent 5933195196
commit 3a2f721f63
2 changed files with 100 additions and 94 deletions

View File

@@ -200,14 +200,16 @@ async function initializeMindmap() {
description: node.description, description: node.description,
hasChildren: node.has_children, hasChildren: node.has_children,
expanded: false, expanded: false,
color: node.color_code, color: node.color_code || getCategoryColor(node.category),
fontColor: '#ffffff', fontColor: '#ffffff',
fontSize: node.is_center ? 20 : 16 fontSize: node.is_center ? 20 : 16,
isCenter: node.is_center || false
} }
})), })),
// Kanten // Kanten
...data.edges.map(edge => ({ ...data.edges.map(edge => ({
data: { data: {
id: `edge-${edge.source}-${edge.target}`,
source: edge.source, source: edge.source,
target: edge.target, target: edge.target,
strength: edge.strength || 0.5 strength: edge.strength || 0.5
@@ -234,7 +236,7 @@ async function initializeMindmap() {
style: mindmapStyles.node.base style: mindmapStyles.node.base
}, },
{ {
selector: 'node[isCenter]', selector: 'node[?isCenter]',
style: mindmapStyles.node.center style: mindmapStyles.node.center
}, },
{ {
@@ -249,66 +251,32 @@ async function initializeMindmap() {
layout: mindmapStyles.layout.base layout: mindmapStyles.layout.base
}); });
// Füge neuronale Eigenschaften zu allen Knoten hinzu // Nach der Initialisierung die Knoten sperren
cy.nodes().forEach(node => { window.cy.nodes().lock();
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({ // Verbessertes Neuronales Design anwenden
...data, applyNeuralNetworkStyle(window.cy);
neuronSize: data.neuronSize || 8, enhanceMindmap();
neuronActivity: data.neuronActivity || 0.8,
refractionPeriod: Math.random() * 300 + 700,
threshold: Math.random() * 0.3 + 0.6,
lastFired: 0,
color: data.color || categoryColor
});
});
// Füge synaptische Eigenschaften zu allen Kanten hinzu // Kategorienlegende anzeigen
cy.edges().forEach(edge => { document.getElementById('categoryLegend').style.display = 'flex';
const data = edge.data();
edge.data({
...data,
strength: data.strength || 0.5,
conductionVelocity: Math.random() * 0.5 + 0.3,
latency: Math.random() * 100 + 50
});
});
// Event-Listener für Knoten-Klicks return window.cy;
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;
} catch (error) { } catch (error) {
console.error('Fehler bei der Mindmap-Initialisierung:', error); console.error('Fehler beim Initialisieren der Mindmap:', error);
showUINotification({ showUINotification('Fehler beim Initialisieren der Mindmap: ' + error.message, 'error');
error: 'Mindmap konnte nicht initialisiert werden', throw error;
details: error.message
}, 'error');
return false;
} }
} }
// 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 // Warte bis DOM geladen ist
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
console.log('DOMContentLoaded Event ausgelöst'); console.log('DOMContentLoaded Event ausgelöst');
@@ -1167,7 +1135,7 @@ function showNodeContextMenu(node, position) {
startEdgeCreation(node); startEdgeCreation(node);
break; break;
case 'delete': case 'delete':
deleteNode(node); deleteElement(node);
break; break;
} }
@@ -1387,16 +1355,27 @@ function enableEdgeCreationMode(cy) {
}); });
} }
// Funktion zum Löschen eines Knotens // Funktion zum Löschen eines Elements (Knoten oder Kante)
function deleteNode(node) { function deleteElement(element) {
if (!node) return; if (!element) return;
// Frage den Benutzer, ob er den Knoten wirklich löschen möchte // Sicherheitsabfrage für Knoten
if (confirm(`Möchtest du den Knoten "${node.data('label')}" wirklich löschen?`)) { if (element.isNode()) {
// Entferne den Knoten und alle zugehörigen Kanten if (confirm('Möchten Sie diesen Knoten wirklich löschen? Alle Verbindungen werden ebenfalls entfernt.')) {
node.remove(); // Entferne alle verbundenen Kanten
element.connectedEdges().remove();
// Entferne den Knoten
element.remove();
showUINotification('Knoten wurde gelöscht', 'success'); 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');
}
}
} }
// Funktion zum Löschen ausgewählter Elemente // Funktion zum Löschen ausgewählter Elemente
@@ -1805,3 +1784,51 @@ function toggleLegend() {
showUINotification(isVisible ? 'Legende ausgeblendet' : 'Legende eingeblendet', 'info', 1000); 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;
}
}

View File

@@ -456,7 +456,7 @@
</div> </div>
<!-- Kategorie-Legende --> <!-- Kategorie-Legende -->
<div id="categoryLegend" class="category-legend"> <div id="categoryLegend" class="category-legend" style="display: flex;">
<div class="category-item"> <div class="category-item">
<div class="category-color" style="background-color: #9F7AEA;"></div> <div class="category-color" style="background-color: #9F7AEA;"></div>
<span>Philosophie</span> <span>Philosophie</span>
@@ -637,21 +637,7 @@ document.addEventListener('DOMContentLoaded', function() {
// Bearbeitungsmodus abbrechen // Bearbeitungsmodus abbrechen
cancelEditBtn.addEventListener('click', function() { cancelEditBtn.addEventListener('click', function() {
if (confirm('Möchten Sie den Bearbeitungsmodus wirklich verlassen? Nicht gespeicherte Änderungen gehen verloren.')) { resetMindmap();
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';
});
}
}); });
// CRUD-Funktionen // CRUD-Funktionen
@@ -675,13 +661,7 @@ document.addEventListener('DOMContentLoaded', function() {
deleteElementBtn.addEventListener('click', function() { deleteElementBtn.addEventListener('click', function() {
if (isEditMode && selectedElement) { if (isEditMode && selectedElement) {
if (selectedElement.isNode()) { deleteElement(selectedElement);
deleteNode(selectedElement);
} else if (selectedElement.isEdge()) {
if (confirm('Möchten Sie diese Verbindung wirklich löschen?')) {
selectedElement.remove();
}
}
} }
}); });
@@ -693,20 +673,19 @@ document.addEventListener('DOMContentLoaded', function() {
// Zoom-Funktionen // Zoom-Funktionen
document.getElementById('zoomIn').addEventListener('click', function() { 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() { 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() { document.getElementById('resetView').addEventListener('click', function() {
if (window.cy) window.cy.fit(); if (window.cy) resetView(window.cy);
}); });
document.getElementById('toggleLegend').addEventListener('click', function() { document.getElementById('toggleLegend').addEventListener('click', function() {
const legend = document.getElementById('categoryLegend'); toggleLegend();
legend.style.display = legend.style.display === 'none' ? 'flex' : 'none';
}); });
// Funktionen für Knoteninfo-Panel // Funktionen für Knoteninfo-Panel