neue Ordnerstruktur + richtige editurl + kein kochen auf clubdiscordia seite
Some checks failed
Release website / build-and-deploy (push) Has been cancelled
Some checks failed
Release website / build-and-deploy (push) Has been cancelled
This commit is contained in:
parent
7cf5c2ee0f
commit
91de4b20f2
18 changed files with 4 additions and 4 deletions
45
content/verein/anfahrt.md
Normal file
45
content/verein/anfahrt.md
Normal file
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
title: "Anfahrt"
|
||||
date: 2018-05-17T23:04:10+02:00
|
||||
menu:
|
||||
main:
|
||||
parent: "Verein"
|
||||
---
|
||||
|
||||
# Allgemeine Hinweise
|
||||
|
||||
Die Clubräume liegen im Hinterhof der **Marienstr. 11, 10117 Berlin** ([Google](http://maps.google.com/maps?hl=de&q=Marienstr.%2011%2C%2010117%20Berlin), [OpenStreetMap](http://www.openstreetmap.org/node/2007229025#map=17/52.52159/13.38547)). Die Koordinaten sind **52,52194° Nord; 13,38261° Ost**.
|
||||
|
||||
# Nahbereichskarte
|
||||
|
||||
{{< figure
|
||||
src="/img/Weg_zum_CCCB.png"
|
||||
title="Fußweg vom S Friedrichstraße zum CCCB"
|
||||
alt="Fußweg vom S Friedrichstraße zum CCCB"
|
||||
>}}
|
||||
|
||||
# Ich reise an...
|
||||
|
||||
## mit dem Rad
|
||||
|
||||
Eine beschränkte Anzahl von Fahrradständern befindet sich im Innenhof. Auf dem Weg zum Club befinden sich zahlreiche Fahrradstraßen, die bevorzugt werden sollten. Nutzt beispielsweise [BBBike.de](http://bbbike.de/cgi-bin/bbbike.cgi).
|
||||
|
||||
## mit öffentlichem Nahverkehr
|
||||
|
||||
Der Club befindet sich in unmittelbarer Nähe zum S+U Bahnhof **Friedrichstraße**, an dem auch Regionalbahnen halten. Vom S-Bahn-Bahnsteig gibt es einen direkten Weg über die Spree unterhalb der Bahnbrücke. Über die Albrechtstraße erreicht ihr die Marienstraße.
|
||||
|
||||
## mit dem Fernverkehr
|
||||
|
||||
Aussteigen in **Berlin Hauptbahnhof**. Von dort mit jeder S-Bahn oder Regionalbahn Richtung Osten auf der Stadtbahn eine Haltestelle bis zum **Bahnhof Friedrichstraße** fahren. Den Bahnhof Richtung Spree verlassen, dann die Fußgängerbrücke über den Fluß nehmen und der Albrechtstraße bis zur Stichstraße Marienstraße folgen.
|
||||
|
||||
## mit dem Flugzeug
|
||||
|
||||
* vom **Flughafen Berlin Brandenburg** (BER/EDDB): mit dem Airport Express (RE 7 und RB 14) oder S9 bis zum **Bahnhof Friedrichstraße**. Alternativ mit dem FEX bis **Berlin Hauptbahnhof**. Von dort siehe jeweils Abschnitt **Fernverkehr**. **Achtung:** Terminal 5 (früher: SXF) ist nicht mit dem Rest des BER verbunden. Als einzige direkte Bahnanbindung steht hier die S9 zur Verfügung.
|
||||
* vom **Flugplatz Straußberg** (EDAY): S7 direkt bis zum **Bahnhof Friedrichstraße**. Von dort siehe Abschnitt **öffentlicher Nahverkehr**.
|
||||
|
||||
## mit dem Auto
|
||||
|
||||
Am besten dem Navigationsgerät folgen. Zufahrt aus Richtung Hauptbahnhof oder Brandenburger Tor ist über die Luisenstraße möglich. Wer von der Friedrichstraße kommt, fährt entweder über den Schiffbauerdamm und die Albrechtstraße (Behinderung durch Außgengastronomie und Kopfsteinpflaster) oder fährt über die Reinhardstraße und die Luisenstraße (die Albrechtstraße ist nur in die Gegenrichtung befahrbar).
|
||||
|
||||
**Warnung:** Vor Ort gibt es je nach Tageszeit wenige Parkmöglichkeiten. Die Marienstraße und alle umliegenden Straßen unterliegen der Parkraumbewirtschaftung seitens des Bezirks. Parkplätze in unmittelbarer Nähe sind selten.
|
||||
|
370
content/verein/calendar.md
Normal file
370
content/verein/calendar.md
Normal file
|
@ -0,0 +1,370 @@
|
|||
---
|
||||
title: "Kalender"
|
||||
subtitle: "Der Kalender des CCCB"
|
||||
date: 2025-02-26T10:00:00+02:00
|
||||
menu:
|
||||
main:
|
||||
parent: "Verein"
|
||||
---
|
||||

|
||||
|
||||
<!-- Kalender-Widget -->
|
||||
<style>
|
||||
.calendar-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
width: 100%;
|
||||
gap: 20px;
|
||||
}
|
||||
#calendar {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
}
|
||||
#event-panel {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
background-color: var(--color-bg-secondary);
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
min-height: 300px;
|
||||
display: none;
|
||||
}
|
||||
#calendar-controls {
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
#calendar-controls button {
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 2em;
|
||||
cursor: pointer;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
#calendar-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
#calendar-table th, #calendar-table td {
|
||||
border: 1px solid var(--color-border);
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
height: 60px;
|
||||
width: 14.28%;
|
||||
}
|
||||
#calendar-table th {
|
||||
background-color: var(--color-bg-secondary);
|
||||
}
|
||||
#calendar-table td {
|
||||
background-color: var(--color-bg-primary);
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
#calendar-table td:hover {
|
||||
background-color: var(--color-bg-hover);
|
||||
}
|
||||
.event-dot {
|
||||
height: 8px;
|
||||
width: 8px;
|
||||
background-color: greenyellow;
|
||||
border-radius: 50%;
|
||||
display: block;
|
||||
margin: 5px auto 0;
|
||||
}
|
||||
.has-event {
|
||||
background-color: var(--color-bg-secondary) !important;
|
||||
}
|
||||
.selected-day {
|
||||
background-color: var(--color-bg-hover) !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
#event-date {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.event-item {
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
}
|
||||
.event-title {
|
||||
font-weight: bold;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.event-time, .event-description {
|
||||
font-size: 0.9em;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.no-events {
|
||||
font-style: italic;
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="calendar-container">
|
||||
<div id="calendar">
|
||||
<div id="calendar-controls">
|
||||
<button id="prev-month">←</button>
|
||||
<span id="current-month"></span>
|
||||
<button id="next-month">→</button>
|
||||
</div>
|
||||
<table id="calendar-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Mo</th>
|
||||
<th>Di</th>
|
||||
<th>Mi</th>
|
||||
<th>Do</th>
|
||||
<th>Fr</th>
|
||||
<th>Sa</th>
|
||||
<th>So</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="calendar-body"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="event-panel">
|
||||
<div id="event-date"></div>
|
||||
<div id="event-details"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
let events = [];
|
||||
let eventsByDate = {};
|
||||
|
||||
// Funktion zum Parsen der ICS-Datei
|
||||
function parseICS(icsText) {
|
||||
let events = [];
|
||||
let lines = icsText.split(/\r?\n/);
|
||||
let event = null;
|
||||
lines.forEach(line => {
|
||||
if (line.startsWith("BEGIN:VEVENT")) {
|
||||
event = {};
|
||||
} else if (line.startsWith("END:VEVENT")) {
|
||||
if (event) events.push(event);
|
||||
event = null;
|
||||
} else if (event) {
|
||||
let colonIndex = line.indexOf(":");
|
||||
if (colonIndex > -1) {
|
||||
let key = line.substring(0, colonIndex);
|
||||
let value = line.substring(colonIndex + 1);
|
||||
if (key.startsWith("DTSTART")) {
|
||||
event.start = value;
|
||||
} else if (key.startsWith("DTEND")) {
|
||||
event.end = value;
|
||||
} else if (key.startsWith("SUMMARY")) {
|
||||
event.summary = value;
|
||||
} else if (key.startsWith("DESCRIPTION")) {
|
||||
event.description = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return events;
|
||||
}
|
||||
|
||||
// Hilfsfunktion: Parst einen ICS-Datum-String ins Format "YYYY-MM-DD"
|
||||
function parseDateString(icsDateStr) {
|
||||
// Erwartet entweder ganztägige Daten (YYYYMMDD) oder Datum+Zeit (YYYYMMDDTHHmmssZ)
|
||||
if (icsDateStr.length === 8) {
|
||||
let year = icsDateStr.substring(0, 4);
|
||||
let month = icsDateStr.substring(4, 6);
|
||||
let day = icsDateStr.substring(6, 8);
|
||||
return `${year}-${month}-${day}`;
|
||||
} else if (icsDateStr.length >= 15) {
|
||||
let year = icsDateStr.substring(0, 4);
|
||||
let month = icsDateStr.substring(4, 6);
|
||||
let day = icsDateStr.substring(6, 8);
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Kalender initialisieren
|
||||
let currentYear, currentMonth;
|
||||
const currentMonthElem = document.getElementById("current-month");
|
||||
const calendarBody = document.getElementById("calendar-body");
|
||||
const eventPanel = document.getElementById("event-panel");
|
||||
const eventDateElem = document.getElementById("event-date");
|
||||
const eventDetailsElem = document.getElementById("event-details");
|
||||
|
||||
document.getElementById("prev-month").addEventListener("click", function(){
|
||||
currentMonth--;
|
||||
if (currentMonth < 0) {
|
||||
currentMonth = 11;
|
||||
currentYear--;
|
||||
}
|
||||
renderCalendar(currentYear, currentMonth);
|
||||
});
|
||||
document.getElementById("next-month").addEventListener("click", function(){
|
||||
currentMonth++;
|
||||
if (currentMonth > 11) {
|
||||
currentMonth = 0;
|
||||
currentYear++;
|
||||
}
|
||||
renderCalendar(currentYear, currentMonth);
|
||||
});
|
||||
|
||||
function renderCalendar(year, month) {
|
||||
// Setze die Monatsbeschriftung (in Deutsch)
|
||||
const monthNames = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
|
||||
currentMonthElem.textContent = monthNames[month] + " " + year;
|
||||
calendarBody.innerHTML = "";
|
||||
|
||||
let firstDay = new Date(year, month, 1);
|
||||
let firstDayIndex = (firstDay.getDay() + 6) % 7; // Montag = 0, Dienstag = 1, etc.
|
||||
let daysInMonth = new Date(year, month + 1, 0).getDate();
|
||||
|
||||
let row = document.createElement("tr");
|
||||
// Leere Zellen vor dem 1. Tag
|
||||
for (let i = 0; i < firstDayIndex; i++){
|
||||
let cell = document.createElement("td");
|
||||
row.appendChild(cell);
|
||||
}
|
||||
|
||||
// Tage hinzufügen
|
||||
for (let day = 1; day <= daysInMonth; day++){
|
||||
if (row.children.length === 7) {
|
||||
calendarBody.appendChild(row);
|
||||
row = document.createElement("tr");
|
||||
}
|
||||
let cell = document.createElement("td");
|
||||
cell.innerHTML = "<strong>" + day + "</strong>";
|
||||
|
||||
let dayStr = day < 10 ? "0" + day : day;
|
||||
let monthStr = (month + 1) < 10 ? "0" + (month + 1) : (month + 1);
|
||||
let dateKey = year + "-" + monthStr + "-" + dayStr;
|
||||
|
||||
if (eventsByDate[dateKey]) {
|
||||
let eventDot = document.createElement("div");
|
||||
eventDot.className = "event-dot";
|
||||
cell.appendChild(document.createElement("br"));
|
||||
cell.appendChild(eventDot);
|
||||
|
||||
cell.dataset.dateKey = dateKey;
|
||||
cell.addEventListener("click", function() {
|
||||
// Clear previous selections
|
||||
document.querySelectorAll('.selected-day').forEach(el => {
|
||||
el.classList.remove('selected-day');
|
||||
});
|
||||
cell.classList.add('selected-day');
|
||||
showEventDetails(dateKey);
|
||||
});
|
||||
}
|
||||
row.appendChild(cell);
|
||||
}
|
||||
// Falls die letzte Zeile nicht komplett ist
|
||||
while (row.children.length < 7) {
|
||||
let cell = document.createElement("td");
|
||||
row.appendChild(cell);
|
||||
}
|
||||
calendarBody.appendChild(row);
|
||||
}
|
||||
|
||||
function createEventLink(eventTitle) {
|
||||
if (eventTitle.startsWith("Datengarten")) {
|
||||
// Extract the number after "Datengarten "
|
||||
const match = eventTitle.match(/Datengarten\s+(\d+)/i);
|
||||
if (match && match[1]) {
|
||||
return `https://berlin.ccc.de/datengarten/${match[1]}/`;
|
||||
}
|
||||
}
|
||||
|
||||
// For other titles, convert to lowercase and use as path
|
||||
const slug = eventTitle.toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, '');
|
||||
return `https://berlin.ccc.de/page/${slug}/`;
|
||||
}
|
||||
|
||||
function showEventDetails(dateKey) {
|
||||
const events = eventsByDate[dateKey];
|
||||
eventDateElem.textContent = formatDate(dateKey);
|
||||
eventDetailsElem.innerHTML = "";
|
||||
|
||||
if (events && events.length > 0) {
|
||||
events.forEach(ev => {
|
||||
let eventItem = document.createElement("div");
|
||||
eventItem.className = "event-item";
|
||||
|
||||
let eventTitle = document.createElement("div");
|
||||
eventTitle.className = "event-title";
|
||||
|
||||
// Create a link for the event title
|
||||
let titleLink = document.createElement("a");
|
||||
titleLink.textContent = ev.summary;
|
||||
titleLink.href = createEventLink(ev.summary);
|
||||
titleLink.target = "_blank";
|
||||
eventTitle.appendChild(titleLink);
|
||||
|
||||
eventItem.appendChild(eventTitle);
|
||||
|
||||
let eventTime = document.createElement("div");
|
||||
eventTime.className = "event-time";
|
||||
eventTime.textContent = `Start: ${formatTime(ev.start)}, End: ${formatTime(ev.end)}`;
|
||||
eventItem.appendChild(eventTime);
|
||||
|
||||
if (ev.description) {
|
||||
let eventDescription = document.createElement("div");
|
||||
eventDescription.className = "event-description";
|
||||
eventDescription.textContent = ev.description;
|
||||
eventItem.appendChild(eventDescription);
|
||||
}
|
||||
|
||||
eventDetailsElem.appendChild(eventItem);
|
||||
});
|
||||
} else {
|
||||
let noEvents = document.createElement("div");
|
||||
noEvents.className = "no-events";
|
||||
noEvents.textContent = "Keine Veranstaltungen an diesem Tag.";
|
||||
eventDetailsElem.appendChild(noEvents);
|
||||
}
|
||||
|
||||
eventPanel.style.display = "block";
|
||||
}
|
||||
|
||||
function formatDate(dateStr) {
|
||||
// Convert YYYY-MM-DD to DD.MM.YYYY
|
||||
const parts = dateStr.split("-");
|
||||
return `${parts[2]}.${parts[1]}.${parts[0]}`;
|
||||
}
|
||||
|
||||
function formatTime(icsTimeStr) {
|
||||
// Format time for display
|
||||
if (icsTimeStr.length === 8) {
|
||||
// All-day event
|
||||
return "Ganztägig";
|
||||
} else if (icsTimeStr.length >= 15) {
|
||||
// Time-specific event
|
||||
const hour = icsTimeStr.substring(9, 11);
|
||||
const minute = icsTimeStr.substring(11, 13);
|
||||
return `${hour}:${minute}`;
|
||||
}
|
||||
return icsTimeStr;
|
||||
}
|
||||
|
||||
// ICS-Datei abrufen und Events verarbeiten
|
||||
fetch('/all.ics')
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
events = parseICS(data);
|
||||
events.forEach(ev => {
|
||||
let dateKey = parseDateString(ev.start);
|
||||
if (dateKey) {
|
||||
if (!eventsByDate[dateKey]) {
|
||||
eventsByDate[dateKey] = [];
|
||||
}
|
||||
eventsByDate[dateKey].push(ev);
|
||||
}
|
||||
});
|
||||
let today = new Date();
|
||||
currentYear = today.getFullYear();
|
||||
currentMonth = today.getMonth();
|
||||
renderCalendar(currentYear, currentMonth);
|
||||
})
|
||||
.catch(err => console.error('Fehler beim Laden der ICS-Datei:', err));
|
||||
})();
|
||||
</script>
|
38
content/verein/fotos.md
Normal file
38
content/verein/fotos.md
Normal file
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
title: "Fotogalerie"
|
||||
date: 2018-07-01T14:19:22+04:00
|
||||
menu:
|
||||
main:
|
||||
parent: "Verein"
|
||||
---
|
||||
|
||||
{{< gallery >}}
|
||||
<img src="/img/club/27480379957_c09e86189b.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/27479845037_9e4ece985c.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/27481915157_3cde02aaa3.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/27481933907_f240f4232d.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/27481964727_04959aa83b.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/27481969187_a23cf0c7ab.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/28476390838_3684d048ef.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/28476394828_1ed64af4f5.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/40542196560_f22e53153c.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/40544370280_1703903e06.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/41447101455_c6ace71115.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/41447109945_3ab5a6e7ef.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/41627141884_48e4bb4dec.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/41627160174_4d494549a2.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/41629042814_df533c84e0.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42300970272_667569d239.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42301473062_cdcea7912f.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42301482072_7092c55ef0.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42303237782_7107fcf7c7.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42303241962_665df39b87.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42303247602_56716d8704.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42349449581_3c634b4245.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42349465201_9fff7450d4.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42349973551_9f1a404c0f.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42350001481_48a8be981e.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
<img src="/img/club/42351605711_6d40412b75.jpg" class="grid-w50 md:grid-w33 xl:grid-w25" />
|
||||
{{< /gallery >}}
|
||||
|
||||
Fotos aus den Räumen des Chaos Computer Club Berlin aus 2018
|
25
content/verein/mastodon.md
Normal file
25
content/verein/mastodon.md
Normal file
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
title: "Mastodon"
|
||||
subtitle: "Der Online-Auftritt des CCCB"
|
||||
date: 2025-02-26T10:00:00+02:00
|
||||
menu:
|
||||
main:
|
||||
parent: "Verein"
|
||||
---
|
||||
|
||||
Der CCCB betreibt einen eigenen Mastodon-Account auf chaos.social, dem ihr hier gerne folgen könnt:
|
||||
https://chaos.social/@clubdiscordia
|
||||
|
||||
{{< figure
|
||||
src="/img/Mastodon_mascot_vector_version.svg"
|
||||
alt="Mastodon Maskottchen - Bild von WikiMedia Commons (GNU AGPL)"
|
||||
width=50%
|
||||
>}}
|
||||
|
||||
_Mastodon Maskottchen - Bild von WikiMedia Commons (GNU AGPL)_
|
||||
|
||||
Wir hatten früher einen Bluesky- und einen Twitter-Account, aber da wir diese beiden Plattformen aber nicht unterstützen wollen, sind wir nur noch auf Mastodon. Aus Archivierungsgründen sind sie aber noch online:
|
||||
|
||||
https://x.com/clubdiscordia
|
||||
|
||||
https://bsky.app/profile/clubdiscordia.bsky.social
|
Loading…
Add table
Add a link
Reference in a new issue