From 27e009ab0b705c4caea55b32c15ca62754af9e9d Mon Sep 17 00:00:00 2001 From: murmeldin <git@marekkrug.de> Date: Wed, 16 Apr 2025 19:05:03 +0200 Subject: [PATCH 1/4] format all config files --- config/_default/hugo.toml | 105 +++++++++--------- config/_default/languages.de.toml | 46 ++++---- config/_default/markup.toml | 8 +- config/_default/menus.de.toml | 52 ++++----- config/_default/params.toml | 176 +++++++++++++++--------------- 5 files changed, 189 insertions(+), 198 deletions(-) diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index 4253a6e..f96279d 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -1,92 +1,89 @@ -theme = 'blowfish' -baseURL = 'https://oururl.de/' -defaultContentLanguage = 'de' +theme = "blowfish" +baseURL = "https://oururl.de/" +defaultContentLanguage = "de" relativeURLs = true canonifyURLs = true - pluralizeListTitles = false - enableRobotsTXT = true summaryLength = 0 - buildDrafts = false buildFuture = false - enableEmoji = true [pagination] - pagerSize = 100 +pagerSize = 100 [imaging] - anchor = 'Center' +anchor = "Center" [taxonomies] - tag = 'tags' - category = 'categories' - author = 'authors' - series = 'series' +tag = "tags" +category = "categories" +author = "authors" +series = "series" [sitemap] - changefreq = 'daily' - filename = 'sitemap.xml' - priority = 0.5 +changefreq = "daily" +filename = "sitemap.xml" +priority = 0.5 [permalinks] - post = '/post/:year/:month/:day/:title/' +post = "/post/:year/:month/:day/:title/" [outputs] - home = ['html', 'rss', 'json'] - section = ['html', 'Calendar', 'rss', 'xml'] - page = ['html', 'Calendar'] +home = ["html", "rss", "json"] +section = ["html", "Calendar", "rss", "xml"] +page = ["html", "Calendar"] # Output Formats Configuration [outputFormats.Calendar] - mediaType = 'text/calendar' - baseName = 'index' - isPlainText = true - notAlternative = true +mediaType = "text/calendar" +baseName = "index" +isPlainText = true +notAlternative = true [outputFormats.XML] - mediaType = 'application/xml' - baseName = 'index' - isPlainText = true +mediaType = "application/xml" +baseName = "index" +isPlainText = true [outputFormats.RSS] - mediaType = 'application/rss+xml' +mediaType = "application/rss+xml" # Media Types Configuration [mediaTypes] - [mediaTypes.'text/calendar'] - suffixes = ['ics'] - [mediaTypes.'application/rss+xml'] - suffixes = ['xml', 'rss'] +[mediaTypes.'text/calendar'] +suffixes = ["ics"] + +[mediaTypes.'application/rss+xml'] +suffixes = ["xml", "rss"] [related] - threshold = 0 - toLower = false +threshold = 0 +toLower = false - [[related.indices]] - name = 'tags' - weight = 100 +[[related.indices]] +name = "tags" +weight = 100 - [[related.indices]] - name = 'categories' - weight = 100 +[[related.indices]] +name = "categories" +weight = 100 - [[related.indices]] - name = 'series' - weight = 50 +[[related.indices]] +name = "series" +weight = 50 - [[related.indices]] - name = 'authors' - weight = 20 +[[related.indices]] +name = "authors" +weight = 20 - [[related.indices]] - name = 'date' - weight = 10 +[[related.indices]] +name = "date" +weight = 10 - [[related.indices]] - applyFilter = false - name = 'fragmentrefs' - type = 'fragments' - weight = 10 +[[related.indices]] +applyFilter = false +name = "fragmentrefs" +type = "fragments" +weight = 10 diff --git a/config/_default/languages.de.toml b/config/_default/languages.de.toml index 71158ad..ed57e00 100644 --- a/config/_default/languages.de.toml +++ b/config/_default/languages.de.toml @@ -5,28 +5,28 @@ weight = 1 title = "Chaos Computer Club Berlin" [params] - displayName = "DE" - isoCode = "de" - rtl = false - dateFormat = "January 2, 2006" - DateForm = "30.12.2006" - logo = "img/logo.png" - # secondaryLogo = "img/avatar-CCCB-Logo.png" - description = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin." - copyright = "CCC-BY" - selfHosted = true - mainSections = ["post", "datengarten"] +displayName = "DE" +isoCode = "de" +rtl = false +dateFormat = "January 2, 2006" +DateForm = "30.12.2006" +logo = "img/logo.png" +# secondaryLogo = "img/avatar-CCCB-Logo.png" +description = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin." +copyright = "CCC-BY" +selfHosted = true +mainSections = ["post", "datengarten"] [params.author] - # name = "Your name here" - email = "mail2025@berlin.ccc.de" - image = "img/logo.png" - # imageQuality = 96 - headline = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin." -# bio = "A little bit about you" - links = [ - { mastodon = "https://chaos.social/@clubdiscordia" }, - { forgejo = "https://git.berlin.ccc.de/explore/repos" }, - { email = "mailto:mail2025@berlin.ccc.de" }, - { github = "https://github.com/cccb/" }, - ] +# name = "Your name here" +email = "mail2025@berlin.ccc.de" +image = "img/logo.png" +# imageQuality = 96 +headline = "Willkommen! Wir sind ein Erfa-Kreis des Chaos Computer Club e.V. und die örtliche Niederlassung des CCC in Berlin." +# bio = "A little bit about you" +links = [ + { mastodon = "https://chaos.social/@clubdiscordia" }, + { forgejo = "https://git.berlin.ccc.de/explore/repos" }, + { email = "mailto:mail2025@berlin.ccc.de" }, + { github = "https://github.com/cccb/" }, +] diff --git a/config/_default/markup.toml b/config/_default/markup.toml index 4219cc6..fed9b07 100644 --- a/config/_default/markup.toml +++ b/config/_default/markup.toml @@ -3,11 +3,11 @@ [goldmark] [goldmark.renderer] - unsafe = true +unsafe = true [highlight] - noClasses = false +noClasses = false [tableOfContents] - startLevel = 1 - endLevel = 5 +startLevel = 1 +endLevel = 5 diff --git a/config/_default/menus.de.toml b/config/_default/menus.de.toml index 041c14d..e32926e 100644 --- a/config/_default/menus.de.toml +++ b/config/_default/menus.de.toml @@ -1,7 +1,7 @@ # -- Main Menu -- # The main menu is displayed in the header at the top of the page. # Acceptable parameters are name, pageRef, page, url, title, weight. -# +# # The simplest menu configuration is to provide: # name = The name to be displayed for this menu link # pageRef = The identifier of the page or section to link to @@ -10,51 +10,51 @@ # overridden by providing a weight value. The menu will then be # ordered by weight from lowest to highest. -#[[main]] +# [[main]] # name = "Blog" # pageRef = "posts" # weight = 10 [[main]] - name = "Verein" - pageRef = "verein" - weight = 200 +name = "Verein" +pageRef = "verein" +weight = 200 [[main]] - name = "Veranstaltungen" - pageRef = "veranstaltungen" - weight = 300 +name = "Veranstaltungen" +pageRef = "veranstaltungen" +weight = 300 [[main]] - name = "Mitgliedschaft" - pageRef = "mitgliedschaft" - weight = 400 +name = "Mitgliedschaft" +pageRef = "mitgliedschaft" +weight = 400 [[main]] - name = "News" - pageRef = "post" - weight = 500 +name = "News" +pageRef = "post" +weight = 500 # -- Footer Menu -- # The footer menu is displayed at the bottom of the page, just before # the copyright notice. Configure as per the main menu above. [[footer]] - name = "Tags" - pageRef = "tags" - weight = 10 +name = "Tags" +pageRef = "tags" +weight = 10 [[footer]] - name = "Kategorien" - pageRef = "categories" - weight = 20 +name = "Kategorien" +pageRef = "categories" +weight = 20 [[footer]] - name = "Impressum" - pageRef = "impressum" - weight = 500 +name = "Impressum" +pageRef = "impressum" +weight = 500 [[footer]] - name = "Datenschutz" - pageRef = "datenschutz" - weight = 600 +name = "Datenschutz" +pageRef = "datenschutz" +weight = 600 diff --git a/config/_default/params.toml b/config/_default/params.toml index d19b358..15fd981 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -5,13 +5,11 @@ # Refer to the theme docs for more details about each of these parameters. # https://blowfish.page/docs/configuration/#theme-parameters -colorScheme = "fira" # "congo" -defaultAppearance = "dark" # valid options: light or dark +colorScheme = "fira" # "congo" +defaultAppearance = "dark" # valid options: light or dark autoSwitchAppearance = false - enableSearch = true enableCodeCopy = false - replyByEmail = false # mainSections = ["section1", "section2"] @@ -21,113 +19,109 @@ replyByEmail = false disableImageOptimization = false disableTextInHeader = false backgroundImageWidth = 1200 - -# defaultBackgroundImage = "/img/cccb-im-winter.jpg" # used as default for background images -defaultFeaturedImage = "/img/avatar-CCCB-Logo.png" # used as default for featured images in all articles - +# defaultBackgroundImage = "/img/cccb-im-winter.jpg" # used as default for background images +defaultFeaturedImage = "/img/avatar-CCCB-Logo.png" # used as default for featured images in all articles # highlightCurrentMenuArea = true smartTOC = true smartTOCHideUnfocusedChildren = true - giteaDefaultServer = "https://git.fsfe.org" forgejoDefaultServer = "https://git.berlin.ccc.de" [header] - layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur +layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur [footer] - showMenu = true - showCopyright = true - showThemeAttribution = true - showAppearanceSwitcher = true - showScrollToTop = true +showMenu = true +showCopyright = true +showThemeAttribution = true +showAppearanceSwitcher = true +showScrollToTop = true [homepage] - layout = "background" # valid options: page, profile, hero, card, background, custom - homepageImage = "img/cccb-im-winter.jpg" # used in: hero, and card - showRecent = true - showRecentItems = 9 - showMoreLink = true - showMoreLinkDest = "/post/" - cardView = true - cardViewScreenWidth = false - layoutBackgroundBlur = false # only used when layout equals background +layout = "background" # valid options: page, profile, hero, card, background, custom +homepageImage = "img/cccb-im-winter.jpg" # used in: hero, and card +showRecent = true +showRecentItems = 9 +showMoreLink = true +showMoreLinkDest = "/post/" +cardView = true +cardViewScreenWidth = false +layoutBackgroundBlur = false # only used when layout equals background [article] - showDate = true - showViews = false - showLikes = false - showDateOnlyInArticle = false - showDateUpdated = true - showAuthor = false - showAuthorBottom = true - showHero = true - heroStyle = "big" # valid options: basic, big, background, thumbAndBackground - layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground - layoutBackgroundHeaderSpace = true # only used when heroStyle equals background - showBreadcrumbs = true - showDraftLabel = true - showEdit = true - editURL = "https://git.berlin.ccc.de/cccb-website-team/www/src/branch/staging/content/" - editAppendPath = true - seriesOpened = false - showHeadingAnchors = true - showPagination = false - invertPagination = false - showReadingTime = true - showTableOfContents = true - # showRelatedContent = false - # relatedContentLimit = 3 - showTaxonomies = true - showAuthorsBadges = false - showWordCount = true - # sharingLinks = [ "mastodon", "email" ] - showZenMode = false +showDate = true +showViews = false +showLikes = false +showDateOnlyInArticle = false +showDateUpdated = true +showAuthor = false +showAuthorBottom = true +showHero = true +heroStyle = "big" # valid options: basic, big, background, thumbAndBackground +layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground +layoutBackgroundHeaderSpace = true # only used when heroStyle equals background +showBreadcrumbs = true +showDraftLabel = true +showEdit = true +editURL = "https://git.berlin.ccc.de/cccb-website-team/www/src/branch/staging/content/" +editAppendPath = true +seriesOpened = false +showHeadingAnchors = true +showPagination = false +invertPagination = false +showReadingTime = true +showTableOfContents = true +# showRelatedContent = false +# relatedContentLimit = 3 +showTaxonomies = true +showAuthorsBadges = false +showWordCount = true +# sharingLinks = [ "mastodon", "email" ] +showZenMode = false [list] - showHero = false - # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground - layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground - layoutBackgroundHeaderSpace = true # only used when heroStyle equals background - showBreadcrumbs = false - showSummary = false - showViews = false - showLikes = false - showTableOfContents = false - showCards = false - orderByWeight = false - groupByYear = true - cardView = false - cardViewScreenWidth = false - constrainItemsWidth = false +showHero = false +# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground +layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground +layoutBackgroundHeaderSpace = true # only used when heroStyle equals background +showBreadcrumbs = false +showSummary = false +showViews = false +showLikes = false +showTableOfContents = false +showCards = false +orderByWeight = false +groupByYear = true +cardView = false +cardViewScreenWidth = false +constrainItemsWidth = false [sitemap] - excludedKinds = ["taxonomy", "term"] +excludedKinds = ["taxonomy", "term"] [taxonomy] - showTermCount = true - showHero = false - # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground - showBreadcrumbs = false - showViews = false - showLikes = false - showTableOfContents = false - cardView = false - category = "categories" - series = "series" - tag = "tags" - +showTermCount = true +showHero = false +# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground +showBreadcrumbs = false +showViews = false +showLikes = false +showTableOfContents = false +cardView = false +category = "categories" +series = "series" +tag = "tags" [term] - showHero = false - # heroStyle = "background" # valid options: basic, big, background, thumbAndBackground - showBreadcrumbs = false - showViews = false - showLikes = false - showTableOfContents = true - groupByYear = false - cardView = false - cardViewScreenWidth = false +showHero = false +# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground +showBreadcrumbs = false +showViews = false +showLikes = false +showTableOfContents = true +groupByYear = false +cardView = false +cardViewScreenWidth = false [verification] - fediverse = "@clubdiscordia@chaos.social" +fediverse = "@clubdiscordia@chaos.social" From 26c9a2e0d43f9747454a23b04c9f35b6991841b2 Mon Sep 17 00:00:00 2001 From: murmeldin <git@marekkrug.de> Date: Thu, 17 Apr 2025 00:43:38 +0200 Subject: [PATCH 2/4] added 404 page --- content/404.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/404.md diff --git a/content/404.md b/content/404.md new file mode 100644 index 0000000..d9fcfba --- /dev/null +++ b/content/404.md @@ -0,0 +1 @@ +Leider existiert diese Seite nicht. \ No newline at end of file From 6281666093040018b10cbad230202a727e82bdff Mon Sep 17 00:00:00 2001 From: murmeldin <git@marekkrug.de> Date: Thu, 17 Apr 2025 00:45:32 +0200 Subject: [PATCH 3/4] datengarten post design overhaul --- layouts/datengarten/single.html | 62 +++++++++++++++++++----------- layouts/partials/talk-infobox.html | 12 +++--- 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/layouts/datengarten/single.html b/layouts/datengarten/single.html index aac49dc..6edd0d7 100644 --- a/layouts/datengarten/single.html +++ b/layouts/datengarten/single.html @@ -4,14 +4,12 @@ <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> <article role="main" class="blog-post"> <article class="max-w-prose mx-auto"> - <h1 class="text-2xl font-bold">{{ .Title }}</h1> + <h1 class="mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral pb-4">{{ .Title }}</h1> {{ if .Params.subtitle }} - <h2 class="text-xl">{{ .Params.subtitle }}</h2> + <h2 class="text-xl opacity-70">{{ .Params.subtitle }}</h2> {{ end }} - <div class="mt-4 border p-4 bg-secondary-bg rounded"> - {{ partial "talk-infobox" . }} - </div> + {{ partial "talk-infobox" . }} <div class="mt-4 content"> {{ .Content }} @@ -19,11 +17,18 @@ </article> {{ if .Params.tags }} - <div class="blog-tags"> - {{ range .Params.tags }} - <a href="{{ $.Site.LanguagePrefix | absURL }}/tags/{{ . | urlize }}/">{{ . }}</a> - {{ end }} - </div><!--/.blog-tags--> + <div class="blog-tags max-w-prose mx-auto mt-4 flex flex-wrap gap-4 border-2 p-5 pt-7 mt-6 rounded-lg opacity-75 drop-shadow-md"> + <p class="opacity-50">Tags:</p> + <br> + {{ range .Params.tags }} + <a + href="{{ $.Site.LanguagePrefix | absURL }}/tags/{{ . | urlize }}/" + class="inline-block px-3 py-1 rounded-lg text-sm font-semibold border-2 dark:bg-neutral-700 border-dotted shadow-lg shadow-blue-500/50" + > + {{ . }} + </a> + {{ end }} + </div> {{ end }} {{ if .Site.Params.socialShare }} @@ -37,18 +42,31 @@ </article><!--/.blog-post--> {{ if ne .Type "page" }} - <ul class="pager blog-pager"> - {{ if .PrevInSection }} - <li class="previous"> - <a href="{{ .PrevInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .PrevInSection.Title }}">← {{ i18n "previousPost" }}</a> - </li><!--/.previous--> - {{ end }} - {{ if .NextInSection }} - <li class="next"> - <a href="{{ .NextInSection.Permalink }}" data-toggle="tooltip" data-placement="top" title="{{ .NextInSection.Title }}">{{ i18n "nextPost" }} →</a> - </li><!--/.next--> - {{ end }} - </ul><!--/.pager .blog-pager--> + <ul class="pager blog-pager flex justify-between items-center mt-6 list-none p-0"> + {{ if .PrevInSection }} + <li class="previous"> + <a + href="{{ .PrevInSection.Permalink }}" + class="inline-block px-4 py-2 text-lg font-semibold bg-neutral-200 dark:bg-neutral-700 rounded hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors" + title="{{ .PrevInSection.Title }}" + > + ← {{ i18n "previousPost" }} + </a> + </li> + {{ end }} + + {{ if .NextInSection }} + <li class="next"> + <a + href="{{ .NextInSection.Permalink }}" + class="inline-block px-4 py-2 text-lg font-semibold bg-neutral-200 dark:bg-neutral-700 rounded hover:bg-neutral-300 dark:hover:bg-neutral-600 transition-colors" + title="{{ .NextInSection.Title }}" + > + {{ i18n "nextPost" }} → + </a> + </li> + {{ end }} + </ul> {{ end }} diff --git a/layouts/partials/talk-infobox.html b/layouts/partials/talk-infobox.html index ea71a4b..e479722 100644 --- a/layouts/partials/talk-infobox.html +++ b/layouts/partials/talk-infobox.html @@ -1,4 +1,4 @@ -<p> +<p class="mt-4 gap-4 border-2 p-5 pt-7 mt-6 rounded-lg shadow-lg opacity-75 drop-shadow-md"> {{ if isset .Page.Params "speaker_url" }} <strong><i class="far fa-user fa-fw"></i></strong> <a href="{{ .Page.Params.Speaker_url }}">{{ .Page.Params.Speaker }}</a><br/> {{ else }} @@ -11,14 +11,14 @@ {{ with (eq $.Page.Params.Language "en") }} <strong><i class="fa fa-language fa-fw"></i>🌐 Language:</strong> Englisch/English<br/> {{ end }} -<strong><i class="fa fa-map-marker fa-fw"></i>📍 Location:</strong> {{ partial "location" .Page.Params.Location }} -</p> +<strong><i class="fa fa-map-marker fa-fw"></i>📍 Location:</strong> {{ partial "location" .Page.Params.Location }}<br/> {{ if isset .Page.Params "recording" }} - <p><strong><i class="fa fa-video fa-fw"></i>📹 Livestream: </strong> <a href="{{ .Page.Params.Recording }}">{{ .Page.Params.Recording }}</a></p> + <strong><i class="hover:underline hover:decoration-primary-400 hover:text-primary-500"></i>📹 Livestream: </strong> <a href="{{ .Page.Params.Recording }}">{{ .Page.Params.Recording }}</a></p> {{ else }} {{ if and (eq .Page.Params.Streaming true) (not (isset .Page.Params "recording" )) }} - <p><strong>Stream:</strong> <a href="https://streaming.media.ccc.de/datengarten">streaming.media.ccc.de/datengarten</a></p> + <p><strong>Stream:</strong> <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://streaming.media.ccc.de/datengarten">streaming.media.ccc.de/datengarten</a></p> {{ else }} <p><strong><i class="fa fa-exclamation-triangle fa-fw"></i></strong> Dieser Vortrag wird <strong>nicht</strong> gestreamed</a>! / This talk will <strong>not</strong> be streamed!</p> {{ end }} -{{ end }} \ No newline at end of file +{{ end }} +</p> \ No newline at end of file From 1e245cf6cd85c0ef334d97951f1c129c4a35c638 Mon Sep 17 00:00:00 2001 From: murmeldin <git@marekkrug.de> Date: Thu, 17 Apr 2025 00:48:03 +0200 Subject: [PATCH 4/4] newly added club status, currently disabled until spaceapi is set public --- assets/js/clubstatus.js | 67 ++++++++++++++++++++++++++++++ content/_index.md | 21 ++++++++++ layouts/partials/clubstatus.html | 3 ++ layouts/partials/footer.html | 70 ++++++++++++++++++++++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 assets/js/clubstatus.js create mode 100644 layouts/partials/clubstatus.html create mode 100644 layouts/partials/footer.html diff --git a/assets/js/clubstatus.js b/assets/js/clubstatus.js new file mode 100644 index 0000000..d87eb04 --- /dev/null +++ b/assets/js/clubstatus.js @@ -0,0 +1,67 @@ +const spaceapiUrl = "https://spaceapi.hamburg.ccc.de" +const interval_ms = 60000 + +console.log("clubstatus.js geladen!"); /* TODO: ENTFERNEN */ + +function timeDistanceDE(pastDate) { + const seconds = Math.floor((Date.now() - pastDate.getTime()) / 1000) + const minutes = Math.floor(seconds / 60) + const hours = Math.floor(minutes / 60) + const days = Math.floor(hours / 24) + + if (days = 1) return `since ${days}d` + if (days > 1) return `since ${days}d` + if (hours = 1) return `since ${hours}h` + if (hours > 1) return `since ${hours}h` + if (minutes = 1) return `since ${minutes}min` + if (minutes > 1) return `since ${minutes}min` + return `gerade eben` +} + +function updateRoomState(openState, lastChangeTimestamp) { + const roomstate = document.querySelector('#clubstatus-badge') + const statusItem = roomstate.querySelector(".state") + const durationItem = roomstate.querySelector(".duration") + + if (!statusItem || !durationItem) return + + roomstate.classList.remove("open", "closed", "unknown") + statusItem.classList.remove("open", "closed", "unknown") + + if (openState === null || lastChangeTimestamp === null) { + statusItem.textContent = "unbekannt" + statusItem.classList.add("unknown") + durationItem.textContent = "(since unbekannt)" + } else { + const changeDate = new Date(lastChangeTimestamp * 1000) + const sinceText = timeDistanceDE(changeDate) + + if (openState) { + statusItem.textContent = "open" + statusItem.classList.add("open") + } else { + statusItem.textContent = "closed" + statusItem.classList.add("closed") + } + + durationItem.textContent = `(${sinceText})` + } +} + +function fetchRoomState() { + fetch(spaceapiUrl) + .then(response => response.json()) + .then(data => { + const openState = data?.state?.open ?? null + const lastChange = data?.state?.lastchange ?? null + updateRoomState(openState, lastChange) + }) + .catch(err => { + console.error("Fehler beim Laden der SpaceAPI:", err) + updateRoomState(null, null) + }) +} + +// Initialer Abruf + dann regelmäßig +fetchRoomState() +setInterval(fetchRoomState, interval_ms) diff --git a/content/_index.md b/content/_index.md index 872be10..6945629 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,6 +1,27 @@ --- description: "Startseite CCCB mit Kurzkalender" --- +/* this section will be enabled when the cccb spaceapi is public + +<div style="display: flex; justify-content: center;"> + <div id="clubstatus-badge">spacestatus unknown</div> +</div> + +<style> + #clubstatus-badge { + position: relative; + background-color: #2ecc71; + flex: initial; + color: white; + padding: 0.25em 0.6em; + font-size: 0.75rem; + border-radius: 1em; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.3); + font-weight: bold; + } +</style> + +*/ ### Nächste Veranstaltungen: diff --git a/layouts/partials/clubstatus.html b/layouts/partials/clubstatus.html new file mode 100644 index 0000000..8288367 --- /dev/null +++ b/layouts/partials/clubstatus.html @@ -0,0 +1,3 @@ +{{ $js := resources.Get "js/clubstatus.js" | resources.Minify | resources.Fingerprint }} +<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}"></script> + diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100644 index 0000000..12a2638 --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1,70 @@ +<footer id="site-footer" class="py-10 print:hidden"> + {{/* Footer menu */}} + {{ if .Site.Params.footer.showMenu | default true }} + {{ if .Site.Menus.footer }} + <nav class="flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400"> + <ul class="flex flex-col list-none sm:flex-row"> + {{ range .Site.Menus.footer }} + <li class="flex mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"> + <a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center" href="{{ .URL }}" + title="{{ .Title }}"> + {{ if .Pre }} + <span {{ if and .Pre .Name}} class="mr-1" {{ end }}> + {{ partial "icon.html" .Pre }} + </span> + {{ end }} + {{ .Name | markdownify }} + </a> + </li> + {{ end }} + </ul> + </nav> + {{ end }} + {{ end }} + <div class="flex items-center justify-between"> + + {{/* Copyright */}} + {{ if .Site.Params.footer.showCopyright | default true }} + <p class="text-sm text-neutral-500 dark:text-neutral-400"> + {{- with replace .Site.Params.copyright "{ year }" now.Year }} + {{ . | markdownify }} + {{- else }} + © + {{ now.Format "2006" }} + {{ .Site.Params.Author.name | markdownify }} + {{- end }} + </p> + {{ end }} + + {{/* Theme attribution */}} + {{ if .Site.Params.footer.showThemeAttribution | default true }} + <p class="text-xs text-neutral-500 dark:text-neutral-400"> + {{ $hugo := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" + href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a>` + }} + {{ $blowfish := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" + href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a>` }} + {{ i18n "footer.powered_by" (dict "Hugo" $hugo "Theme" $blowfish) | safeHTML }} + (<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" + href="https://git.berlin.ccc.de/cccb-website-team/www">Git-Repo</a>) + </p> + {{ end }} + + </div> + <script> + {{ if not .Site.Params.disableImageZoom | default true }} + mediumZoom(document.querySelectorAll("img:not(.nozoom)"), { + margin: 24, + background: 'rgba(0,0,0,0.5)', + scrollOffset: 0, + }) + {{ end }} + </script> + {{ $jsProcess := resources.Get "js/process.js" }} + {{ $jsProcess = $jsProcess | resources.Minify | resources.Fingerprint "sha512" }} + <script type="text/javascript" src="{{ $jsProcess.RelPermalink }}" integrity="{{ $jsProcess.Data.Integrity }}"></script> + {{/* Extend footer - eg. for extra scripts, etc. */}} + {{ if templates.Exists "partials/extend-footer.html" }} + {{ partialCached "extend-footer.html" . }} + {{ end }} +</footer>