diff --git a/api.html b/api.html
index 247756a..31be829 100644
--- a/api.html
+++ b/api.html
@@ -45,6 +45,7 @@
API Demo
Kanban
Quiz
+ Kommentare
diff --git a/app.py b/app.py
index 8d0d39f..dee42e4 100644
--- a/app.py
+++ b/app.py
@@ -1,9 +1,17 @@
from flask import Flask, request, redirect
-from datetime import datetime
+from datetime import datetime, timezone, timedelta
app = Flask(__name__)
-# Kommentare im Arbeitsspeicher (gehen beim Neustart verloren -> kommt Datenbank)
+# ─── Zeitzone: CEST (UTC+2) ──────────────────────────────────────────────────
+BERLIN = timezone(timedelta(hours=2))
+
+def jetzt():
+ return datetime.now(BERLIN).strftime("%d.%m.%Y, %H:%M Uhr")
+
+# ─── Kommentare im Arbeitsspeicher ───────────────────────────────────────────
+# Schema: {"name": str, "text": str, "zeit": str,
+# "antworten": [{"name": str, "text": str, "zeit": str}]}
eintraege = []
# ─────────────────────────────────────────────────────────────────────────────
@@ -66,9 +74,7 @@ def seite(inhalt):
""" + inhalt + """
@@ -82,14 +88,7 @@ def seite(inhalt):
# ─────────────────────────────────────────────────────────────────────────────
@app.route("/")
def hello():
- return seite("""
-
Willkommen in unserer Flask-App!
-
- Diese App läuft mit Python & Flask direkt auf dem Server.
- Probier die Frage oder die
- Pinnwand aus.
-
-""")
+ return redirect("/app/pinnwand")
# ─────────────────────────────────────────────────────────────────────────────
@@ -97,243 +96,247 @@ def hello():
# ─────────────────────────────────────────────────────────────────────────────
@app.route("/frage", methods=["GET", "POST"])
def frage():
- feedback = ""
- if request.method == "POST":
- antwort = request.form.get("antwort", "").strip()
- if antwort == "8":
- feedback = '
✔ Richtig!
'
- else:
- feedback = '
✘ Leider falsch. Versuch es nochmal!
'
-
- return seite("""
-
Rechenrätsel
-
-""" + feedback)
+ return redirect("/app/pinnwand")
# ─────────────────────────────────────────────────────────────────────────────
-# Route 3: Pinnwand – YouTube-Kommentar-Style (ca. 2013)
+# Route 3: Pinnwand – YouTube-Kommentar-Style mit Antwort-Funktion
# ─────────────────────────────────────────────────────────────────────────────
PINNWAND_CSS = """
+
+
"""
+
+def esc(s):
+ return (s.replace("&", "&")
+ .replace("<", "<")
+ .replace(">", ">")
+ .replace('"', """))
+
+
def avatar_farbe(name):
- farben = ["#e53935","#8e24aa","#1e88e5","#00897b",
- "#43a047","#fb8c00","#6d4c41","#546e7a"]
- idx = sum(ord(c) for c in name) % len(farben)
- return farben[idx]
+ farben = ["#e53935", "#8e24aa", "#1e88e5", "#00897b",
+ "#43a047", "#fb8c00", "#6d4c41", "#546e7a"]
+ idx = sum(ord(c) for c in name) % len(farben)
+ return farben[idx]
+
+
+def render_antworten(antworten):
+ html = ""
+ for a in antworten:
+ farbe = avatar_farbe(a["name"])
+ initial = a["name"][0].upper()
+ html += f"""
+
+
{initial}
+
+
+ {esc(a['name'])}
+ {esc(a['zeit'])}
+
+
{esc(a['text'])}
+
+
"""
+ return html
+
@app.route("/pinnwand", methods=["GET", "POST"])
def pinnwand():
if request.method == "POST":
- name = request.form.get("name", "").strip() or "Anonym"
- nachricht = request.form.get("nachricht", "").strip()
- if nachricht:
- eintraege.append({
- "name": name,
- "text": nachricht,
- "zeit": datetime.now().strftime("%d.%m.%Y, %H:%M Uhr")
- })
+ name = request.form.get("name", "").strip() or "Anonym"
+ text = request.form.get("nachricht", "").strip()
+ parent_raw = request.form.get("parent_id", "").strip()
+ if text:
+ if parent_raw.isdigit():
+ idx = int(parent_raw)
+ if 0 <= idx < len(eintraege):
+ eintraege[idx]["antworten"].append(
+ {"name": name, "text": text, "zeit": jetzt()}
+ )
+ else:
+ eintraege.append(
+ {"name": name, "text": text, "zeit": jetzt(), "antworten": []}
+ )
return redirect("/app/pinnwand")
- # Kommentare bauen (neueste zuerst)
- kommentare_html = ""
- for e in reversed(eintraege):
- initial = e["name"][0].upper()
+ # ── Kommentare rendern (neueste zuerst, echter Index für parent_id) ──
+ komm_html = ""
+ for real_idx, e in reversed(list(enumerate(eintraege))):
farbe = avatar_farbe(e["name"])
- # Einfaches HTML-Escaping
- name_esc = e["name"].replace("&","&").replace("<","<").replace(">",">")
- text_esc = e["text"].replace("&","&").replace("<","<").replace(">",">")
- kommentare_html += f"""
-
diff --git a/impressum.html b/impressum.html
index e29383f..af1ff4d 100644
--- a/impressum.html
+++ b/impressum.html
@@ -45,6 +45,7 @@
API Demo
Kanban
Quiz
+
Kommentare
diff --git a/index.html b/index.html
index 2caa0b5..c563d95 100644
--- a/index.html
+++ b/index.html
@@ -45,6 +45,7 @@
Noch keine Kommentare. Sei der Erste! 💬
' + komm_html = 'Noch keine Kommentare. Sei der Erste! 💬
' - anzahl = len(eintraege) - anzahl_text = f"{anzahl} Kommentar{'e' if anzahl != 1 else ''}" + n = len(eintraege) + anzahl_text = f"{n} Kommentar{'e' if n != 1 else ''}" return seite(PINNWAND_CSS + f""" -{anzahl_text}
- - -