Compare commits

...

2 Commits

Author SHA1 Message Date
64a33fcd31 Timetable styling 2025-08-27 21:53:12 +02:00
17cc07a684 Devcontainer support 2025-08-27 19:47:13 +02:00
5 changed files with 120 additions and 4 deletions

View File

@@ -0,0 +1,57 @@
{
"name": "bun",
"image": "oven/bun:debian",
"privileged": true,
"features": {
"ghcr.io/devcontainers/features/common-utils:1": {
"version": "latest",
"configureZshAsDefaultShell": true,
"username": "bun",
"userUid": "1000",
"userGid": "1000"
},
"ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
"packages": "stow,tmux,ripgrep,python3-venv,python3-virtualenv"
},
},
"remoteUser": "bun",
"workspaceFolder": "/home/bun/ws",
"workspaceMount": "source=${localWorkspaceFolder},target=/home/bun/ws,type=bind",
"containerEnv": {
},
"runArgs": [
"--net=host",
"-e",
"DISPLAY=${env:DISPLAY}",
"-e",
"TERM=${env:TERM}",
"-e",
"SHELL=${env:SHELL}",
"-v",
"${env:SSH_AUTH_SOCK}:/tmp/ssh-agent.socket",
"-e",
"SSH_AUTH_SOCK=/tmp/ssh-agent.socket"
],
"mounts": [
{
"source": "/tmp/.X11-unix",
"target": "/tmp/.X11-unix",
"type": "bind",
"consistency": "cached"
},
{
"source": "/dev/dri",
"target": "/dev/dri",
"type": "bind",
"consistency": "cached"
},
{
"source": "/dev/shm",
"target": "/dev/shm",
"type": "bind",
"consistency": "cached"
}
],
"postCreateCommand": {
}
}

View File

@@ -2,6 +2,8 @@ import { useEffect } from "react";
import DepartureList from "@/components/DepartureList/DepartureList";
import { useKVVStore } from "@/store/kvv";
import style from "./style.module.css";
export default function Timetable() {
const fetchTimetable = useKVVStore((state) => state.fetch);
const pStreet = useKVVStore((state) => state.pStreet);
@@ -16,7 +18,7 @@ export default function Timetable() {
}, [fetchTimetable]);
return (
<div>
<div className={style.wrapper}>
<h1>Timetable</h1>
<DepartureList departures={pStreet.departureList} name="P-Street" />
<DepartureList departures={hStreet.departureList} name="H-Street" />

View File

@@ -0,0 +1,5 @@
.wrapper {
border-radius: 10px;
padding: 1px 100px 30px 100px;
box-shadow: 5px 5px 10px #aeaeae;
}

View File

@@ -10,12 +10,35 @@ export default function TimetableRow({
const hour = String(departure.dateTime.hour).padStart(2, "0");
const minute = String(departure.dateTime.minute).padStart(2, "0");
const dateTimeString = `${hour}:${minute}`;
const lineNumber = departure.servingLine.number;
return (
<tr className={styles.timetableRow}>
<td>{dateTimeString}</td>
<td>{departure.servingLine.number}</td>
<td>({departure.servingLine.direction})</td>
<td className={styles.departureTime}>{dateTimeString}</td>
<td
className={`${lineNumberToStyle(lineNumber)} ${styles.lineNumber}`}
>
{lineNumber}
</td>
<td>{departure.servingLine.direction}</td>
</tr>
);
}
const lineNumberToStyle = (number) => {
switch (number) {
case "S2":
return styles.S2;
break;
case "S5":
case "S51":
return styles.S5;
break;
case "S1":
case "S11":
return styles.S1;
break;
default:
return styles.lineNumberDefault;
}
};

View File

@@ -1,3 +1,32 @@
td {
padding: 4px 7px;
}
.timetableRow {
text-align: left;
}
.departureTime {
font-weight: 600;
/* background-color: rgba(180, 180, 180, 0.1); */
}
.lineNumber {
text-align: center;
}
.S2 {
background-color: rgba(200, 100, 200, 0.2);
}
.S5 {
background-color: rgba(230, 20, 20, 0.2);
}
.S1 {
background-color: rgba(20, 180, 90, 0.2);
}
.lineNumberDefault {
background-color: rgba(100, 100, 100, 0.2);
}