This commit is contained in:
kleines Filmröllchen 2024-11-18 12:31:22 +01:00
commit a486b7bbb7
Signed by: filmroellchen
SSH key fingerprint: SHA256:NarU6J/XgCfEae4rbei0YIdN2pYaYDccarK6R53dnc8
11 changed files with 426 additions and 0 deletions

65
static/dbkcalendar.js Normal file
View file

@ -0,0 +1,65 @@
/*
Include calendar | Chaostreff Backnang | @paddy
*/
export default function hackcal(e, p = 1) {
// var cal_uri = "https://chaostreff-backnang.de/hackcal/?period=" + p;
var cal_uri = "/hackcal";
var uri_regex =
/(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/\-_\.\:]*(\?\S+)?)?)?)/gi;
fetch(cal_uri)
.then((res) => res.json())
.then((data) => {
var items = [];
Object.keys(data).forEach(function (date) {
var day = new Date(date);
items.push(
"<tr class='' data-date='" +
date +
"'><span>" +
day.toLocaleDateString(true, {
weekday: "short",
day: "numeric",
month: "long",
year: "numeric",
}) +
"</span></tr>"
);
Object.keys(data[date]).forEach(function (uid) {
var event = data[date][uid];
var location = event.location
? event.location
.replace(/\n/g, "<br>")
.replace(uri_regex, "<a href='$1' target='_blank'>$1</a>")
: "";
var description = event.description
? event.description
.replace(/\n/g, "<br>")
.replace(uri_regex, (url) => {
event.summary = `<a href='${url}' target='_blank'>${event.summary}</a>`;
return "";
})
: "";
var categories = event.categories
? "<i>" + event.categories.replace(",", "</i> <i>") + "</i>"
: "";
items.push(
"<tr data-uid='" +
uid +
"'><span>" +
event.datestr +
"</span><span><b>" +
event.summary +
"</b> | " +
location +
"<br/>" +
description +
categories +
"</span></tr>"
);
});
});
document.querySelector("#dbkcalendar").innerHTML = items.join("");
});
}

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

1
static/hackcal Normal file
View file

@ -0,0 +1 @@
{"2024-11-17":{"3ab15365-b4e3-4558-9c30-0930983f9ee8":{"dtstart":"2024-11-17T15:00:00+01:00","dtend":"2024-11-17T20:00:00+01:00","datestr":"15:00","summary":"Chaostreff Backnang","location":"dasWohnzimmer, Backnang","description":"https://pad.hacknang.de/dbk-meta","categories":"CTBK"}},"2024-11-23":{"3e3c9b04-77d7-441e-a1ec-acaca4e9e708":{"dtstart":"2024-11-23T14:30:00+01:00","dtend":"2024-11-23T19:00:00+01:00","datestr":"14:30","summary":"Besuch bei Swabian Instruments","location":"Swabian Instruments GmbH, Zuffenhausen","description":"https://tickets.ctbk.de/ctbk/swins/","categories":"CTBK"}},"2024-11-27":{"52d6cb7c-8d2d-4c3c-91df-7035613c3fe1":{"dtstart":"2024-11-27T19:00:00+01:00","dtend":"2024-11-27T22:00:00+01:00","datestr":"19:00","summary":"FFS Technik-Treffen","location":"https://meet.mars-services.de/ffs","description":"https://wiki.freifunk-stuttgart.net/technik:themenspeicher","categories":"FFS"}},"2024-12-03":{"c8d1b002-69c1-41c7-a621-d81d18182553":{"dtstart":"2024-12-03T18:00:00+01:00","dtend":"2024-12-03T22:00:00+01:00","datestr":"18:00","summary":"Chaos-Stammtisch","location":"dasWohnzimmer, Backnang","description":"Unser zweiter Termin im Monat. Es gibt keine Tagesordnung, dasWohnzimmer hat regul\u00e4r ge\u00f6ffnet.","categories":"CTBK"}},"2024-12-05":{"a6a0848c-f829-4bed-9749-87c81856b083":{"dtstart":"2024-12-05T19:00:00+01:00","dtend":"2024-12-05T21:00:00+01:00","datestr":"19:00","summary":"Freifunk Backnang","location":"online","description":"https://pad.hacknang.de/dbk-meta","categories":"FFBK"}},"2024-12-09":{"345e3e05-382c-4da4-85d5-941bfc1dd30d":{"dtstart":"2024-12-09T19:00:00+01:00","dtend":"2024-12-09T21:00:00+01:00","datestr":"19:00","summary":"Freifunk Stuttgart","location":"shackspace, Stuttgart","description":"https://pad.freifunk-stuttgart.de/p/ffs-metapad","categories":"FFS"}},"2024-12-15":{"3ab15365-b4e3-4558-9c30-0930983f9ee8":{"dtstart":"2024-12-15T15:00:00+01:00","dtend":"2024-12-15T20:00:00+01:00","datestr":"15:00","summary":"Chaostreff Backnang","location":"dasWohnzimmer, Backnang","description":"https://pad.hacknang.de/dbk-meta","categories":"CTBK"}}}

