From 09ff8c78a9c67e193b0fca692a37e0b81b50d763 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Thu, 6 Jun 2024 17:24:20 +0000 Subject: [PATCH] implement more social links, change naming of e.V. --- ezgg_website/__init__.py | 52 ++++++++++++++++++++++- ezgg_website/assets/icons/discord.svg | 3 ++ ezgg_website/assets/icons/facebook.svg | 1 + ezgg_website/assets/icons/git.svg | 1 + ezgg_website/assets/icons/instagram.svg | 1 + ezgg_website/assets/icons/linkedin.svg | 1 + ezgg_website/assets/icons/twitch.svg | 3 ++ ezgg_website/assets/icons/x.svg | 1 + ezgg_website/assets/icons/youtube.svg | 1 + ezgg_website/components/header.py | 2 +- ezgg_website/components/member_card.py | 34 +++++---------- ezgg_website/models/__init__.py | 2 + ezgg_website/models/member_info.py | 14 ++++++ ezgg_website/models/socials.py | 35 +++++++++++++++ ezgg_website/pages/about.py | 4 +- ezgg_website/pages/imprint.py | 5 ++- ezgg_website/pages/join.py | 2 +- ezgg_website/pages/privacy.py | 2 +- ezgg_website/services/database_service.py | 41 +++++++++--------- 19 files changed, 152 insertions(+), 53 deletions(-) create mode 100644 ezgg_website/assets/icons/discord.svg create mode 100644 ezgg_website/assets/icons/facebook.svg create mode 100644 ezgg_website/assets/icons/git.svg create mode 100644 ezgg_website/assets/icons/instagram.svg create mode 100644 ezgg_website/assets/icons/linkedin.svg create mode 100644 ezgg_website/assets/icons/twitch.svg create mode 100644 ezgg_website/assets/icons/x.svg create mode 100644 ezgg_website/assets/icons/youtube.svg create mode 100644 ezgg_website/models/__init__.py create mode 100644 ezgg_website/models/member_info.py create mode 100644 ezgg_website/models/socials.py diff --git a/ezgg_website/__init__.py b/ezgg_website/__init__.py index 00bfbd6..bc67572 100644 --- a/ezgg_website/__init__.py +++ b/ezgg_website/__init__.py @@ -16,6 +16,54 @@ rio.Icon.register_single_icon( icon_source=from_root("ezgg_website/assets/icons/steam.svg") ) +rio.Icon.register_single_icon( + set_name="custom", + icon_name="discord", + icon_source=from_root("ezgg_website/assets/icons/discord.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="x", + icon_source=from_root("ezgg_website/assets/icons/x.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="facebook", + icon_source=from_root("ezgg_website/assets/icons/facebook.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="youtube", + icon_source=from_root("ezgg_website/assets/icons/youtube.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="twitch", + icon_source=from_root("ezgg_website/assets/icons/twitch.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="instagram", + icon_source=from_root("ezgg_website/assets/icons/instagram.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="linkedin", + icon_source=from_root("ezgg_website/assets/icons/linkedin.svg") +) + +rio.Icon.register_single_icon( + set_name="custom", + icon_name="git", + icon_source=from_root("ezgg_website/assets/icons/git.svg") +) + themes = [ # Grey/Purple rio.Theme.from_colors( @@ -169,9 +217,9 @@ app = rio.App( # "Pragma": "cache", # Temporarily disabled until "http-equiv" is supported by Rio "robots": "INDEX,FOLLOW", # "content-Language": "de", # Temporarily disabled until "http-equiv" is supported by Rio - "description": "Homepage der Einfach Zocken Genussgesellschaft. Ein eingetragener Verein der sich mit " + "description": "Homepage der Einfach Zocken Gaming Gesellschaft. Ein eingetragener Verein der sich mit " "Videospielen und themenverwandten Aktivitäten befasst.", - "og:description": "Homepage der Einfach Zocken Genussgesellschaft. Ein eingetragener Verein der sich mit " + "og:description": "Homepage der Einfach Zocken Gaming Gesellschaft. Ein eingetragener Verein der sich mit " "Videospielen und themenverwandten Aktivitäten befasst.", "keywords": "Gaming, Clan, Guild, Verein, Club, Einfach, Zocken, Genuss, Gesellschaft, Videospiele, " "Videogames, LAN, Party", diff --git a/ezgg_website/assets/icons/discord.svg b/ezgg_website/assets/icons/discord.svg new file mode 100644 index 0000000..877cfdf --- /dev/null +++ b/ezgg_website/assets/icons/discord.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ezgg_website/assets/icons/facebook.svg b/ezgg_website/assets/icons/facebook.svg new file mode 100644 index 0000000..1176c3e --- /dev/null +++ b/ezgg_website/assets/icons/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/assets/icons/git.svg b/ezgg_website/assets/icons/git.svg new file mode 100644 index 0000000..ffbc671 --- /dev/null +++ b/ezgg_website/assets/icons/git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/assets/icons/instagram.svg b/ezgg_website/assets/icons/instagram.svg new file mode 100644 index 0000000..1c8ff8c --- /dev/null +++ b/ezgg_website/assets/icons/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/assets/icons/linkedin.svg b/ezgg_website/assets/icons/linkedin.svg new file mode 100644 index 0000000..08672fd --- /dev/null +++ b/ezgg_website/assets/icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/assets/icons/twitch.svg b/ezgg_website/assets/icons/twitch.svg new file mode 100644 index 0000000..8452145 --- /dev/null +++ b/ezgg_website/assets/icons/twitch.svg @@ -0,0 +1,3 @@ + + + diff --git a/ezgg_website/assets/icons/x.svg b/ezgg_website/assets/icons/x.svg new file mode 100644 index 0000000..104e047 --- /dev/null +++ b/ezgg_website/assets/icons/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/assets/icons/youtube.svg b/ezgg_website/assets/icons/youtube.svg new file mode 100644 index 0000000..308b9cb --- /dev/null +++ b/ezgg_website/assets/icons/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ezgg_website/components/header.py b/ezgg_website/components/header.py index 1f6fa1e..a8a33c4 100644 --- a/ezgg_website/components/header.py +++ b/ezgg_website/components/header.py @@ -47,7 +47,7 @@ class Header(rio.Component): texts=[ "Die EZ GG wurde in einer schlecht beleuchteten Kellerbar gegründet", "Aktuelle hat der EZ GG e.V. sieben Mitglieder", - "Bist du auch ein Genießer? Dann tritt uns doch bei!", + "Bist du auch ein Gamer? Dann tritt uns doch bei!", "Auch Wasser wird zum edlen Tropfen, mischt man es mit Malz und Hopfen." ], refresh_interval=30, diff --git a/ezgg_website/components/member_card.py b/ezgg_website/components/member_card.py index 9848100..be14cb8 100644 --- a/ezgg_website/components/member_card.py +++ b/ezgg_website/components/member_card.py @@ -1,41 +1,29 @@ -from pathlib import Path -from dataclasses import dataclass -from typing import Optional - import rio - -@dataclass -class MemberInfo: - picture_path: Path - name: str - position: str - entry_date: str - contact_mail: Optional[str] - contact_steam: Optional[str] +from ..models import MemberInfo, SOCIAL_PLATFORM_ICON_MAP class MemberCard(rio.Component): info: MemberInfo def build(self) -> rio.Component: - contact_row = rio.Row() + social_links_grid = rio.Grid(align_x=0.5, row_spacing=0.5, column_spacing=0.5, margin_bottom=0.3, height=3) + content = rio.Column( rio.Image(self.info.picture_path, height=9, margin_bottom=1.3, margin_top=0.8), rio.Text(self.info.name, margin_bottom=0.4, style=rio.TextStyle(font_weight="bold")), rio.Text(self.info.position, margin_bottom=0.4, style=rio.TextStyle(italic=True)), rio.Text(f"Mitglied seit {self.info.entry_date}", style=rio.TextStyle(italic=True), margin_bottom=0.4), - contact_row + social_links_grid ) - # @Todo: Icon alignment broken if only one icon should be shown. - if self.info.contact_mail: - contact_row.add(rio.Link(rio.Icon("material/mail"), f"mailto://{self.info.contact_mail}", open_in_new_tab=True, margin_top=1, margin_bottom=1, align_x=0.9)) - if self.info.contact_steam: - contact_row.add(rio.Link(rio.Icon("custom/steam"), self.info.contact_steam, open_in_new_tab=True, margin_top=1, margin_bottom=1, align_x=0.1)) - - if not self.info.contact_steam and not self.info.contact_mail: - contact_row.add(rio.Text("", margin_top=2)) + for i, social_link in enumerate(self.info.socials): + social_links_grid.add( + rio.Link( + rio.Icon(SOCIAL_PLATFORM_ICON_MAP[social_link.platform], height=1.3, width=1.3, fill="primary"), + social_link.url, + open_in_new_tab=True + ), i//5, i if i < 5 else i - 5) return rio.Rectangle( content=content, diff --git a/ezgg_website/models/__init__.py b/ezgg_website/models/__init__.py new file mode 100644 index 0000000..57f12a2 --- /dev/null +++ b/ezgg_website/models/__init__.py @@ -0,0 +1,2 @@ +from .socials import SocialPlatform, SocialLink, SOCIAL_PLATFORM_ICON_MAP +from .member_info import MemberInfo diff --git a/ezgg_website/models/member_info.py b/ezgg_website/models/member_info.py new file mode 100644 index 0000000..aa4bc64 --- /dev/null +++ b/ezgg_website/models/member_info.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass, field +from pathlib import Path +from typing import Optional + +from ..models import SocialLink + + +@dataclass +class MemberInfo: + picture_path: Path + name: str + position: str + entry_date: str + socials: list[SocialLink] = field(default_factory=list) diff --git a/ezgg_website/models/socials.py b/ezgg_website/models/socials.py new file mode 100644 index 0000000..de5d131 --- /dev/null +++ b/ezgg_website/models/socials.py @@ -0,0 +1,35 @@ +from dataclasses import dataclass +from enum import Enum + + +class SocialPlatform(Enum): + MAIL = 0 + STEAM = 1 + DISCORD = 2 + X = 3 + FACEBOOK = 4 + YOUTUBE = 5 + TWITCH = 6 + INSTAGRAM = 7 + LINKEDIN = 8 + GIT = 9 + + +@dataclass +class SocialLink: + platform: SocialPlatform + url: str + + +SOCIAL_PLATFORM_ICON_MAP = { + SocialPlatform.MAIL: "material/mail", + SocialPlatform.STEAM: "custom/steam", + SocialPlatform.DISCORD: "custom/discord", + SocialPlatform.X: "custom/x", + SocialPlatform.FACEBOOK: "custom/facebook", + SocialPlatform.YOUTUBE: "custom/youtube", + SocialPlatform.TWITCH: "custom/twitch", + SocialPlatform.INSTAGRAM: "custom/instagram", + SocialPlatform.LINKEDIN: "custom/linkedin", + SocialPlatform.GIT: "custom/git" +} diff --git a/ezgg_website/pages/about.py b/ezgg_website/pages/about.py index 1d9722c..4f75ac8 100644 --- a/ezgg_website/pages/about.py +++ b/ezgg_website/pages/about.py @@ -20,9 +20,9 @@ class About(rio.Component): def build(self) -> rio.Component: return build_page(rio.Column( comps.build_news_post( - header="Die \"Einfach Zocken Genuss Gesellschaft\"", + header="Die \"Einfach Zocken Gaming Gesellschaft\"", article_text_path_or_text=""" -Die Einfach Zocken Genussgesellschaft wurde am 29. Oktober 2023 in Bad Endbach-Bottenhorn gegründet. Der Verein entstand aus der gemeinsamen Begeisterung für Videospiele, die einige Freunde in einer gemütlichen Kellerbar zusammenbrachte. Unsere Mission ist es, die Freizeitbeschäftigung "Videospiele" zu fördern und Menschen zusammenzubringen, die diese Leidenschaft teilen. +Die Einfach Zocken Gaming Gesellschaft wurde am 29. Oktober 2023 in Bad Endbach-Bottenhorn gegründet. Der Verein entstand aus der gemeinsamen Begeisterung für Videospiele, die einige Freunde in einer gemütlichen Kellerbar zusammenbrachte. Unsere Mission ist es, die Freizeitbeschäftigung "Videospiele" zu fördern und Menschen zusammenzubringen, die diese Leidenschaft teilen. ### Unsere Ziele und Mission diff --git a/ezgg_website/pages/imprint.py b/ezgg_website/pages/imprint.py index d4b9ab5..1e32dda 100644 --- a/ezgg_website/pages/imprint.py +++ b/ezgg_website/pages/imprint.py @@ -22,7 +22,7 @@ class Imprint(rio.Component): comps.build_news_post( header="Impressum", article_text_path_or_text=""" -#### Einfach Zocken Genuss Gesellschaft e.V. +#### Einfach Zocken Gaming Gesellschaft e.V. ```txt Im Elchgrund 18 @@ -46,8 +46,9 @@ Eingetragen im Vereinsregister. Registergericht: Amtsgericht Marburg -Registernummer: - folgt - +Aktenzeichen: VR 5837 ``` + """, date="" ) diff --git a/ezgg_website/pages/join.py b/ezgg_website/pages/join.py index b67e9c1..9694a85 100644 --- a/ezgg_website/pages/join.py +++ b/ezgg_website/pages/join.py @@ -23,7 +23,7 @@ class Join(rio.Component): comps.build_news_post( header="Eintritt in die EZ GG e.V.", article_text_path_or_text=""" -Wir freuen uns sehr, dass du Interesse daran hast, Mitglied bei der Einfach Zocken Genussgesellschaft zu werden! Unsere Gemeinschaft lebt von der Begeisterung und dem Engagement unserer Mitglieder. +Wir freuen uns sehr, dass du Interesse daran hast, Mitglied bei der Einfach Zocken Gaming Gesellschaft zu werden! Unsere Gemeinschaft lebt von der Begeisterung und dem Engagement unserer Mitglieder. Als Mitglied hast du die Möglichkeit, aktiv an unseren Veranstaltungen teilzunehmen und die Entwicklung des Vereins mitzugestalten. Egal, ob du ein erfahrener Gamer oder ein Neuling bist – bei uns bist du herzlich willkommen! diff --git a/ezgg_website/pages/privacy.py b/ezgg_website/pages/privacy.py index 4343690..f873801 100644 --- a/ezgg_website/pages/privacy.py +++ b/ezgg_website/pages/privacy.py @@ -33,7 +33,7 @@ Stand: _27. Mai 2024_ #### Verantwortlicher: ```txt -Einfach Zocken Genuss Gesellschaft e.V. +Einfach Zocken Gaming Gesellschaft e.V. Im Elchgrund 18 35080 Bad Endbach - Bottenhorn Deutschland diff --git a/ezgg_website/services/database_service.py b/ezgg_website/services/database_service.py index baaee2c..be96c3e 100644 --- a/ezgg_website/services/database_service.py +++ b/ezgg_website/services/database_service.py @@ -1,9 +1,7 @@ import rio from from_root import from_root -from ezgg_website.components import MemberInfo - -from ezgg_website.components.member_card import MemberInfo +from ..models import SocialPlatform, SocialLink, MemberInfo # @ToDo: Make real database service at some point @@ -18,50 +16,51 @@ class DatabaseService: name="David \"Typhus\" R.", position="1. Vorsitzender", entry_date="29.10.2023", - contact_mail="vorstand@ezgg-ev.de", - contact_steam="https://steamcommunity.com/id/originaltyphus" + socials=[ + SocialLink(SocialPlatform.MAIL, "mailto://vorstand@ezgg-ev.de"), + SocialLink(SocialPlatform.STEAM, "https://steamcommunity.com/id/originaltyphus"), + SocialLink(SocialPlatform.DISCORD, "https://discordapp.com/users/384329938292965382"), + SocialLink(SocialPlatform.FACEBOOK, "https://www.facebook.com/david.kaiser.5661"), + SocialLink(SocialPlatform.GIT, "https://git.jdrodenkirchen.de/drodenkirchen") + ] ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/jule.png"), name="Julia \"Ravenchild\" A.", position="2. Vorsitzende", entry_date="29.10.2023", - contact_mail="vorstand@ezgg-ev.de", - contact_steam="https://steamcommunity.com/profiles/76561198089911312" + socials=[ + SocialLink(SocialPlatform.MAIL, "mailto://vorstand@ezgg-ev.de"), + SocialLink(SocialPlatform.STEAM, "https://steamcommunity.com/profiles/76561198089911312"), + SocialLink(SocialPlatform.INSTAGRAM, "https://www.instagram.com/j.u.l.e.1995") + ] ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/jessy.png"), name="Jessy \"JessySixx\" R.", position="Schatzmeisterin", entry_date="29.10.2023", - contact_mail=None, - contact_steam=None + socials=[ + SocialLink(SocialPlatform.TWITCH, "https://twitch.tv/jessysixx88/home") + ] ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/tim.png"), name="Tim \"Matschwicht\" B.", position="Mitglied", - entry_date="29.10.2023", - contact_mail=None, - contact_steam=None + entry_date="29.10.2023" ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/dennis.png"), name="Dennis \"Goodman\" P.", position="Mitglied", - entry_date="29.10.2023", - contact_mail=None, - contact_steam=None + entry_date="29.10.2023" ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/tom.png"), name="Tom \"Tcprod\" C.", position="Mitglied", - entry_date="29.10.2023", - contact_mail=None, - contact_steam=None + entry_date="29.10.2023" ), MemberInfo( picture_path=from_root("ezgg_website/assets/member_pictures/chris.png"), name="Chris \"Meliodas\" K.", position="Mitglied", - entry_date="29.10.2023", - contact_mail=None, - contact_steam=None + entry_date="29.10.2023" ) ]