From 5372fe220e40fc7bc2cf623922f4f7698a5c69bb Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sun, 27 Apr 2025 07:18:32 +0200 Subject: [PATCH] Add flash message API and enhance mindmap visualization: Implement a new API endpoint for retrieving flash messages, integrate flash message display in the mindmap visualization, and improve user feedback with dynamic notifications. Update UI elements for better responsiveness and visual appeal, while removing obsolete background image references. --- website/__pycache__/app.cpython-311.pyc | Bin 51172 -> 51839 bytes website/app.py | 27 +++ website/static/mindmap.js | 224 +++++++++++++++++++++++- website/static/network-animation.js | 2 +- website/static/network-background.js | 32 +--- website/templates/base.html | 2 +- website/templates/index.html | 117 +++++++------ website/templates/mindmap.html | 4 +- website/templates/search.html | 80 ++++----- 9 files changed, 363 insertions(+), 125 deletions(-) diff --git a/website/__pycache__/app.cpython-311.pyc b/website/__pycache__/app.cpython-311.pyc index 87c2fdef3a89e7e04b222d0ec4a3c855b145656d..c43e69d683bc8ed6fb8089771dc3e9637d7077c5 100644 GIT binary patch delta 5096 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 b$>g>~oV63czmAIW5a}E-dE|(576SNx1Hvrz delta 4663 zcmaJ_4Rlo15#GDIZ?k!uO&~!2Fc6ZMu#tZb2n0chiix5v37`R4Lf*1jVRyrQi6;0H z)DQ(c1sP9iX;cyvqEIM#iUDd-sT8eMP(k}zky>lpBbBylYw@&nW?qsFo9G_$W$wN6 ze`n@yxb(Q=lg*Cg-CnP1!%y{LZ_QPk9!t&;TMrbz=yC=IYct?lbtL@5H5?{5(`aKR zZ(Ng53&NcSuO$?Z-X(0dJ@{jNw7Jc;T}bZf*|1dxwUTCAWeqG>GlyJvIX5c2o)n4@ zor)W_y3^qq_ssOtpxArmE<38hAM1mxWo$b=F-zP;jHQV)MIN*y-U<&TW{6w)(5q%; zeoy=UfZ_{~V>+G=th}7%52#tbipzb}7WRv1jkX9QlH_yV;yCWx`f=+V+hTNC+|EWG z@ML9FYI*&g)Rr{EG0zxEt+<0(hb3iYR(?x7%a|jWl;x<@N?}sc6gZTWC6-faK1(Vd z9OqYcGtBp1wbeZoTD;>iZwI|TaUZ-gb68H!F$)jxj~uY9^>Mmj(qs! z>PBTd7S_A4V%n2RD^l-+GQCB45~<%ATc#)5)n|}Ahd+7*F3lTfoGEU%4{yh{X^%#H zP8mj0MhKb-+5u*bb(74qLOu;AW=YWw#k0q|p2My4Hlud-e;h6nm%AZaGR8%mvIE*m z(o=UJ=^HA?(@r@-8~kKmE}SnJQNjWRw3kE>BybVzM9?V%IXSWff0;=EEmY?Zhay_I zs#fmBEeH0bF2vRwCmBuG4R;9AI$i99)AMqa{dk^XT%2dOyG>VBZEYZ;fhe1zn(peV zx7mK4V4MJiF+E=WfofJWQq%L%P4Ve#PogwLE}pxriW^jxOSHtPVs> zcU?`iK3G$y%Ok|nNpJ|kr^pwGW^K+$R13%>Flv65${Yk!jqB&1aiY;H7GxwoO}vz3 zNNG)j@&$WE*Vgj%VXxEn8w9^5AhYsK7*l?mSPSdR*G}Txu?Zy-tqbVBEBdCGxcTBz ziQ*92VPZv|cmozzjBMh-;$l)8{IyX%R2PayOtrC>md8oMO9a0lm`Jb!!RMCj`h!TD zDut>0wW_)*j$0n3-Nbr5ApM+yce=UIQ@;jZRE$-NazE!{?ka8l%lblA5i{ndq~f1=Iav|6&4w`b3#pCwNAiS2zv%X0)= zEg!(!)nk;u;QFmj?YP|&^X^x0YUTUiQrj;Dv!)DK^`!SV1m_9fLg+giA6dvY_rrfpK^b8)}QhiT)Y4bI;) zP31#^HO9Dmr#rGKG}FB*(0F%LYC1k1^*H3Eb%kBf+%$S_8%gsdRIms8JP~$U(yL?{ z=Oj64xs)VgMbHJGH_glBwxJ=(y3B;`w?ry%%en$33FRI(8rOa3NN2UIjC7ke$vV3r z+*~m1^0S_kj^=_=KB0TKtQ3mKo^>HaRS>*Dz)!(wqGIm_$9MpTVK!^Sq_WRk2JHBN z)=`J)?RjPWk*aV&deCoO#eJa-kp48uA;uEGoE&i?ajL!SRCrcn#o24( z?8h18-sW5W5y`np4I5Ofx0@2cUYTC}Zm}X7T@|j9s{$IkrYk6uLm%s#jwcwX^Y>K4 zaFjf5$8`J=nbz69av9D|e|N+uA(`~Y92-Q-F7hOWsKE$0bm9Vuu`_2gv6IiHo1Saz zcfCRmCCNd3CLR~eXdCF8(_NfaE{_?c+UKzb#CMzFOk^XwRZBGEpSoIoW)UKG$*fj2}GygxzJi028;R zv8C*OQ;VMk4?M6fN6AI8$;Pg2+w9ZY$SjuG%R5@dRJfzfr_8|h{jjMmUmSyk38J8omg54o+NmN;5mZ51p5gN5_A%n1RoQ8NuDMPNU$ZB*j?rs&MC}c$O77 f&K5YA6(yV { @@ -67,6 +71,183 @@ class MindMapVisualization { } } + // Flash-Nachrichten-System einrichten + setupFlashMessages() { + // Flash-Container erstellen, falls er noch nicht existiert + if (!document.getElementById('mindmap-flash-container')) { + this.flashContainer = document.createElement('div'); + this.flashContainer.id = 'mindmap-flash-container'; + this.flashContainer.className = 'mindmap-flash-container'; + this.flashContainer.style.position = 'fixed'; + this.flashContainer.style.top = '20px'; + this.flashContainer.style.right = '20px'; + this.flashContainer.style.zIndex = '1000'; + this.flashContainer.style.maxWidth = '350px'; + this.flashContainer.style.display = 'flex'; + this.flashContainer.style.flexDirection = 'column'; + this.flashContainer.style.gap = '10px'; + document.body.appendChild(this.flashContainer); + } else { + this.flashContainer = document.getElementById('mindmap-flash-container'); + } + + // Prüfen, ob Server-seitige Flash-Nachrichten existieren und anzeigen + this.checkForServerFlashMessages(); + } + + // Prüft auf Server-seitige Flash-Nachrichten + async checkForServerFlashMessages() { + try { + const response = await fetch('/api/get_flash_messages'); + if (response.ok) { + const messages = await response.json(); + messages.forEach(message => { + this.showFlash(message.message, message.category); + }); + } + } catch (err) { + console.error('Fehler beim Abrufen der Flash-Nachrichten:', err); + } + } + + // Zeigt eine Flash-Nachricht an + showFlash(message, type = 'info', duration = 5000) { + if (!this.flashContainer) return; + + const flashElement = document.createElement('div'); + flashElement.className = `mindmap-flash flash-${type}`; + flashElement.style.padding = '12px 18px'; + flashElement.style.borderRadius = '8px'; + flashElement.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.15)'; + flashElement.style.display = 'flex'; + flashElement.style.alignItems = 'center'; + flashElement.style.justifyContent = 'space-between'; + flashElement.style.fontSize = '14px'; + flashElement.style.fontWeight = '500'; + flashElement.style.backdropFilter = 'blur(10px)'; + flashElement.style.opacity = '0'; + flashElement.style.transform = 'translateY(-20px)'; + flashElement.style.transition = 'all 0.3s ease'; + + // Spezifische Stile je nach Nachrichtentyp + switch(type) { + case 'success': + flashElement.style.backgroundColor = 'rgba(34, 197, 94, 0.9)'; + flashElement.style.borderLeft = '5px solid #16a34a'; + flashElement.style.color = 'white'; + break; + case 'error': + flashElement.style.backgroundColor = 'rgba(239, 68, 68, 0.9)'; + flashElement.style.borderLeft = '5px solid #dc2626'; + flashElement.style.color = 'white'; + break; + case 'warning': + flashElement.style.backgroundColor = 'rgba(245, 158, 11, 0.9)'; + flashElement.style.borderLeft = '5px solid #d97706'; + flashElement.style.color = 'white'; + break; + default: // info + flashElement.style.backgroundColor = 'rgba(59, 130, 246, 0.9)'; + flashElement.style.borderLeft = '5px solid #2563eb'; + flashElement.style.color = 'white'; + } + + // Icon je nach Nachrichtentyp + let icon = ''; + switch(type) { + case 'success': + icon = ''; + break; + case 'error': + icon = ''; + break; + case 'warning': + icon = ''; + break; + default: + icon = ''; + } + + // Inhalt der Nachricht mit Icon + const contentWrapper = document.createElement('div'); + contentWrapper.style.display = 'flex'; + contentWrapper.style.alignItems = 'center'; + contentWrapper.style.gap = '12px'; + + const iconElement = document.createElement('div'); + iconElement.className = 'flash-icon'; + iconElement.innerHTML = icon; + + const textElement = document.createElement('div'); + textElement.className = 'flash-text'; + textElement.textContent = message; + + contentWrapper.appendChild(iconElement); + contentWrapper.appendChild(textElement); + + // Schließen-Button + const closeButton = document.createElement('button'); + closeButton.className = 'flash-close'; + closeButton.innerHTML = ''; + closeButton.style.background = 'none'; + closeButton.style.border = 'none'; + closeButton.style.color = 'currentColor'; + closeButton.style.cursor = 'pointer'; + closeButton.style.marginLeft = '15px'; + closeButton.style.padding = '3px'; + closeButton.style.fontSize = '14px'; + closeButton.style.opacity = '0.7'; + closeButton.style.transition = 'opacity 0.2s'; + + closeButton.addEventListener('mouseover', () => { + closeButton.style.opacity = '1'; + }); + + closeButton.addEventListener('mouseout', () => { + closeButton.style.opacity = '0.7'; + }); + + closeButton.addEventListener('click', () => { + this.removeFlash(flashElement); + }); + + // Zusammenfügen + flashElement.appendChild(contentWrapper); + flashElement.appendChild(closeButton); + + // Zum Container hinzufügen + this.flashContainer.appendChild(flashElement); + + // Animation einblenden + setTimeout(() => { + flashElement.style.opacity = '1'; + flashElement.style.transform = 'translateY(0)'; + }, 10); + + // Automatisches Ausblenden nach der angegebenen Zeit + if (duration > 0) { + setTimeout(() => { + this.removeFlash(flashElement); + }, duration); + } + + return flashElement; + } + + // Entfernt eine Flash-Nachricht mit Animation + removeFlash(flashElement) { + if (!flashElement) return; + + flashElement.style.opacity = '0'; + flashElement.style.transform = 'translateY(-20px)'; + + setTimeout(() => { + if (flashElement.parentNode) { + flashElement.parentNode.removeChild(flashElement); + } + }, 300); + } + // Standardknoten als Fallback einrichten, falls die API nicht reagiert setupDefaultNodes() { // Basis-Mindmap mit Hauptthemen @@ -301,6 +482,9 @@ class MindMapVisualization { // Lade-Animation ausblenden this.hideLoading(); + + // Erfolgreiche Ladung melden + this.showFlash('Mindmap-Daten erfolgreich geladen', 'success'); } catch (error) { console.error('Fehler beim Laden der Mindmap-Daten:', error); @@ -310,6 +494,7 @@ class MindMapVisualization { // Fehler anzeigen this.showError('Mindmap-Daten konnten nicht geladen werden. Verwende Standarddaten.'); + this.showFlash('Fehler beim Laden der Mindmap-Daten. Standarddaten werden angezeigt.', 'error'); // Visualisierung auch im Fehlerfall aktualisieren this.updateVisualization(); @@ -992,6 +1177,9 @@ class MindMapVisualization { window.onNodeDeselected(); } + // Flash-Nachricht für abgewählten Knoten + this.showFlash('Knotenauswahl aufgehoben', 'info', 2000); + return; } @@ -1083,6 +1271,7 @@ class MindMapVisualization { if (!thoughtContainer || !thoughtsList) { console.error('Gedanken-Container nicht gefunden'); + this.showFlash('Fehler: Gedanken-Container nicht gefunden', 'error'); return; } @@ -1118,6 +1307,9 @@ class MindMapVisualization { thoughtsList.innerHTML = ''; } + // Flash-Nachricht über ausgewählten Knoten + this.showFlash(`Knoten "${node.name}" ausgewählt`, 'info'); + // Verzögerung für Animation setTimeout(() => { // API-Aufruf für echte Daten aus der Datenbank @@ -1133,6 +1325,7 @@ class MindMapVisualization { this.renderThoughts(thoughts, thoughtsList); } else { this.renderEmptyThoughts(thoughtsList, node); + this.showFlash(`Keine Gedanken zu "${node.name}" gefunden`, 'warning'); } }) .catch(error => { @@ -1141,6 +1334,7 @@ class MindMapVisualization { loadingIndicator.style.display = 'none'; } this.renderErrorState(thoughtsList); + this.showFlash('Fehler beim Laden der Gedanken. Bitte versuche es später erneut.', 'error'); }); }, 600); // Verzögerung für bessere UX } @@ -1152,6 +1346,7 @@ class MindMapVisualization { const id = nodeId.toString().split('_')[1]; if (!id) { console.warn('Ungültige Node-ID: ', nodeId); + this.showFlash('Ungültige Knoten-ID: ' + nodeId, 'warning'); return []; } @@ -1164,9 +1359,17 @@ class MindMapVisualization { const thoughts = await response.json(); console.log('Geladene Gedanken für Knoten:', thoughts); + + if (thoughts.length > 0) { + this.showFlash(`${thoughts.length} Gedanken zum Thema geladen`, 'info'); + } else { + this.showFlash('Keine Gedanken für diesen Knoten gefunden', 'info'); + } + return thoughts; } catch (error) { console.error('Fehler beim Laden der Gedanken für Knoten:', error); + this.showFlash('Fehler beim Laden der Gedanken', 'error'); return []; } } @@ -1282,10 +1485,16 @@ class MindMapVisualization { d3.zoom().transform, d3.zoomIdentity.translate(x, y).scale(scale) ); + + // Flash-Nachricht für Zentrierung + if (node && node.name) { + this.showFlash(`Ansicht auf "${node.name}" zentriert`, 'info', 2000); + } } // Fehlermeldung anzeigen showError(message) { + // Standard-Fehlermeldung als Banner const errorBanner = d3.select('body').selectAll('.error-banner').data([0]); const errorEnter = errorBanner.enter() @@ -1314,12 +1523,18 @@ class MindMapVisualization { .delay(5000) .duration(500) .style('bottom', '-100px'); + + // Auch als Flash-Nachricht anzeigen + this.showFlash(message, 'error'); } // Fokussieren auf einen bestimmten Knoten per ID focusNode(nodeId) { const targetNode = this.nodes.find(n => n.id === nodeId); - if (!targetNode) return; + if (!targetNode) { + this.showFlash(`Knoten mit ID "${nodeId}" nicht gefunden`, 'error'); + return; + } // Ausgewählten Zustand zurücksetzen this.selectedNode = null; @@ -1339,6 +1554,8 @@ class MindMapVisualization { d3.zoom().transform, transform ); + + this.showFlash(`Fokus auf Knoten "${targetNode.name}" gesetzt`, 'success'); } } @@ -1358,6 +1575,8 @@ class MindMapVisualization { .style('display', 'block') .style('stroke-opacity', 0.5); + this.showFlash('Suchfilter zurückgesetzt', 'info', 2000); + return; } @@ -1393,6 +1612,9 @@ class MindMapVisualization { // Wenn mehr als ein Knoten gefunden wurde, Simulation mit reduzierter Stärke neu starten if (matchingNodes.length > 1) { this.simulation.alpha(0.3).restart(); + this.showFlash(`${matchingNodes.length} Knoten für "${searchTerm}" gefunden`, 'success'); + } else if (matchingNodes.length === 0) { + this.showFlash(`Keine Knoten für "${searchTerm}" gefunden`, 'warning'); } } } diff --git a/website/static/network-animation.js b/website/static/network-animation.js index f8c5779..aab0172 100644 --- a/website/static/network-animation.js +++ b/website/static/network-animation.js @@ -75,7 +75,7 @@ document.addEventListener('DOMContentLoaded', function() { left: 0; width: 100%; height: 100%; - background-image: url('/static/network-bg.jpg'); + background: rgba(179, 143, 255, 0.05); background-size: cover; background-position: center; opacity: 0.15; diff --git a/website/static/network-background.js b/website/static/network-background.js index 2274539..5ab35e2 100644 --- a/website/static/network-background.js +++ b/website/static/network-background.js @@ -42,34 +42,10 @@ function initNetworkBackground() { networkImage = new Image(); networkImage.crossOrigin = "anonymous"; // Vermeidet CORS-Probleme - // Event-Handler für Fehler - Fallback auf Standard-Hintergrund - networkImage.onerror = function() { - loadAttempts++; - if (loadAttempts < MAX_LOAD_ATTEMPTS) { - // Wenn SVG fehlschlägt, versuche JPG - if (networkImage.src.endsWith('svg')) { - networkImage.src = '/static/network-bg.jpg'; - } else { - // Wenn beide fehlschlagen, starte einfach Animation ohne Hintergrund - console.log("Konnte kein Hintergrundbild laden, verwende einfachen Hintergrund"); - isImageLoaded = true; // Trotzdem Animation starten - startAnimation(); - } - } else { - // Zu viele Versuche, verwende einfachen Hintergrund - console.log("Konnte kein Hintergrundbild laden, verwende einfachen Hintergrund"); - isImageLoaded = true; // Trotzdem Animation starten - startAnimation(); - } - }; - - // Versuche zuerst die SVG-Version zu laden - networkImage.src = '/static/network-bg.svg'; - - networkImage.onload = function() { - isImageLoaded = true; - startAnimation(); - }; + // Keine Bilder laden, direkt Fallback-Hintergrund verwenden + console.log("Verwende einfachen Hintergrund ohne Bilddateien"); + isImageLoaded = true; // Animation ohne Hintergrundbild starten + startAnimation(); // Handle window resize window.addEventListener('resize', debounce(resizeCanvas, 250)); diff --git a/website/templates/base.html b/website/templates/base.html index b20d577..445af5f 100644 --- a/website/templates/base.html +++ b/website/templates/base.html @@ -540,7 +540,7 @@
-
+
diff --git a/website/templates/index.html b/website/templates/index.html index c2bacf1..599814a 100644 --- a/website/templates/index.html +++ b/website/templates/index.html @@ -100,17 +100,23 @@ in einem interaktiven Wissensnetzwerk.

- - - - Mindmap erkunden + + + + + Mindmap erkunden + + {% if not current_user.is_authenticated %} - - - - Konto erstellen + + + + + Konto erstellen + + {% endif %} @@ -267,21 +273,23 @@ -
+
-
-
+
+
-

Bereit, Wissen neu zu entdecken?

-

+

+ Bereit, Wissen neu zu entdecken? +

+

Starte jetzt deine Reise durch das Wissensnetzwerk und erschließe neue Perspektiven.

@@ -291,94 +299,101 @@
-
+
-
+
-
+

-
- +
+
- Themen-Übersicht + Themen-Übersicht

- - -
-

-
- + +
+

+
+
- KI-Assistent + KI-Assistent

-

+

Stelle Fragen, lasse dir Themen erklären oder finde neue Verbindungen mit Hilfe unseres KI-Assistenten.

- -
-
+ +
+
+
-
+
- - +
diff --git a/website/templates/mindmap.html b/website/templates/mindmap.html index e449133..b1c3982 100644 --- a/website/templates/mindmap.html +++ b/website/templates/mindmap.html @@ -516,9 +516,7 @@ left: 0; width: 100%; height: 100%; - background-image: url('/static/network-bg.svg'); - background-size: cover; - background-position: center; + background-image: none; opacity: 0.2; z-index: -1; animation: pulse 10s ease-in-out infinite alternate; diff --git a/website/templates/search.html b/website/templates/search.html index a109fd9..54507aa 100644 --- a/website/templates/search.html +++ b/website/templates/search.html @@ -3,39 +3,39 @@ {% block title %}Suche{% endblock %} {% block content %} -
+
-
-
-

Erweiterte Suche

+
+
+

Erweiterte Suche

-
- -
- +
+ +
+ - +
-
- -
- +
+ +
+ - +
-
- -
- +
+ +
+ - @@ -45,13 +45,13 @@
-
- -
- +
+ +
+ - @@ -60,13 +60,13 @@
-
- -
- +
+ +
+ - @@ -78,26 +78,26 @@
-
-
-
-

Suchergebnisse

-

Nutze die Filter links, um deine Suche zu präzisieren.

+
+
+

Suchergebnisse

+

Nutze die Filter links, um deine Suche zu präzisieren.

-
+
-
- -
Wissen entdecken
-

Gib einen Suchbegriff ein, um in der wissenschaftlichen Wissensdatenbank zu suchen.

+
+ +
Wissen entdecken
+

Gib einen Suchbegriff ein, um in der wissenschaftlichen Wissensdatenbank zu suchen.