from flask import Flask, request, redirect from datetime import datetime, timezone, timedelta app = Flask(__name__) # ─── 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 = [] # ───────────────────────────────────────────────────────────────────────────── # Hilfsfunktion: gemeinsames HTML-Gerüst # ───────────────────────────────────────────────────────────────────────────── def seite(inhalt): return """ Flask-App – David & Karo
""" + inhalt + """
""" # ───────────────────────────────────────────────────────────────────────────── # Route 1: Startseite # ───────────────────────────────────────────────────────────────────────────── @app.route("/") def hello(): return redirect("/app/pinnwand") # ───────────────────────────────────────────────────────────────────────────── # Route 2: Frage-Formular (GET + POST) # ───────────────────────────────────────────────────────────────────────────── @app.route("/frage", methods=["GET", "POST"]) def frage(): return redirect("/app/pinnwand") # ───────────────────────────────────────────────────────────────────────────── # 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] 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" 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 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"]) initial = e["name"][0].upper() n_ant = len(e["antworten"]) # Block: Antworten anzeigen/verbergen antworten_block = "" if n_ant > 0: label = f"{n_ant} Antwort{'en' if n_ant != 1 else ''}" antworten_block = f""" """ komm_html += f"""
{initial}
{esc(e['name'])} {esc(e['zeit'])}
{esc(e['text'])}
{antworten_block}
""" if not eintraege: komm_html = '

Noch keine Kommentare. Sei der Erste! 💬

' n = len(eintraege) anzahl_text = f"{n} Kommentar{'e' if n != 1 else ''}" return seite(PINNWAND_CSS + f"""
Kommentare
👤

{anzahl_text}

{komm_html}
""") # ───────────────────────────────────────────────────────────────────────────── if __name__ == "__main__": app.run(host="0.0.0.0", port=9002) # isa2 → Port 9002