Build of the Astro site (4d6900c on astro)

Generated with npm run build. The source is on the astro branch.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zebreus 2026-10-25 02:46:07 +01:00
commit fb5c5dca78

View file

@ -1,18 +1,19 @@
<!doctype html>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Khaos im Kiez</title>
<meta name="description" content="Khaos im Kiez kleine Chaos-Veranstaltung des CCC Berlin, 28.-29. November 2026, Marienstraße 11, Berlin.">
<meta name="description" content="Khaos im Kiez - kleine Chaos-Veranstaltung des CCC Berlin, 28.-29. November 2026, Marienstraße 11, Berlin.">
<link rel="icon" type="image/png" href="logo.png">
<link rel="alternate" hreflang="en" href="en.html">
<link rel="stylesheet" href="style.css">
</head>
<link rel="stylesheet" href="./styles.css"></head>
<body>
<main class="term">
<p class="prompt"><b>visitor@khaos-im-kiez</b>:~$ cat README<span class="cursor"></span></p>
<p class="prompt">root@khaos-im-kiez:<span class="cwd">~</span># cat README</p>
<header>
<img src="logo.png" alt="KiK-Logo: roter Stern mit Tastatur und den Buchstaben kik" width="150" height="150">
@ -102,117 +103,14 @@
<a href="https://berlin.ccc.de/page/impressum/">Impressum</a> &middot;
<a href="https://berlin.ccc.de/">CCC Berlin</a>
</p>
<p class="prompt"><b>visitor@khaos-im-kiez</b>:~$ <span id="term-input"></span><span class="cursor"></span></p>
</footer>
<p class="prompt">root@khaos-im-kiez:<span class="cwd">~</span># <input id="term-input" aria-label="Terminal" autocomplete="off" autocapitalize="off" spellcheck="false" enterkeyhint="send"><span class="cursor"></span></p>
<script type="module" src="./loader.js"></script>
</main>
<script>
(function(){
const term = document.getElementById('term-input');
if(!term) return;
let buf = '';
let ws = null;
let connected = false;
let firstEnter = true;
function appendOutput(text){
if(!text) return;
// append to term display (simple)
term.textContent += text;
}
document.addEventListener('keydown', function(e){
const t = e.target;
if(t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) return;
if(e.ctrlKey || e.altKey || e.metaKey) return;
if(e.key === 'Backspace'){
e.preventDefault();
if(connected && ws && ws.readyState === WebSocket.OPEN){
ws.send('\b');
return;
}
buf = buf.slice(0, -1);
term.textContent = buf;
return;
}
if(e.key === 'Enter'){
e.preventDefault();
if(firstEnter && !connected){
// open ssh over websocket connection with username/password auth
// keep connection open; run command after connection
const line = buf;
buf = '';
firstEnter = false;
term.textContent = term.textContent + '\n';
// try to connect - endpoint can be configured
const wsUrl = (location.protocol === 'https:' ? 'wss://' : 'ws://') + location.host + '/ssh';
try {
ws = new WebSocket(wsUrl);
ws.onopen = function(){
connected = true;
// send auth info and/or initial command
try {
ws.send(JSON.stringify({type:'auth', line: line}));
} catch(err) {
ws.send(line + '\n');
}
ws.send('\n'); // run command/start shell
};
ws.onmessage = function(ev){
appendOutput(ev.data);
};
ws.onclose = function(){
connected = false;
};
ws.onerror = function(){
connected = false;
};
} catch(err) {
// fallback
}
return;
}
if(connected && ws && ws.readyState === WebSocket.OPEN){
ws.send('\r');
term.textContent = term.textContent + '\n';
return;
}
buf += '\n';
term.textContent = buf;
return;
}
if(e.key === 'Escape'){
e.preventDefault();
if(connected && ws && ws.readyState === WebSocket.OPEN){
ws.send('\x1b');
return;
}
buf = '';
term.textContent = buf;
return;
}
if(e.key === 'Tab'){
e.preventDefault();
if(connected && ws && ws.readyState === WebSocket.OPEN){
ws.send('\t');
return;
}
return;
}
if(e.key.length === 1){
e.preventDefault();
if(connected && ws && ws.readyState === WebSocket.OPEN){
ws.send(e.key);
// don't echo locally if server echoes; but keep simple
return;
}
buf += e.key;
term.textContent = buf;
return;
}
});
})();
</script>
</body>
</html>
</html>