20
static/logo.svg Normal file
View file

@ -0,0 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="55.5 146 310 191">
<defs>
<linearGradient id="or" x1="100%" x2="0%" y1="0%" y2="100%" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ffef26"/>
<stop offset="1" stop-color="#e3312d"/>
</linearGradient>
<style>
<![CDATA[g>*{fill:url(#or)}]]>
</style>
</defs>
<g>
<path d="M92.9 219.6a4 4 0 0 1-1.1 2.8c-.8.7-1.7 1.1-2.8 1.1H74.8a4 4 0 0 1-2.8-1.1 4 4 0 0 1-1.1-2.8v-47.3c0-1.1.4-2.1 1.1-2.8s1.7-1.1 2.8-1.1H89a4 4 0 0 1 2.8 1.1c.8.7 1.1 1.7 1.1 2.8v12.8H88v-12.3H75.8v46.4H88v-13.6h4.9v14zm88.4 3.9h-4.6v-.9a107 107 0 0 1-11.1 1.1c-2.6 0-3.8-1.3-3.8-3.8v-12.5c0-2.6 1.3-3.9 4-3.9h11v-10.3h-10.1v5.8h-4.5v-5.8c0-2.6 1.3-4 3.9-4h11.3c2.6 0 3.9 1.3 3.9 4v30.3zm-4.5-4.3v-12.1h-10.4v12.3l10.4-.2zm31.9.3c0 2.6-1.3 4-4 4H193c-2.6 0-3.9-1.3-3.9-4v-26.3c0-2.6 1.3-4 3.9-4h11.7c2.6 0 4 1.3 4 4v26.3zm-4.7-.1v-26h-10.3v26H204zm30.7.1c0 2.6-1.3 4-4 4H220c-2.6 0-4-1.3-4-4v-7.8h4.6v7.7h9.5v-6.8l-12.2-10a4.5 4.5 0 0 1-1.8-3.7v-5.7c0-2.6 1.3-4 4-4h10.6c2.6 0 4 1.3 4 4v6.8h-4.5v-6.8h-9.5v6l12.3 10c1.1.9 1.7 2.2 1.7 3.7v6.6zm53.5-19h-4.6v-7.1l-8.6.3v29.7h-4.7v-34.1h4.7v.9l4.7-.7c1.9-.3 3.4-.4 4.7-.4 2.6 0 3.9 1.3 3.9 3.8l-.1 7.6zm25.1 19c0 2.6-1.3 4-3.9 4h-11.3c-2.6 0-3.9-1.3-3.9-4v-26.3c0-2.6 1.3-4 3.9-4h11.3c2.6 0 3.9 1.3 3.9 4v12.3l-1.6 1.7h-13v12.4h10.1v-6.3h4.5v6.2zm-4.5-16v-10.3h-10.1v10.3h10.1zm25.2-30.9h-6.6v16.7h5.8v4.1h-5.8v30.1h-4.6v-30.1h-4v-4.1h4v-16.9c0-2.6 1.3-4 3.9-4h7.3v4.2zm17.1 0h-6.6v16.7h5.8v4.1h-5.8v30.1h-4.6v-30.1h-4v-4.1h4v-16.9c0-2.6 1.3-4 3.9-4h7.3v4.2zm-195.6 130a4 4 0 0 1-1.1 2.8 4 4 0 0 1-2.8 1.1h-18.1v-55h18a4 4 0 0 1 2.8 1.1 4 4 0 0 1 1.1 2.8v16.3c0 1.5-.7 2.7-2 3.7l-3.9 2.3 4.1 2.7c1.2.8 1.8 1.9 1.8 3.5v18.7h.1zm-5-30.3v-16.6h-12.1v19.9h7.2l4.9-3.3zm.1 29.8v-19l-5-3.2h-7.3v22.3h12.3v-.1zm32.2 4.4h-4.6v-.9a107 107 0 0 1-11.1 1.1c-2.6 0-3.8-1.3-3.8-3.8v-12.5c0-2.6 1.3-3.9 4-3.9h11v-10.3h-10.1v5.8h-4.5v-5.8c0-2.6 1.3-4 3.9-4h11.3c2.6 0 3.9 1.3 3.9 4v30.3zm-4.5-4.3v-12.1h-10.4v12.3l10.4-.2zm31.2.3c0 2.6-1.3 4-3.9 4h-11.1c-2.6 0-3.9-1.3-3.9-4v-26.3c0-2.6 1.3-4 3.9-4h11.1c2.6 0 3.9 1.3 3.9 4v6.8h-4.6v-6.7h-9.7v26h9.7v-7.6h4.6v7.8zm26.8 4h-5.1l-9.4-17.4v17.4h-4.7v-55h4.7v34.9l8.8-14.1h5v.1l-9.9 15.1 10.6 19zm24.6 0h-4.7v-30l-10.3.3v29.7h-4.7v-34.2h4.7v.9l5.5-.7c2.3-.3 4.1-.4 5.6-.4 2.6 0 3.9 1.3 3.9 3.8v30.6zm26.9 0h-4.6v-.9a107 107 0 0 1-11.1 1.1c-2.6 0-3.8-1.3-3.8-3.8v-12.5c0-2.6 1.3-3.9 4-3.9h11v-10.3h-10.1v5.8h-4.5v-5.8c0-2.6 1.3-4 3.9-4h11.3c2.6 0 3.9 1.3 3.9 4v30.3zm-4.6-4.3v-12.1h-10.4v12.3l10.4-.2zm31.9 4.3h-4.7v-30l-10.3.3v29.7h-4.7v-34.2h4.7v.9l5.5-.7c2.3-.3 4.1-.4 5.6-.4 2.6 0 3.9 1.3 3.9 3.8v30.6zm27 9c0 2.6-1.3 4-4 4H327c-2.7 0-4-1.7-4-5l.1-1.8.1-1.7h4.6v4.5h9.8v-9h-7.7a7 7 0 0 1-5.2-2.1 7 7 0 0 1-2.1-5.3v-20c0-2 .6-3.7 1.8-5 1.2-1.3 2.8-2 4.8-2l8.3 1.2v-.9h4.6v43.1zm-4.7-13.1v-25.8l-6.5-.4c-2.6 0-3.9 1.3-3.9 3.9v18.3c0 2.6 1.3 3.9 3.9 3.9h6.5v.1zm-96.5-98.1h25.4v4.9h-25.4z"/>
<path d="M264.6 221.9v-24.8l-7.7-7.6v-3.7h3.1l-6.6-17.4-6.3 17.6h2.8v3.7l-7.5 7.5V228l2 3.1v-33l7.5-7.6V184h-2l3.5-9.9 3.7 9.7h-2.2v6.6l7.7 7.5v28.6"/>
<path fill="url(#or)" d="M144.8 222h5.6v9.6h-5.6z"/>
<path d="M138.9 222h3.9v9.6h-3.9zm-3.9 0h1.4v9.6H135zm-3.5 9.6V222h.7v9.6zm24.3-38.7.1-.1-7.6-10.9-7.7 10.1-.1.2 7.6 10.9 7.7-10.2zm-7.5-9.8 6.7 9.7-7 9.2-6.7-9.7 7-9.2zm-13.7 56c71.1 1.4 134 4.4 134.6 4.4v-.6c-.6 0-63.6-2.9-134.7-4.4l.1.6zm51.1 3.3h.7v9.5h-.7zm3.8 0h.7v8.7h-.7zm-7.5.8h.7v5.5h-.7zm64 1.4h.7v9.5h-.7zm3.9 0h.7v8.7h-.7zm-7.5.8h.7v5.4h-.7zm-32.3-3.1v.7c15.5 0 28.2 9.4 30.5 22.3l.7-.1c-2.4-13.1-15.4-22.9-31.2-22.9"/>
<path d="M150.3 239.6c-7.9 0-15.3 2.4-21.2 7.1l.4.5a34 34 0 0 1 20.8-6.8c15.2 0 28.2 9.6 30.5 22.4l.7-.1c-2.4-13.2-15.7-23.1-31.2-23.1m126.3.9v.6l-112.4-4v-.6zm-162.4-68.6h-16v55.6h.7v-55h14.6v7.6h.7v-2.9c2.4-.1 8.3-.8 8.3-2.6 0-1.3-4.1-2.3-8.3-2.7m0 4.6v-4c4.9.5 7.6 1.5 7.6 2.1 0 .7-2.4 1.6-7.6 1.9"/>
<path d="m73 228.3 41.5.1v-14.5h4.5v-7.8h-4.5V205h4.5v-7.8h-4.5V196h4.5v-7.8h-4.5V187h4.5v-5.8c11.6.2 26 .7 27.8 1.3 1 1 4.7 6.6 7.1 10.4l-1.9 2.7V222h-1.8v9.7h2.3l.1 9.1 1.1-.2 1.3-.1c13.5 0 25.4 7.7 29 18.7l.4 1.2 2.2-1.3.1-.3a30.8 30.8 0 0 1 27.6-15.4c14.8 0 27.6 9.3 29.8 21.7l.2 1.2 2.3-.8.2-.5c3.6-11 15.5-18.7 29-18.7h1.8c.6 0 1-.4 1-1s-.4-1-1-1h-1.8c-13.5 0-25.6 7.4-30.2 18.1-3.4-12.3-16.1-21.1-31.2-21.1a33 33 0 0 0-29 15.6c-4.4-11-16.6-18.5-30.3-18.5h-.4l-.2-8.8h-2.4v-5.7h1.8v-27.7l2.3-3.2-.4-.6c-1.1-1.7-6.5-10.3-8-11.6a247 247 0 0 0-34.4-1.7h-1v2.1h4.5v3.8h-4.4v5.2h4.5v3.8h-4.5v5.2h4.5v3.8h-4.5v5.2h4.5v3.8h-4.5v14.5l-38.8-.1m21.7 87.3-.3-.5c-.6-1-15-24-10.3-38.2a51 51 0 0 1-7.3-11.3c-.8-.9-7.6-8.3-2.3-17.3 0-1 .4-6.8 2.9-8.5l-3.1-8.7 4.8 7.9c19.4 1 25.6 24.1 26.2 26.8 14.2 6 21.7 24 24.1 29.9.3.8.6 1.6.8 1.7l.1.2-.1.3c-.1.3-.2.4-7.3 2l-.4.1-.2-.4c-3.5-8.1-11.3-17.1-16.7-17.1h-.1l-8.7 4.8c-3.7 2.7-.3 15.6 3.7 23.3l.2.4-6 4.6zm-16.2-75.6.1.3-.4.2c-2 1-2.7 6.1-2.7 8v.1l-.1.1c-5.4 8.9 1.8 16 2.1 16.3l.1.2c2 5.1 7.3 11.2 7.4 11.3l.2.2-.1.3c-4.4 12.7 7.8 33.8 9.8 37.2l4.5-3.4c-3.4-6.8-7.9-20.8-3.1-24.2l9-4.9h.3c5.9 0 13.7 8.9 17.5 17.4l5.9-1.4-.6-1.3c-2.4-5.9-9.8-23.7-23.8-29.5l-.2-.1-.1-.3c-.1-.3-5.7-25.5-25.6-26.3l-.2-.2z"/>
<path d="m78.3 263.7-.9-.4c3.8-9.5 3.1-13.4 1.8-15-1.3-1.6-3.4-1.2-3.4-1.2l-.2-1c.1 0 2.7-.5 4.4 1.5 2.1 2.7 1.6 8-1.7 16.1zm18.5 21.4c0-.1-.4-5.7-10.8-11.2-.2.2-.2.7-.2.9l-1 .1c0-.2-.1-1.1.3-1.7.2-.2.5-.4.8-.4h.1l.1.1c11.2 5.8 11.6 11.9 11.6 12.1l-.9.1h.5-.5zm8.6-4.6c-.2-.5-5.2-13.1-2.4-17.4.1-.2.3-.3.5-.3.7-.1 1.8.7 2.4 1.2l-.6.8-1.5-.9c-2.3 4 2.5 16.3 2.5 16.4l-.9.2z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

155
static/main.css Normal file
View file

@ -0,0 +1,155 @@
:root {
--main-bg-color: #020404;
--main-text-color: #efe3e3;
--main-accent-color: #f9c827;
--secondary-accent-color: #ff925f;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
background-color: var(--main-bg-color);
color: var(--main-text-color);
margin: 1.5rem;
margin-top: 0;
}
a {
color: var(--main-accent-color);
&:hover,
&:focus {
color: var(--secondary-accent-color);
}
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
img {
display: block;
}
#space-image {
height: 12vh;
transition:
height 0.2s,
transform 0.2s;
&:hover {
height: 14vh;
}
}
header {
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
overflow: hidden;
}
#header-image {
height: 20vh;
max-width: 40vw;
}
#skip-header {
background: var(--main-bg-color);
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
white-space: nowrap;
width: 1px;
&:active,
&:focus {
clip: auto;
height: auto;
margin: 1em;
overflow: visible;
white-space: inherit;
width: auto;
}
}
nav {
display: flex;
flex-wrap: wrap;
margin: 1em;
a {
height: min-content;
font-size: 1.2em;
font-weight: bold;
color: var(--main-text-color);
margin-left: 1em;
margin-bottom: 0.4em;
text-transform: uppercase;
text-decoration: underline 0.15em var(--main-text-color);
transition:
text-decoration-color 0.3s,
color 0.25s;
&:focus,
&:hover {
text-decoration-color: var(--main-accent-color);
color: var(--main-accent-color);
}
}
}
main {
display: grid;
grid-template: ". content ." auto / 1fr minmax(min-content, 45rem) 1fr;
section {
grid-area: content;
}
img {
height: auto;
max-width: 100%;
border-radius: 1em;
}
}
h1 {
font-weight: 700;
margin-bottom: 0.5em;
color: var(--main-accent-color);
}
footer {
background-color: var(--main-bg-color);
text-align: center;
padding-top: 1.5em;
margin-top: 1.5em;
font-weight: bold;
border-top: 2px solid transparent;
border-image: linear-gradient(
90deg,
transparent,
var(--secondary-accent-color),
transparent
);
border-image-slice: 1;
}

31
static/main.js Normal file
View file

@ -0,0 +1,31 @@
import hackcal from "./dbkcalendar.js";
const refreshRate = 60 * 1000;
function checkSpace() {
const icon = document.getElementById("space-image");
let openText = "";
fetch("https://spaceapi.ctbk.de/")
.then((response) => response.json())
.then((data) => {
if (data.state.open) {
openText = "Offen";
icon.src = data.state.icon.open;
} else {
openText = "Geschlossen";
icon.src = data.state.icon.closed;
}
icon.alt = "Der Space ist " + openText;
console.log("Icon: " + icon.src);
})
.catch((error) => {
console.error(error);
});
}
const interval = setInterval(() => {
checkSpace();
}, refreshRate);
document.addEventListener("DOMContentLoaded", checkSpace);
document.addEventListener("DOMContentLoaded", hackcal);

BIN
static/wozi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB