From 9c36179f29a1ba8277b33760a0e8eadc1fcf3edc Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 10 May 2025 22:43:13 +0200 Subject: [PATCH] "Refactor UI refactoring: Simplify app.c-specific components --- __pycache__/app.cpython-313.pyc | Bin 90940 -> 90833 bytes app.py | 2 -- templates/edit_mindmap.html | 12 +++--------- templates/my_account.html | 7 ++----- 4 files changed, 5 insertions(+), 16 deletions(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 035c71e50fb87d9a7366f34e745b76d15061732f..f57e5263b68c8cf3c4bf729f1281612fa863e968 100644 GIT binary patch delta 16552 zcmb6=X<(GqwR2}pGD!#|Bq1R?Nf<~%Si=$lMOhNrG7&6B$4O?A3`}Oi{U$7dI=G8v zlPiu`i>Vt$0nzap+Pd}C*4kQ&U>83Zu(ej6^!Zv_Yqh?}#a+~w);y_cGM`Lk)?CAD0N>eM+f>Kv z5^YoX6lhCtp3+p$>!~fHd1})%K8?zm&C{D^@EJ`rdE-oK7}Y$hsev~n2G8cRVK8f+ z!{^ZNTt1h6O&l4^YM$5B$Qzq3;bJ$NnNw&O4~I7@^uX z`J2X8rQEh+CR0l4FJGzRFZgy6{FUy}?lChhN)KNRxDSuSD%bd#lWfk_>Rj$@cg`F$ zaBqVVZnc%S0@cS*8g@*)_e%DtvF_ZNW@VPP)|TVgHhOF|G`REHR%e=~o7GllKDCZh z>)8cZZ!?#h+=cG(bC}v*QAF*gmJ`W%cNeP~7@JH3Cb7ekBeIIqa@{2=Tk5YmL27Yg z0)rTVQg@k($Je>D`8CC+wt5hJox6Mv<8Ae(wzih9}cRe@$hyc1eqqt!PdfwZr2p%o;1ho zo^0q}uZ^lPv~EyaqqTAf(lv#M`i*)v2`pc8x-lXCdUZGNTFV^w+&1%1>NXfO` zqSaPI?N+T8h1zXe?HJT<*J^L2q>hKlSLsAGM(KODm~)a)N!_5Dt_f!cY|W~fd925ly|F`j&%yAs7V`V+oQHt zu5-6(3LH-GN2OG`LFFDO1(V>%G|V0Y;I23%9DebNB0b`~kIJyqS?}8&GSN+YI{qx{j~e!M9b+!W&fi-BBHnKdAOs z?l4fgQOD3IJ)~jYV37KzB$y8yFme z-l2|k?=T&FvnTd$q~roexP9YGniF5NT%2FB_p66#u+)yeJ-%T`fUP z+mqG383#c|_igusb1X1I%^M!l*n3!?l%Lf47ij&D82Z1f_Gdh*_G>MNN3?urM9Y!k zE$NS`E$+t)#5LJvBAA_G=igJQiY3`&?fm;{wfeYWPuc2zLT63W?6WFv#R-k{lR6%M z&ixdu^YgkU?WD=)#loDjXoth(%{Q62k8-mKZ9dFnRWgu_jN{joz-fT{7WtMqRtzeo zPS$C<#8P7FWM!r{q)?zys7yuyMztBJ$T}5qE@wH5$Lq$9X7MX?!{+$U^Z&|h&9Ia! z#mfcd)@4wNjb6ZVg{5##!(ynp%sc~rWJ{Mn!k0pcBMxuEwyZ#Cy}u*k@p<_MPfytA z=PRK3Dj^k?v1Q^w;o$ToP+#2YGRqFBucN~+NgP{_ScoQH4rQK>z(80;$LHEwp>dtK zZ~Sba^LkN-m{qi5f&mA5<;=w7UBPg>Hz@IS(0IN0PSHdf;vc&P>8?d!7$};H$JyGT zv0DU+%h|H{uHw;V<`;)b%SsW=l`30$!@ax)%5u8ok9c~$lC(L@eSESwTRLmH9|?8= zkgNbo;ZIRTP6zjUBYuz1-|6iOMm&9zpG&+KaJGx3We>qj7s~cp^ZIc3CIE6;M>rVf zo(|O7=J@`qM=VRR^9bV_4(~_o%>Z21WUYJ~cG*UBiRh%+Y`Qo(si<-?Qo!}&>jB8N z&S0O^O?sEj0UzIhJwfsLr1h*x_$Qax?t_MV;yWj|nt|hYYi~8@dl97_Kr1lOffXNu zPO+`te`yelI0uNM$nOmX`E+dEi>e3RjrR+c`5D9pL zfqqb;H{xygf(9P}^iSe
    ny#2K+uQ32grtZ!1lGl%5!OSDnvrKa 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

    aGu-b>g?syfm0dk zfOGCL{V~IoT?n$ToWhPUc2)S}MmCG(h9^vA)18>p+u{0iB4EO|3$l{#@o)BW?fq5> z3@bLc67TW$8cwujC`;lVk_AUq`~nad@HrsCxZ&Zc>`1!zEi~3%1V2ZhpYPQurBnWu zH|tayqc17;=-xhrr|LmuaTKQ4?u%o-!Ji19ZDH&67cP!6!+XWYknS)7a&i4$SdT3q zj#3RnF@x_U)F62f2deRr4jfzYk;DsNi#&7z=&Pg;xVdM#AGWQnh>ZI|^y58jq0L|m zxrl8NdIKW4iEa32vsnrAhd-Rn%4clHF5Fg<>?qKS(b5Co^}xqK(GUKX!sLsFubRW` zmc_qB_Q||GTe}4#FJA^EkD!O-0KWRQ-n=*Mb?4LScw2bSJoa+gb1(o^b|&)6LSXQ^ zuxmaWZEXb}N5ebjvvSrJet14RV*3T+tqIRtz$T9+&&h{R{kmN;Cf+U=eF|pea^C`0 zYP}Y?oCrSyB&==t7YkS`W2?e7i`d~2v@>JP2InFw*Up9CSj4849m8431JS+V#Z(ND zUl*=k%!(Sxcu-E7U>DZTAI0j2uFIE4vF|Aaw3f8N(B5J;WOX#RHZ6Sr?hSg~KJPa8 z#(H3YJ7F*zq?4ZjByiuf%=1~3-wMCIlAX7_%4da7T*r=2#41lo^Z4QWx6y#6Wa1}u zn_OFhJ$wv4r$YxUkv#A z@EsCs32i_IZp6sYWXJDhd*NeHDD-iVGApgaqaZt5VwTr7vbuc*{>nOzazjD zqi*#!6nP|q8U(cn@DoJ(n2?9+u{j;VYy@)=%tvqyf;I#z5p*C}i=Y$1CIkTlw;&iq zKv^B%UGjYh_9HleAdKK41cwpeWi{QY!gXQ@nrHC&90I(%;CP(puOav;0z7i^w-Dgr zPRXX@PoLZ04KJGMoJOZAIuFs2hU1|?tx~Ywpsk;FZQ3~1=s613f$QHvKfeYOJjayH zG3RnjnH&=r$Ka!2FlJ|@%a{xQUNY$O%;Wb03QT5_GjhVa*06fZuT7Q1&#qxpS>AtC z*Y2|1m33Rzd3*TgOOHjS7dqX(?4j;^3F^De+Gb>)c^nh diff --git a/app.py b/app.py index 18bf024..b715181 100644 --- a/app.py +++ b/app.py @@ -9,7 +9,6 @@ from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash import json from enum import Enum -from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, TextAreaField, SelectField, HiddenField from wtforms.validators import DataRequired, Email, Length, EqualTo, ValidationError from functools import wraps @@ -47,7 +46,6 @@ app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_path}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=365) # Langlebige Session für Dark Mode-Einstellung app.config['UPLOAD_FOLDER'] = os.getenv('UPLOAD_FOLDER', os.path.join(os.getcwd(), 'uploads')) -app.config['WTF_CSRF_ENABLED'] = False # OpenAI API-Konfiguration api_key = os.environ.get("OPENAI_API_KEY", "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") diff --git a/templates/edit_mindmap.html b/templates/edit_mindmap.html index 4c18072..e791329 100644 --- a/templates/edit_mindmap.html +++ b/templates/edit_mindmap.html @@ -335,7 +335,6 @@ const isPrivateInput = document.getElementById('is_private'); const mindmapId = "{{ mindmap.id }}"; // Sicherstellen, dass mindmap.id hier verfügbar ist - const csrfToken = "{{ csrf_token() }}"; const data = { name: nameInput.value, @@ -351,8 +350,7 @@ const response = await fetch(`/api/mindmaps/${mindmapId}`, { method: 'PUT', headers: { - 'Content-Type': 'application/json', - 'X-CSRFToken': csrfToken + 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); @@ -389,7 +387,6 @@ // Die Metadaten (Name, Beschreibung, is_private) werden separat über das Formular oben gespeichert. // Diese onChange Funktion kümmert sich nur um die Strukturdaten (Knoten/Kanten). const mindmapId = "{{ mindmap.id }}"; - const csrfToken = "{{ csrf_token() }}"; // Debounce-Funktion, um API-Aufrufe zu limitieren let debounceTimer; @@ -406,8 +403,7 @@ fetch(`/api/mindmaps/${mindmapId}`, { // Endpunkt angepasst method: 'PUT', // Methode zu PUT geändert headers: { - 'Content-Type': 'application/json', - 'X-CSRFToken': csrfToken + 'Content-Type': 'application/json' }, body: JSON.stringify(payload) // Sende die Mindmap-Daten als { data: ... } }).then(response => { @@ -455,14 +451,12 @@ mindmap.initialize().then(() => { console.log("Mindmap-Editor initialisiert"); const mindmapId = "{{ mindmap.id }}"; - const csrfToken = "{{ csrf_token() }}"; // Lade existierende Daten für die Mindmap-Struktur fetch(`/api/mindmaps/${mindmapId}`, { // Endpunkt für GET angepasst method: 'GET', headers: { - 'Accept': 'application/json', - 'X-CSRFToken': csrfToken + 'Accept': 'application/json' } }) .then(response => { diff --git a/templates/my_account.html b/templates/my_account.html index 5df65a6..1b2c49a 100644 --- a/templates/my_account.html +++ b/templates/my_account.html @@ -326,11 +326,10 @@ const mindmapId = event.currentTarget.dataset.mindmapId; if (confirm('Bist du sicher, dass du diese Mindmap löschen möchtest?')) { try { - const csrfToken = "{{ csrf_token() }}"; // CSRF Token holen const response = await fetch(`/api/mindmaps/${mindmapId}`, { method: 'DELETE', headers: { - 'X-CSRFToken': csrfToken // CSRF Token im Header senden + 'Content-Type': 'application/json' } }); if (!response.ok) { @@ -359,12 +358,10 @@ } try { - const csrfToken = "{{ csrf_token() }}"; // CSRF Token holen const response = await fetch('/api/mindmaps', { method: 'POST', headers: { - 'Content-Type': 'application/json', - 'X-CSRFToken': csrfToken // CSRF Token im Header senden + 'Content-Type': 'application/json' }, body: JSON.stringify({ name, description, is_private: false }), // is_private standardmäßig auf false setzen });