From 33bfd86027abc42950d80f5b8d5f7aa0db7ac227 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Wed, 27 May 2026 13:34:27 +0200 Subject: [PATCH] add borning pages --- src/elm/assets/preloaded_content/gtc.json | 28 +++++++ src/elm/assets/preloaded_content/imprint.txt | 27 +++++++ src/elm/assets/preloaded_content/rules.txt | 8 ++ src/elm/pages/FaqPage.py | 10 +-- src/elm/pages/ImprintPage.py | 44 +++++++++++ src/elm/pages/RulesPage.py | 80 ++++++++++++++++++++ src/elm/services/PreloadService.py | 28 +++++++ 7 files changed, 217 insertions(+), 8 deletions(-) create mode 100644 src/elm/assets/preloaded_content/gtc.json create mode 100644 src/elm/assets/preloaded_content/imprint.txt create mode 100644 src/elm/assets/preloaded_content/rules.txt create mode 100644 src/elm/pages/ImprintPage.py create mode 100644 src/elm/pages/RulesPage.py diff --git a/src/elm/assets/preloaded_content/gtc.json b/src/elm/assets/preloaded_content/gtc.json new file mode 100644 index 0000000..735ac2a --- /dev/null +++ b/src/elm/assets/preloaded_content/gtc.json @@ -0,0 +1,28 @@ +{ + "§1 Allgemeine Bestimmungen": [ + "Die Veranstaltung wird von der Einfach Zocken Gaming Gesellschaft e.V. organisiert.", + "Unser Event verfolgt gemeinnützige Ziele und ist nicht auf Profit ausgerichtet. Die erhobenen Teilnahmebeiträge dienen lediglich der Kostendeckung. Überschüsse werden für die Organisation und Durchführung zukünftiger ähnlicher Veranstaltungen verwendet.", + "Die Organisatoren haben das Recht, unerwünschte oder störende Personen jederzeit von der Veranstaltung auszuschließen (siehe §3). Im Falle eines Ausschlusses aufgrund eines Regelverstoßes erfolgt keine Rückerstattung des Eintrittspreises." + ], + "§2 Teilnahmevoraussetzungen": [ + "Die Teilnahme an der Veranstaltung ist nur Personen gestattet, die mindestens 18 Jahre alt sind. Ein amtlicher Altersnachweis ist erforderlich. Kann dieser Nachweis nicht erbracht werden, wird der Zugang zur Veranstaltung verweigert.", + "Jeder Teilnehmer muss die Teilnahmegebühr entrichtet haben und dies auf Anfrage nachweisen können. Mit der Bezahlung des Eintrittspreises erhält der Teilnehmer einen garantierten Platz auf der Veranstaltung.", + "Alle Teilnehmer sind verpflichtet, vor der Veranstaltung sicherheitsrelevante Patches und Updates für Betriebssysteme und Spiele einzuspielen. Es wird nicht garantiert, dass diese während der Veranstaltung heruntergeladen werden können." + ], + "§3 Verhaltensregeln": [ + "Innerhalb des Veranstaltungsgebäudes gilt ein striktes Rauchverbot.", + "Jeder Teilnehmer verpflichtet sich, während der Veranstaltung keine illegalen Handlungen durchzuführen.", + "Die unautorisierte Verbreitung von urheberrechtlich geschütztem Material ist strengstens untersagt.", + "Der Veranstalter übernimmt keine Haftung für Schäden an Geräten oder Daten der Teilnehmer, es sei denn, der Veranstalter oder seine Erfüllungsgehilfen haben die Schäden vorsätzlich oder grob fahrlässig verursacht. Ebenso wird keine Haftung bei Diebstahl oder Verlust persönlicher Gegenstände übernommen.", + "Teilnehmer dürfen den Ablauf der Veranstaltung nicht absichtlich stören, insbesondere nicht den Betrieb des Computer- und Stromnetzwerks. Als absichtliche Störung zählt auch die Nutzung von Software, die dem Spieler einen unfairen Vorteil verschafft (z.B. Cheats, Hacks) sowie das Ausnutzen von Bugs in Spielen, um einen Vorteil zu erzielen. Solche Verstöße führen zum sofortigen Ausschluss aus allen Turnieren. Betrifft der Verstoß ein Teammitglied, wird das gesamte Team disqualifiziert, auch wenn die anderen Mitglieder nicht direkt beteiligt waren. Wiederholte oder schwerwiegende Verstöße können zum Ausschluss von der gesamten Veranstaltung führen.", + "Die Nutzung von Aktivlautsprechern ist verboten, Kopfhörer sind Pflicht.", + "Verursacht ein Teilnehmer Schäden, haftet er vollumfänglich für die entstehenden Kosten.", + "Teilnehmer sind dazu verpflichtet, nach der Veranstaltung ihren Platz aufzuräumen und persönliche Gegenstände mitzunehmen." + ], + "§4 Internetzugang": [ + "Der Veranstalter stellt während der Veranstaltung einen eingeschränkten Internetzugang zur Verfügung. Es wird jedoch keine Garantie für die Verfügbarkeit, Eignung oder Zuverlässigkeit des Zugangs übernommen. Der Veranstalter behält sich das Recht vor, den Zugang zeitweise oder vollständig einzuschränken oder zu sperren sowie bestimmte Dienste oder Websites zu blockieren.", + "Für alle über das Internet getätigten Aktivitäten, Datenübertragungen und Rechtsgeschäfte ist der Teilnehmer allein verantwortlich. Entstehende Kosten durch die Nutzung von Drittanbieterdiensten trägt der Teilnehmer. Es gilt das Einhalten der gesetzlichen Bestimmungen.", + "Der Teilnehmer stellt den Veranstalter von jeglichen Ansprüchen Dritter frei, die aus einer rechtswidrigen Nutzung des Internetzugangs oder einem Verstoß gegen diese Vereinbarung resultieren. Diese Freistellung schließt auch die Kosten für die Abwehr solcher Ansprüche ein.", + "Der Veranstalter behält sich das Recht vor, die Nutzung des Internetzugangs zu protokollieren, um im Bedarfsfall Beweise für die Nutzung durch bestimmte Teilnehmer vorzulegen und den Veranstalter vor Schäden zu schützen." + ] +} \ No newline at end of file diff --git a/src/elm/assets/preloaded_content/imprint.txt b/src/elm/assets/preloaded_content/imprint.txt new file mode 100644 index 0000000..3742485 --- /dev/null +++ b/src/elm/assets/preloaded_content/imprint.txt @@ -0,0 +1,27 @@ +Angaben gemäß § 5 TMG: + +Einfach Zocken Gaming Gesellschaft e.V. +Im Elchgrund 18 +35080 Bad Endbach - Bottenhorn + +Vertreten durch: + +1. Vorsitzender: David Rodenkirchen +2. Vorsitzender: Julia Albring +Schatzmeisterin: Jessica Rodenkirchen + +Kontakt: + +E-Mail: vorstand (at) ezgg-ev.de + +Registereintrag: + +Eingetragen im Vereinsregister. +Registergericht: Amtsgericht Marburg +Registernummer: VR 5837 + +Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV: + +David Rodenkirchen +Im Elchgrund 18 +35080 Bad Endbach - Bottenhorn diff --git a/src/elm/assets/preloaded_content/rules.txt b/src/elm/assets/preloaded_content/rules.txt new file mode 100644 index 0000000..b938589 --- /dev/null +++ b/src/elm/assets/preloaded_content/rules.txt @@ -0,0 +1,8 @@ +Respektvolles Verhalten: Sei höflich und respektvoll gegenüber anderen Gästen und dem Team. +Alkohol und Drogen: Konsumiere Alkohol in Maßen und halte dich an die gültige Gesetzeslage. +Sitzplätze: Respektiere die zugewiesenen Plätze und ändere sie nicht ohne Genehmigung. +Notausgänge und Sicherheitsvorschriften: Informiere dich über die Notausgänge und beachte die Sicherheitsanweisungen. +Müllentsorgung: Benutze die vorgesehenen Mülleimer und halte den Veranstaltungsort sauber. +Rauchen: Halte dich an die Rauchverbote und benutze nur die ausgewiesenen Raucherbereiche. +Hausrecht: Folge den Anweisungen des Veranstalters und des Sicherheitspersonals. +Illegales: Das brechen des deutschen Rechts, insbesondere des Urheberrechts, bleibt auch auf LAN verboten. \ No newline at end of file diff --git a/src/elm/pages/FaqPage.py b/src/elm/pages/FaqPage.py index de4531d..9125d31 100644 --- a/src/elm/pages/FaqPage.py +++ b/src/elm/pages/FaqPage.py @@ -1,14 +1,8 @@ from __future__ import annotations -from copy import copy -from typing import Any, Optional -from uuid import uuid4 +from rio import Component, Column, Row, Text, Spacer, page, Rectangle -from rio import Component, Column, Row, Text, Spacer, page, Color, Rectangle, TextInput, GuardEvent - -from elm.types import UserSession, User -from elm.services import UserService, LocalData, LocalDataService, ConfigurationService, PreloadService -from elm.components import ElmButton +from elm.services import PreloadService @page(name="FAQ", url_segment="faq") class FaqPage(Component): diff --git a/src/elm/pages/ImprintPage.py b/src/elm/pages/ImprintPage.py new file mode 100644 index 0000000..a9627d5 --- /dev/null +++ b/src/elm/pages/ImprintPage.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +from rio import Component, Column, Row, Text, page, Rectangle, CodeBlock, Link + +from elm.services import PreloadService + +@page(name="Imprint", url_segment="imprint") +class ImprintPage(Component): + def build(self) -> Component: + return Row( + Rectangle( + content=Column( + Rectangle( + content=Rectangle( + content=Text("Impressum & DSGVO", margin=0.5, selectable=False, overflow="wrap"), + fill=self.session.theme.header_box_background_color, + margin=0.4 + ), + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color, + ), + CodeBlock( + code=self.session[PreloadService].imprint, + show_controls=False, + language="text", + scroll_code_x="auto", + margin=1, + grow_y=True + ), + Link( + content="Datenschutzerklärung", + target_url="https://ezgg-ev.de/privacy", # ToDo: Move into this app and make preloaded content + open_in_new_tab=True, + margin=1 + ) + ), + fill=self.session.theme.box_color, + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color + ), + grow_x=True, + grow_y=True, + margin=0 if self.session.is_mobile() else 1 + ) diff --git a/src/elm/pages/RulesPage.py b/src/elm/pages/RulesPage.py new file mode 100644 index 0000000..a39468f --- /dev/null +++ b/src/elm/pages/RulesPage.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +from rio import Component, Column, Text, page, Rectangle + +from elm.services import PreloadService + + +@page(name="Rules", url_segment="rules") +class RulesPage(Component): + def build(self) -> Component: + return Column( + Rectangle( + content=Column( + Rectangle( + content=Rectangle( + content=Text("Regeln", margin=0.5, selectable=False, overflow="wrap"), + fill=self.session.theme.header_box_background_color, + margin=0.4 + ), + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color, + ), + *[Column( + Text( + rule.split(":")[0], + font_size=0.8 if self.session.is_mobile() else 1.2, + fill=self.session.theme.primary_color, + overflow="wrap" + ), + Text( + rule.split(":")[1].strip(), + font_size=0.7 if self.session.is_mobile() else 1, + overflow="wrap", + margin_left=1 + ), + margin=1, + spacing=1 + ) for rule in self.session[PreloadService].rules] + ), + fill=self.session.theme.box_color, + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color + ), + Rectangle( + content=Column( + Rectangle( + content=Rectangle( + content=Text("AGB", margin=0.5, selectable=False, overflow="wrap"), + fill=self.session.theme.header_box_background_color, + margin=0.4 + ), + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color, + ), + *[Column( + Text( + text=paragraph, + font_size=0.8 if self.session.is_mobile() else 1.2, + fill=self.session.theme.primary_color, + overflow="wrap" + ), + *[Text( + section, + font_size=0.7 if self.session.is_mobile() else 1, + overflow="wrap", + margin_left=1 + ) for section in self.session[PreloadService].gtc[paragraph]], + margin=1, + spacing=1 + ) for paragraph in self.session[PreloadService].gtc] + ), + fill=self.session.theme.box_color, + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color + ), + grow_x=True, + grow_y=True, + spacing=1, + margin=0 if self.session.is_mobile() else 1 + ) diff --git a/src/elm/services/PreloadService.py b/src/elm/services/PreloadService.py index 81f0e19..e521735 100644 --- a/src/elm/services/PreloadService.py +++ b/src/elm/services/PreloadService.py @@ -1,9 +1,15 @@ +import json + from from_root import from_root class PreloadService: def __init__(self) -> None: self._faq: list[tuple[str, str]] = [] + self._imprint: str = "" + self._rules: list[str] = [] + self._gtc: dict[str, list[str]] = {} + with open(from_root("src/elm/assets/preloaded_content/faq.txt"), "r") as faq_file: faq = faq_file.read() faq = faq.split("\n\n") @@ -11,6 +17,28 @@ class PreloadService: q, a = faq[i], faq[i + 1] self._faq.append((q, a)) + with open(from_root("src/elm/assets/preloaded_content/imprint.txt"), "r") as imprint_file: + self._imprint = imprint_file.read() + + with open(from_root("src/elm/assets/preloaded_content/rules.txt"), "r") as rules_file: + self._rules = rules_file.read().split("\n") + + with open(from_root("src/elm/assets/preloaded_content/gtc.json"), "r") as gtc_file: + self._gtc = json.load(gtc_file) + + @property def faq(self) -> list[tuple[str, str]]: return self._faq + + @property + def imprint(self) -> str: + return self._imprint + + @property + def rules(self) -> list[str]: + return self._rules + + @property + def gtc(self) -> dict[str, list[str]]: + return self._gtc