Dieser Commit ist enthalten in:
Chaoscaot 2023-12-19 19:22:19 +01:00
Ursprung aa83cddcec
Commit 5a5cce199b
25 geänderte Dateien mit 156 neuen und 244 gelöschten Zeilen

Datei anzeigen

@ -22,7 +22,7 @@ export default defineAstroI18nConfig({
stats: "statistiken",
announcements: "ankuendigungen",
"privacy-policy": "datenschutzerklaerung",
"create-token": "token-erstellen"
"set-password": "passwort-setzen"
}
},
})

Datei anzeigen

@ -12,9 +12,6 @@ export default defineConfig({
image: {
service: sharpImageService()
},
experimental: {
optimizeHoistedScript: true,
},
compressHTML: true,
site: "https://steamwar.de",
integrations: [svelte(), tailwind({
@ -33,4 +30,5 @@ export default defineConfig({
disallow: ["/admin", "/login", "/dashboard", "/de", "/_astro"]
}]
})],
vite: {}
});

Datei anzeigen

@ -27,7 +27,7 @@
"autoprefixer": "^10.4.16",
"cssnano": "^6.0.2",
"esbuild": "^0.19.9",
"postcss-nesting": "^12.0.1",
"postcss-nesting": "^12.0.2",
"sass": "^1.69.5",
"svelte": "^4.2.8",
"tailwind-merge": "^2.1.0",
@ -38,7 +38,7 @@
"@astrojs/sitemap": "^3.0.3",
"@codemirror/lang-json": "^6.0.1",
"@ddietr/codemirror-themes": "^1.4.2",
"astro": "^4.0.5",
"astro": "^4.0.6",
"astro-i18n": "^2.1.18",
"astro-robots-txt": "^1.0.0",
"astro-seo": "^0.8.0",

Datei anzeigen

@ -15,8 +15,8 @@ dependencies:
specifier: ^1.4.2
version: 1.4.2
astro:
specifier: ^4.0.5
version: 4.0.5(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
specifier: ^4.0.6
version: 4.0.6(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
astro-i18n:
specifier: ^2.1.18
version: 2.1.18(esbuild@0.19.9)
@ -75,13 +75,13 @@ dependencies:
devDependencies:
'@astrojs/svelte':
specifier: ^5.0.1
version: 5.0.1(astro@4.0.5)(svelte@4.2.8)(typescript@5.3.3)(vite@5.0.9)
version: 5.0.1(astro@4.0.6)(svelte@4.2.8)(typescript@5.3.3)(vite@5.0.10)
'@astrojs/tailwind':
specifier: ^5.0.3
version: 5.0.3(astro@4.0.5)(tailwindcss@3.3.6)
version: 5.0.3(astro@4.0.6)(tailwindcss@3.3.6)
'@astropub/icons':
specifier: ^0.2.0
version: 0.2.0(astro@4.0.5)
version: 0.2.0(astro@4.0.6)
'@types/color':
specifier: ^3.0.6
version: 3.0.6
@ -101,8 +101,8 @@ devDependencies:
specifier: ^0.19.9
version: 0.19.9
postcss-nesting:
specifier: ^12.0.1
version: 12.0.1(postcss@8.4.32)
specifier: ^12.0.2
version: 12.0.2(postcss@8.4.32)
sass:
specifier: ^1.69.5
version: 1.69.5
@ -132,8 +132,8 @@ packages:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
/@astrojs/compiler@2.3.2:
resolution: {integrity: sha512-jkY7bCVxl27KeZsSxIZ+pqACe+g8VQUdTiSJRj/sXYdIaZlW3ZMq4qF2M17P/oDt3LBq0zLNwQr4Cb7fSpRGxQ==}
/@astrojs/compiler@2.3.4:
resolution: {integrity: sha512-33/YtWoBCE0cBUNy1kh78FCDXBoBANX87ShgATlAHECYbG2+buNTAgq4Xgz4t5NgnEHPN21GIBC2Mvvwisoutw==}
/@astrojs/internal-helpers@0.2.1:
resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==}
@ -171,15 +171,15 @@ packages:
zod: 3.22.4
dev: false
/@astrojs/svelte@5.0.1(astro@4.0.5)(svelte@4.2.8)(typescript@5.3.3)(vite@5.0.9):
/@astrojs/svelte@5.0.1(astro@4.0.6)(svelte@4.2.8)(typescript@5.3.3)(vite@5.0.10):
resolution: {integrity: sha512-MQvm0VmkiHVBb41hkKvQKtZa2YZqImdJD23dDW6EGhFxRy1GEgJ4Hm6p4T30FXrLPQUoiay/BU5U/lHDd6ZlNg==}
engines: {node: '>=18.14.1'}
peerDependencies:
astro: ^4.0.0
svelte: ^4.0.0 || ^5.0.0-next.1
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.9)
astro: 4.0.5(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10)
astro: 4.0.6(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
svelte: 4.2.8
svelte2tsx: 0.6.27(svelte@4.2.8)(typescript@5.3.3)
transitivePeerDependencies:
@ -188,13 +188,13 @@ packages:
- vite
dev: true
/@astrojs/tailwind@5.0.3(astro@4.0.5)(tailwindcss@3.3.6):
/@astrojs/tailwind@5.0.3(astro@4.0.6)(tailwindcss@3.3.6):
resolution: {integrity: sha512-p+uFa1PNuV8RxhGkPUFgVq8CUbmS3xr0u5k1An2xKECLotRh7vsrGcPUijHvYOt42URohcg8rIq0CxNoVMhReg==}
peerDependencies:
astro: ^3.0.0 || ^4.0.0
tailwindcss: ^3.0.24
dependencies:
astro: 4.0.5(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
astro: 4.0.6(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
autoprefixer: 10.4.16(postcss@8.4.32)
postcss: 8.4.32
postcss-load-config: 4.0.2(postcss@8.4.32)
@ -217,12 +217,12 @@ packages:
transitivePeerDependencies:
- supports-color
/@astropub/icons@0.2.0(astro@4.0.5):
/@astropub/icons@0.2.0(astro@4.0.6):
resolution: {integrity: sha512-qM/ldW/9rVHULNOZgz/23Yzgm2r3Iy2JJ1FuvJB6sFU67n61o1ImuXdHiaWSNoEHubD+IUkD9WG0hbhINgszqA==}
peerDependencies:
astro: '*'
dependencies:
astro: 4.0.5(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
astro: 4.0.6(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3)
dev: true
/@babel/code-frame@7.23.5:
@ -398,7 +398,7 @@ packages:
resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
regenerator-runtime: 0.14.1
/@babel/template@7.22.15:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
@ -502,8 +502,8 @@ packages:
w3c-keyname: 2.2.8
dev: false
/@csstools/selector-specificity@3.0.0(postcss-selector-parser@6.0.13):
resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==}
/@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.13):
resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss-selector-parser: ^6.0.13
@ -878,7 +878,7 @@ packages:
requiresBuild: true
optional: true
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.9):
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10):
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
@ -886,30 +886,30 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.9)
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@4.2.8)(vite@5.0.10)
debug: 4.3.4
svelte: 4.2.8
vite: 5.0.9(@types/node@20.10.4)(sass@1.69.5)
vite: 5.0.10(@types/node@20.10.4)(sass@1.69.5)
transitivePeerDependencies:
- supports-color
dev: true
/@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.9):
/@sveltejs/vite-plugin-svelte@3.0.1(svelte@4.2.8)(vite@5.0.10):
resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.9)
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.5
svelte: 4.2.8
svelte-hmr: 0.15.3(svelte@4.2.8)
vite: 5.0.9(@types/node@20.10.4)(sass@1.69.5)
vitefu: 0.2.5(vite@5.0.9)
vite: 5.0.10(@types/node@20.10.4)(sass@1.69.5)
vitefu: 0.2.5(vite@5.0.10)
transitivePeerDependencies:
- supports-color
dev: true
@ -924,12 +924,12 @@ packages:
dependencies:
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
'@types/babel__generator': 7.6.7
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.4
/@types/babel__generator@7.6.7:
resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==}
/@types/babel__generator@7.6.8:
resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
dependencies:
'@babel/types': 7.23.6
@ -1072,8 +1072,8 @@ packages:
normalize-path: 3.0.0
picomatch: 2.3.1
/apexcharts@3.44.2:
resolution: {integrity: sha512-QWOFS/SC1TDsuI8VudVuIwLhs1qE6kwixRvmABMUgTVeVzizRWgQh8pdEIgwl+Zvr0TlM3vHPz6Dc5NP1hJ7BA==}
/apexcharts@3.45.0:
resolution: {integrity: sha512-o+XI4ysvKtt+l+bGbk19s6Y2gFes/7LRLMAonDgcapz4frS0vzTfXiK77QcQc30TMwPiSN9Z8Tv+CBn57x63wg==}
dependencies:
'@yr/monotone-cubic-spline': 1.0.3
svg.draggable.js: 2.2.2
@ -1123,12 +1123,12 @@ packages:
resolution: {integrity: sha512-7gq6lhibCM8FuzZIJlbLLWP5EJ9KL2/4XqeFrAg9O6ZK2xMFxJ5ubKf+a0VJwwTu8W8Xr421CmpiXu6Hq7n/7Q==}
dev: false
/astro@4.0.5(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3):
resolution: {integrity: sha512-OTiTEiXYdXTkVJXNNKIWdYG1z2wpTST+92Qcldm36x91Pe4fKpLxeuRloy5cW175oHi8lvXytgG3Gl3VBP18RQ==}
/astro@4.0.6(@types/node@20.10.4)(sass@1.69.5)(typescript@5.3.3):
resolution: {integrity: sha512-P7CfFqWKzkJozzF6IoOC6qoI2ONndV8P3ULhGDgMiXPL7xVkWI5haTBSpyrcjBx643tVXspIRsSV/v+Cx+CjGw==}
engines: {node: '>=18.14.1', npm: '>=6.14.0'}
hasBin: true
dependencies:
'@astrojs/compiler': 2.3.2
'@astrojs/compiler': 2.3.4
'@astrojs/internal-helpers': 0.2.1
'@astrojs/markdown-remark': 4.0.1
'@astrojs/telemetry': 3.0.4
@ -1184,8 +1184,8 @@ packages:
tsconfck: 3.0.0(typescript@5.3.3)
unist-util-visit: 5.0.0
vfile: 6.0.1
vite: 5.0.9(@types/node@20.10.4)(sass@1.69.5)
vitefu: 0.2.5(vite@5.0.9)
vite: 5.0.10(@types/node@20.10.4)(sass@1.69.5)
vitefu: 0.2.5(vite@5.0.10)
which-pm: 2.1.1
yargs-parser: 21.1.1
zod: 3.22.4
@ -1291,7 +1291,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001570
electron-to-chromium: 1.4.613
electron-to-chromium: 1.4.614
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.22.2)
@ -1774,8 +1774,8 @@ packages:
marked: 4.3.0
dev: false
/electron-to-chromium@1.4.613:
resolution: {integrity: sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==}
/electron-to-chromium@1.4.614:
resolution: {integrity: sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==}
/emoji-regex@10.3.0:
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
@ -1951,8 +1951,8 @@ packages:
svelte: ^4.0.0
dependencies:
'@floating-ui/dom': 1.5.3
apexcharts: 3.44.2
flowbite: 2.2.0
apexcharts: 3.45.0
flowbite: 2.2.1
svelte: 4.2.8
tailwind-merge: 2.1.0
dev: false
@ -1964,8 +1964,8 @@ packages:
mini-svg-data-uri: 1.4.4
dev: false
/flowbite@2.2.0:
resolution: {integrity: sha512-Eq0qWz4a5nlxaGuUcspzpu+8Ny0A7lKEJEKcuPpkdSoF8tWjbKeuVVgKk8/q10ZE9bhXh1GHBXdCsRxu0LZTNQ==}
/flowbite@2.2.1:
resolution: {integrity: sha512-iiZyBTtriEDRHrqXZgpKHaxl4B2J8HZUP8Yn1RXozUDKszWHDVj4GxQqMMB9AJHRWOgXV/4E/LJZ/zqQgBUhWA==}
dependencies:
'@popperjs/core': 2.11.8
mini-svg-data-uri: 1.4.4
@ -3223,13 +3223,13 @@ packages:
postcss: 8.4.32
postcss-selector-parser: 6.0.13
/postcss-nesting@12.0.1(postcss@8.4.32):
resolution: {integrity: sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==}
/postcss-nesting@12.0.2(postcss@8.4.32):
resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
'@csstools/selector-specificity': 3.0.0(postcss-selector-parser@6.0.13)
'@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13)
postcss: 8.4.32
postcss-selector-parser: 6.0.13
dev: true
@ -3485,8 +3485,8 @@ packages:
dependencies:
picomatch: 2.3.1
/regenerator-runtime@0.14.0:
resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
/regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
/regexparam@2.0.1:
resolution: {integrity: sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==}
@ -4290,8 +4290,8 @@ packages:
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
/vite@5.0.9(@types/node@20.10.4)(sass@1.69.5):
resolution: {integrity: sha512-wVqMd5kp28QWGgfYPDfrj771VyHTJ4UDlCteLH7bJDGDEamaz5hV8IX6h1brSGgnnyf9lI2RnzXq/JmD0c2wwg==}
/vite@5.0.10(@types/node@20.10.4)(sass@1.69.5):
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -4326,7 +4326,7 @@ packages:
optionalDependencies:
fsevents: 2.3.3
/vitefu@0.2.5(vite@5.0.9):
/vitefu@0.2.5(vite@5.0.10):
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
@ -4334,7 +4334,7 @@ packages:
vite:
optional: true
dependencies:
vite: 5.0.9(@types/node@20.10.4)(sass@1.69.5)
vite: 5.0.10(@types/node@20.10.4)(sass@1.69.5)
/w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}

Datei anzeigen

@ -20,38 +20,34 @@
<script lang="ts">
import {l} from "../util/util.ts";
import {t} from "astro-i18n";
import {get} from "svelte/store";
let username = "";
let token = "";
let pw = "";
let error = "";
async function login() {
let {tokenStore} = await import("./repo/repo.ts");
if (username === "" || token === "") {
token = "";
let {tokenStore, authRepo} = await import("./repo/repo.ts");
if (username === "" || pw === "") {
pw = "";
error = t("login.error");
return;
}
try {
let res = await fetch(import.meta.env.PUBLIC_API_SERVER + "/data/me", {
headers: {
"Authorization": "Bearer " + token
}
}).then(res => res.json());
if (res.name !== username) {
try {
let auth = await get(authRepo).login(username, pw);
if (auth == undefined) {
pw = "";
error = t("login.error");
token = "";
return;
}
tokenStore.set(token);
tokenStore.set(auth);
window.location.href = l("/dashboard");
} catch (e) {
} catch (e: any) {
pw = "";
error = t("login.error");
token = "";
return;
}
}
</script>
@ -61,11 +57,11 @@
<div class="ml-2 flex flex-col">
<label for="username">{t("login.label.username")}</label>
<input type="text" id="username" name="username" placeholder={t("login.placeholder.username")} bind:value={username} />
<label for="token">{t("login.label.token")}</label>
<input type="password" id="token" name="token" placeholder={t("login.placeholder.token")} bind:value={token} />
<label for="password">{t("login.label.password")}</label>
<input type="password" id="password" name="password" placeholder={t("login.placeholder.password")} bind:value={pw} />
</div>
<p class="mt-2">
<a class="text-neutral-500 hover:underline" href={l("/token-erstellen")}>{t("login.generateToken")}</a></p>
<a class="text-neutral-500 hover:underline" href={l("/token-erstellen")}>{t("login.setPassword")}</a></p>
{#if error}
<p class="mt-2 text-red-500">{error}</p>

Datei anzeigen

@ -75,8 +75,8 @@
<style lang="scss">
tr {
@apply transition-colors cursor-pointer border-b
dark:hover:bg-gray-800 hover:bg-gray-300;
@apply transition-colors cursor-pointer border-b border-gray-300
dark:hover:bg-gray-800 hover:bg-gray-300 dark:border-neutral-700;
}
th {

Datei anzeigen

@ -20,13 +20,14 @@
<script lang="ts">
import {t} from "astro-i18n";
import type {Player} from "../types/data.ts";
import {tokenStore} from "../repo/repo.ts";
import {authRepo, tokenStore} from "../repo/repo.ts";
import {l} from "../../util/util.ts";
import Statistics from "./Statistics.svelte";
export let user: Player;
function logout() {
async function logout() {
await $authRepo.logout()
tokenStore.set("")
window.location.href = l("/login")
}

Datei anzeigen

@ -17,6 +17,25 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@tailwind base;
@tailwind components;
@tailwind utilities;
import {fetchWithToken} from "./repo.ts";
export class AuthRepo {
constructor(private token: string) {
}
public async login(username: string, password: string): Promise<string> {
return await fetchWithToken(this.token, "/auth/login", {
body: JSON.stringify({
username,
password
}),
method: "POST",
}).then(value => value.json()).then(value => value.token)
}
public async logout(): Promise<void> {
await fetchWithToken(this.token, "/auth/tokens/logout", {
method: "POST"
});
}
}

Datei anzeigen

@ -27,6 +27,7 @@ import {DataRepo} from "./data.ts";
import { AES, enc, format } from "crypto-js";
import {SchematicRepo} from "./schem.ts";
import {StatsRepo} from "./stats.ts";
import {AuthRepo} from "./auth.ts";
export { EventRepo } from "./event.js"
@ -52,3 +53,4 @@ export const pageRepo = derived(tokenStore, ($token) => new PageRepo($token))
export const dataRepo = derived(tokenStore, ($token) => new DataRepo($token))
export const schemRepo = derived(tokenStore, ($token) => new SchematicRepo($token))
export const statsRepo = derived(tokenStore, ($token) => new StatsRepo($token))
export const authRepo = derived(tokenStore, ($token) => new AuthRepo($token))

Datei anzeigen

@ -21,6 +21,10 @@ Es sind pro Team **max 6 Kämpfer** zugelassen. Der Ansprechpartner ist der Airs
Wir würden uns freuen, wenn sich ein Paar Teams anmelden und wünschen viel Spaß bei diesem kleinen Event.
<fight-table data-event="7" data-group="Gruppe 1"></fight-table>
<group-table data-event="7" data-group="Gruppe 1"></group-table>
Viele Grüßen
SteamwarServerteam

Datei anzeigen

@ -0,0 +1,15 @@
---
title: Setze dein Passwort zurück
description: Ein neues Passwort für dein Konto setzen oder dein Passwort zurücksetzen
slug: passwort-setzen
---
Ein Konto auf der Webseite ist immer mit einem Minecraftaccount verknüpft. Daher ist es nicht möglich, ein Passwort zu setzen, wenn du dich noch nicht auf dem Minecraftserver eingeloggt hast. Wenn du dein Passwort vergessen hast, kannst du es zurücksetzen.
## Passwort erstellen
Um ein Passwort zu erstellen, musst du dich auf dem Minecraftserver einloggen und `/webpw <passwort>` eingeben. Das Passwort muss mindestens 8 Zeichen lang sein.
## Passwort zurücksetzen
Wenn du dein Passwort vergessen hast, kannst du es mit dem selben Befehl, `/webpw <passwort>`, zurücksetzen. Du musst dich dann mit dem neuen Passwort auf der Webseite einloggen.

Datei anzeigen

@ -0,0 +1,16 @@
---
title: Setze dein Passwort zurück
description: Ein neues Passwort für dein Konto setzen oder dein Passwort zurücksetzen
slug: set-password
german: true
---
Ein Konto auf der Webseite ist immer mit einem Minecraftaccount verknüpft. Daher ist es nicht möglich, ein Passwort zu setzen, wenn du dich noch nicht auf dem Minecraftserver eingeloggt hast. Wenn du dein Passwort vergessen hast, kannst du es zurücksetzen.
## Passwort erstellen
Um ein Passwort zu erstellen, musst du dich auf dem Minecraftserver einloggen und `/webpw <passwort>` eingeben. Das Passwort muss mindestens 8 Zeichen lang sein.
## Passwort zurücksetzen
Wenn du dein Passwort vergessen hast, kannst du es mit dem selben Befehl, `/webpw <passwort>`, zurücksetzen. Du musst dich dann mit dem neuen Passwort auf der Webseite einloggen.

Datei anzeigen

@ -1,23 +0,0 @@
---
title: Erstelle einen Token für die Webseite
description: Erstelle einen Token für die Webseite
german: true
slug: create-token
---
Ein Token ist ein Schlüssel, mit dem du dich auf der Webseite als Spieler identifizieren kannst. Dieser wird benötigt, um z.B. deine Schematics anzuzeigen.
## Token erstellen
Um einen Token zu erstellen, musst du dich auf dem Minecraftserver einloggen und `/token create <name>` eingeben. Der Name ist frei wählbar und dient nur zur Identifikation. Du kannst auch mehrere Tokens erstellen.
Du erhältst dann eine Nachricht, auf der du mit einem Klick den Token in die Zwischenablage kopieren kannst. Dieser Token ist nur einmal sichtbar, bei Verlust musst du einen neuen erstellen.
## Token verwenden
Um den Token zu verwenden, kannst du ihn unter dem Menüpunkt `Konto` auf der Webseite eingeben um dich zu identifizieren. Dazu wird dann auch dein Minecraftname benötigt.
Wenn du erfolgreich mit dem Token eingeloggt wurdest, wirst du auf die Dashboardseite weitergeleitet. Dort kannst du dann deine Schematics und Statistiken sehen.
## Token löschen
Um einen Token zu löschen, musst du auf dem Minecraftserver `/token` eingeben. Dadurch wird eine Liste mit allen deinen Tokens angezeigt. Mit einem Klick auf den Token kannst du ihn löschen.

Datei anzeigen

@ -1,79 +0,0 @@
---
translationKey: ws
---
# WarShip-Ruleset
## Definitionen
### WarShip
Ein WarShip ist eine bewaffnete, schwimmende Struktur in Minecraft mit der optischen Erscheinung eines Schiffes. Der Schwimmkörper muss dabei einen Großteil des WarShips ausmachen. Ein WarShip kann optional ein Design aufweisen, das andere im Wasser schwimmende/befindliche Dinge oder Tiere repräsentiert, sofern das gewählte Design gänzlich implementiert wird. Jedes WarShip muss beidseitig gleich bewaffnet sein.
### Projektil
Ein Projektil ist ein TNT, welches im gezündeten Zustand in die gegnerische Hälfte wechselt. Projektile müssen auf der dem Gegner zugewandten Schiffsseite gezündet werden. Unter Wasser gezündete Projektile müssen innerhalb des Technikbereiches, oberhalb der Wasserlinie gezündete Projektile innerhalb des Ausfahrbereichs gezündet werden.
### Kanone
Eine Kanone ist eine Vorrichtung zum Beschleunigen von Projektilen. Eine Kanone darf maximal 2 Projektile verschießen. Eine Kanone muss manuell beladen werden. Eine Kanone darf maximal alle 2s schießen. Es dürfen maximal 32 Kanonen pro Seite verbaut werden. Kanonen sind der einzige Ort, an dem Wasser verbaut werden darf, wenn es keinen anderen Zweck hat, als diese vor selbst verursachten Schaden zu bewahren und TNT zu transportieren.
## Maße
- Länge: 230 Block
- Breite: 35 Block (+ 4 Block Design pro Seite)
- Höhe: 30 Block + 20 Block Design
- Tiefe: Bis zu 8 Block unter dem Meeresspiegel
Bei jedem WarShip müssen sich mindestens 10% der absoluten Blöcke (45.000 Blöcke) über der Wasserlinie befinden.
Im Designbereich dürfen sich keine kampfrelevanten (Kanonen, Schleim/Honigfahrzeuge, Schilde) Techniken befinden. Eine Durchpanzerung des Designbereiches ist nicht zulässig. Der Designbereich ist ausschließlich für einzelne überstehende Designobjekte wie beispielsweise Kanonenrohre, Segel, Banner oder Bullaugen da.
## Blöcke
Es dürfen nur Blöcke mit einem TNT-Widerstand von maximal 6 verbaut werden. Vor und im Kampf dürfen sich in allen Blöcken mit Inventar nur Blumen, Honigflaschen und Pferderüstungen befinden, in Kisten und Fässer darf auch TNT sein. Es dürfen maximal 32 Werfer pro Seite verbaut werden. In Werfern dürfen sich 2×64 Feuerbälle oder 2×64 Pfeile (ohne Effekte) befinden.
Das Verbauen von unsichtbaren Mauern oder anderen unsichtbaren Blöcken mit Hitbox ist verboten.
Ebenso verboten sind: Monsterspawner, Eis, Netherportalblock, Alle Silberfischsteine.
Das Missbrauchen von unverschiebbaren Blöcken als Panzerung ist verboten.
Wasser darf nicht zum Schutz des eigenen WarShips missbraucht werden.
## Design
Größere Hohlräume im Rumpf zum Ausweichen feindlicher Schüsse sind nicht gestattet, auch nicht während des Kampfes. Jedes WarShip braucht eine Flagge.
Ein WarShip benötigt einen fortbewegungsfähigen Rumpf mit entsprechendem Antrieb (z.B. Segel, Schiffsschrauben).
Der Rumpf muss mindestens einen Block tief unter Wasser sowie mindestens 5 Block über dem Meeresspiegel sein (dies gilt auch während des Kampfes relativ zur Wasseroberfläche). Der Rumpf darf max. 16 Block hoch sein.
Jedes WarShip benötigt eine Brücke, welche die folgenden Kriterien erfüllt:
- Min. 50 begehbare Blöcke
- Min. 2 Block hoch im gesamten Brückenraum
- Ansteuerung von min. zwei zum Gegner gewandten Scheinwerfer
- Optische Brückeneinrichtung
## Anti-Lag-Regeln
Clocks müssen sich mit Ende ihres Einsatzzweckes selbst abschalten.
Sämtliche Redstonetechnik zum Schutz des eigenen WarShips muss ihre Aktivität vor dem Verteilen der Kits eingestellt haben.
Raketen und Flugmaschinen
Ein WarShip darf sich maximal 12 Block vom Technikbereich an weit ausfahren, davon ausgenommen sind Raketen und Flugmaschinen. Raketen und Flugmaschinen dürfen sich im Flug nicht in mehrere Schleim/Honigfahrzeuge aufteilen.
Flugmaschinen sind Schleim/Honigfahrzeuge, welche die Ausfahrmaße des WarShips verlassen und kein TNT zum Gegner transportieren. Flugmaschinen, welche TNT von Raketen zünden oder Flugmaschinen und/oder Raketen stoppen werden bei der Bestimmung der Anzahl nicht gezählt. Es dürfen maximal 8 Flugmaschinen pro Seite verbaut werden.
Eine Rakete ist ein Schleim/Honigfahrzeug, das TNT zum Gegner transportiert. Es dürfen maximal 12 Raketen pro Seite verbaut werden. Ein Raketenmagazin ist in der Lage, mehrere Raketen auf der nahezu gleichen Flugbahn zum Gegner zu schicken. Ein Raketenmagazin wird wie 2 Raketen gewertet.
Es dürften maximal 1000 der vorverbauten Slime- + Honig- + TNT-Blöcke das WarShip in Flugmaschinen und Raketen verlassen.
## Kampfablauf
60 Sekunden vor Kampfbeginn können Flugmaschinen und Raketen das eigene WarShip verlassen. Mit Kampfbeginn dürfen Blöcke abgebaut und platziert werden; TNT-Schaden wird aktiviert. 10 Minuten nach Kampfbeginn wird das Entern des feindlichen WarShips erlaubt. Spieler mit einem Kit, welches TNT beladen kann und nicht dem Kapitän zugeordnet ist, dürfen erst 15 Minuten nach Kampfbeginn entern.
Der Kampf endet, wenn:
- Der Kampf länger als 20 Minuten dauert
- Der Anführer eines Teams tot ist
- Ein WarShip zu 7% beschädigt wurde

2
src/env.d.ts vendored
Datei anzeigen

@ -31,7 +31,7 @@ type SecondaryLocale = "de"
type Locale = PrimaryLocale | SecondaryLocale
type RouteParameters = {"/dashboard":undefined;"/downloads":undefined;"/":undefined;"/login":undefined;"/[...slug]":{"slug":unknown;};"/admin":undefined;"/announcements":undefined;"/announcements/[...slug]":{"slug":unknown;};"/announcements/tags/[tag]":{"tag":unknown;};"/help":undefined;"/help/[...slug]":{"slug":unknown;};"/ranked/[...gamemode]":{"gamemode":unknown;};"/rules":undefined;"/rules/[mode]":{"mode":unknown;};"/stats/fight":undefined;}
type Route = keyof RouteParameters
type TranslationVariables = {"dashboard.page":object|undefined;"dashboard.title":{"name"?:unknown;}|undefined;"dashboard.rank":{"rank"?:unknown;}|undefined;"dashboard.permissions":object|undefined;"dashboard.buttons.logout":object|undefined;"dashboard.buttons.admin":object|undefined;"dashboard.schematic.upload":object|undefined;"dashboard.schematic.home":object|undefined;"dashboard.schematic.dir":object|undefined;"dashboard.schematic.head.type":object|undefined;"dashboard.schematic.head.name":object|undefined;"dashboard.schematic.head.owner":object|undefined;"dashboard.schematic.head.updated":object|undefined;"dashboard.schematic.head.replaceColor":object|undefined;"dashboard.schematic.head.allowReplay":object|undefined;"dashboard.schematic.info.path":{"path"?:unknown;}|undefined;"dashboard.schematic.info.replaceColor":object|undefined;"dashboard.schematic.info.allowReplay":object|undefined;"dashboard.schematic.info.type":{"type"?:unknown;}|undefined;"dashboard.schematic.info.updated":{"updated"?:unknown;}|undefined;"dashboard.schematic.info.item":{"item"?:unknown;}|undefined;"dashboard.schematic.info.members":{"members"?:unknown;}|undefined;"dashboard.schematic.info.btn.download":object|undefined;"dashboard.schematic.info.btn.close":object|undefined;"login.page":object|undefined;"login.title":object|undefined;"login.placeholder.username":object|undefined;"login.placeholder.token":object|undefined;"login.label.username":object|undefined;"login.label.token":object|undefined;"login.generateToken":object|undefined;"login.submit":object|undefined;"login.error":object|undefined;"blog.title":object|undefined;"page":object|undefined;"wg.description":object|undefined;"as.description":object|undefined;"ws.description":object|undefined;"mwg.description":object|undefined;"rules":object|undefined;"announcements":object|undefined;"ranking":object|undefined;"title":{"mode"?:unknown;}|undefined;"stats.title":object|undefined;"navbar.title":object|undefined;"navbar.logo.alt":object|undefined;"navbar.links.home.title":object|undefined;"navbar.links.home.announcements":object|undefined;"navbar.links.home.about":object|undefined;"navbar.links.home.downloads":object|undefined;"navbar.links.home.faq":object|undefined;"navbar.links.rules.title":object|undefined;"navbar.links.rules.gamemode":object|undefined;"navbar.links.rules.wg":object|undefined;"navbar.links.rules.mwg":object|undefined;"navbar.links.rules.ws":object|undefined;"navbar.links.rules.as":object|undefined;"navbar.links.rules.qg":object|undefined;"navbar.links.rules.rotating":object|undefined;"navbar.links.rules.megawg":object|undefined;"navbar.links.rules.micro":object|undefined;"navbar.links.rules.sf":object|undefined;"navbar.links.rules.general":object|undefined;"navbar.links.rules.coc":object|undefined;"navbar.links.help.title":object|undefined;"navbar.links.help.center":object|undefined;"navbar.links.help.docs":object|undefined;"navbar.links.account":object|undefined;"status.loading":object|undefined;"status.status":object|undefined;"status.online":object|undefined;"status.offline":object|undefined;"status.players":{"count"?:unknown;}|undefined;"status.version":{"version"?:unknown;}|undefined;"home.page":object|undefined;"home.title.first":object|undefined;"home.title.second":object|undefined;"home.subtitle.1":object|undefined;"home.subtitle.2":object|undefined;"home.subtitle.3":object|undefined;"home.join":object|undefined;"home.benefits.historic.title":object|undefined;"home.benefits.historic.description.1":object|undefined;"home.benefits.historic.description.2":object|undefined;"home.benefits.server.title":object|undefined;"home.benefits.server.description":object|undefined;"home.benefits.events.title":object|undefined;"home.benefits.events.description.1":object|undefined;"home.benefits.events.description.2":object|undefined;"home.prefix.Admin":object|undefined;"home.prefix.Dev":object|undefined;"home.prefix.Mod":object|undefined;"home.prefix.Sup":object|undefined;"home.prefix.Arch":object|undefined;"footer.imprint":object|undefined;"footer.privacy":object|undefined;"footer.coc":object|undefined;"footer.stats":object|undefined;"footer.gamemodes":object|undefined;"footer.announcements":object|undefined;"footer.join":object|undefined;"wg.title":object|undefined;"mwg.title":object|undefined;"ws.title":object|undefined;"as.title":object|undefined;"qg.title":object|undefined;"ranking.heading":{"mode"?:unknown;}|undefined;"announcements.table.time":object|undefined;"announcements.table.blue":object|undefined;"announcements.table.red":object|undefined;"announcements.table.team":object|undefined;"announcements.table.points":object|undefined;"elo.place":object|undefined;"elo.name":object|undefined;"elo.elo":object|undefined;"elo.title":{"mode"?:unknown;}|undefined;"warning.title":object|undefined;"warning.text":object|undefined;}
type TranslationVariables = {"dashboard.page":object|undefined;"dashboard.title":{"name"?:unknown;}|undefined;"dashboard.rank":{"rank"?:unknown;}|undefined;"dashboard.permissions":object|undefined;"dashboard.buttons.logout":object|undefined;"dashboard.buttons.admin":object|undefined;"dashboard.schematic.upload":object|undefined;"dashboard.schematic.home":object|undefined;"dashboard.schematic.dir":object|undefined;"dashboard.schematic.head.type":object|undefined;"dashboard.schematic.head.name":object|undefined;"dashboard.schematic.head.owner":object|undefined;"dashboard.schematic.head.updated":object|undefined;"dashboard.schematic.head.replaceColor":object|undefined;"dashboard.schematic.head.allowReplay":object|undefined;"dashboard.schematic.info.path":{"path"?:unknown;}|undefined;"dashboard.schematic.info.replaceColor":object|undefined;"dashboard.schematic.info.allowReplay":object|undefined;"dashboard.schematic.info.type":{"type"?:unknown;}|undefined;"dashboard.schematic.info.updated":{"updated"?:unknown;}|undefined;"dashboard.schematic.info.item":{"item"?:unknown;}|undefined;"dashboard.schematic.info.members":{"members"?:unknown;}|undefined;"dashboard.schematic.info.btn.download":object|undefined;"dashboard.schematic.info.btn.close":object|undefined;"login.page":object|undefined;"login.title":object|undefined;"login.placeholder.username":object|undefined;"login.placeholder.token":object|undefined;"login.label.username":object|undefined;"login.label.token":object|undefined;"login.generateToken":object|undefined;"login.submit":object|undefined;"login.error":object|undefined;"blog.title":object|undefined;"page":object|undefined;"wg.description":object|undefined;"as.description":object|undefined;"ws.description":object|undefined;"mwg.description":object|undefined;"rules":object|undefined;"announcements":object|undefined;"ranking":object|undefined;"title":{"mode"?:unknown;}|undefined;"stats.title":object|undefined;"navbar.title":object|undefined;"navbar.logo.alt":object|undefined;"navbar.links.home.title":object|undefined;"navbar.links.home.announcements":object|undefined;"navbar.links.home.about":object|undefined;"navbar.links.home.downloads":object|undefined;"navbar.links.home.faq":object|undefined;"navbar.links.rules.title":object|undefined;"navbar.links.rules.gamemode":object|undefined;"navbar.links.rules.wg":object|undefined;"navbar.links.rules.mwg":object|undefined;"navbar.links.rules.ws":object|undefined;"navbar.links.rules.as":object|undefined;"navbar.links.rules.qg":object|undefined;"navbar.links.rules.rotating":object|undefined;"navbar.links.rules.megawg":object|undefined;"navbar.links.rules.micro":object|undefined;"navbar.links.rules.sf":object|undefined;"navbar.links.rules.general":object|undefined;"navbar.links.rules.coc":object|undefined;"navbar.links.help.title":object|undefined;"navbar.links.help.center":object|undefined;"navbar.links.help.docs":object|undefined;"navbar.links.account":object|undefined;"status.loading":object|undefined;"status.status":object|undefined;"status.online":object|undefined;"status.offline":object|undefined;"status.players":{"count"?:unknown;}|undefined;"status.version":{"version"?:unknown;}|undefined;"home.page":object|undefined;"home.title.first":object|undefined;"home.title.second":object|undefined;"home.subtitle.1":object|undefined;"home.subtitle.2":object|undefined;"home.subtitle.3":object|undefined;"home.join":object|undefined;"home.benefits.historic.title":object|undefined;"home.benefits.historic.description.1":object|undefined;"home.benefits.historic.description.2":object|undefined;"home.benefits.server.title":object|undefined;"home.benefits.server.description":object|undefined;"home.benefits.events.title":object|undefined;"home.benefits.events.description.1":object|undefined;"home.benefits.events.description.2":object|undefined;"home.benefits.read":object|undefined;"home.prefix.Admin":object|undefined;"home.prefix.Dev":object|undefined;"home.prefix.Mod":object|undefined;"home.prefix.Sup":object|undefined;"home.prefix.Arch":object|undefined;"footer.imprint":object|undefined;"footer.privacy":object|undefined;"footer.coc":object|undefined;"footer.stats":object|undefined;"footer.gamemodes":object|undefined;"footer.announcements":object|undefined;"footer.join":object|undefined;"wg.title":object|undefined;"mwg.title":object|undefined;"ws.title":object|undefined;"as.title":object|undefined;"qg.title":object|undefined;"ranking.heading":{"mode"?:unknown;}|undefined;"announcements.table.time":object|undefined;"announcements.table.blue":object|undefined;"announcements.table.red":object|undefined;"announcements.table.team":object|undefined;"announcements.table.points":object|undefined;"elo.place":object|undefined;"elo.name":object|undefined;"elo.elo":object|undefined;"elo.title":{"mode"?:unknown;}|undefined;"warning.title":object|undefined;"warning.text":object|undefined;}
type Translation = keyof TranslationVariables
type Environment = "none"|"node"|"browser"
declare module "astro-i18n" {

Datei anzeigen

@ -3,14 +3,14 @@
"title": "Login",
"placeholder": {
"username": "Nutzername...",
"token": "***************"
"password": "***************"
},
"label": {
"username": "Nutzername",
"token": "Token"
"password": "Passwort"
},
"generateToken": "Wie generiere ich ein Token?",
"setPassword": "Wie setzte ich mein Passwort?",
"submit": "Login",
"error": "Falscher Nutzername oder falscher Token"
"error": "Falscher Nutzername oder falsches Passwort"
}
}

Datei anzeigen

@ -4,14 +4,14 @@
"title": "Login",
"placeholder": {
"username": "Username...",
"token": "***************"
"password": "***************"
},
"label": {
"username": "Username",
"token": "Token"
"password": "Password"
},
"generateToken": "How to generate Token",
"setPassword": "How to set a Password",
"submit": "Login",
"error": "Invalid username or token"
"error": "Invalid username or password"
}
}

Datei anzeigen

@ -1,5 +1,4 @@
---
import '../styles/tailwind.css'
import icon from '../images/logo.png';
import {getImage} from "astro:assets";
import {astroI18n} from "astro-i18n";

Datei anzeigen

@ -158,4 +158,4 @@ const { title } = Astro.props;
.match {
width: min(100vw, 70em);
}
</style>
</style>

Datei anzeigen

@ -5,4 +5,4 @@ import Basic from "../../layouts/Basic.astro";
<Basic>
<App client:only="svelte" />
</Basic>
</Basic>

Datei anzeigen

@ -136,4 +136,4 @@ const { Content } = await post.render();
@apply w-fit p-4 rounded-md border-2 border-gray-600 my-4;
}
}
</style>
</style>

Datei anzeigen

@ -60,4 +60,4 @@ const { posts, tag } = Astro.props;
{index !== posts.length - 1 && <hr/>}
</div>
))}
</PageLayout>
</PageLayout>

Datei anzeigen

@ -25,48 +25,16 @@ const { Content } = await page.render();
<style is:global>
article {
width: clamp(75%, 25rem, 100vw);
@apply mx-auto bg-gray-100 px-4 py-8 rounded-b-md shadow-md pt-40 sm:pt-28 md:pt-14
dark:text-white dark:bg-neutral-900;
p {
@apply my-4 leading-7;
>* {
all: revert;
}
h1 {
@apply text-4xl font-bold mt-4 text-center;
}
h2 {
@apply text-3xl font-bold mt-4;
}
h3 {
@apply text-2xl font-bold mt-4;
}
h4 {
@apply text-xl font-bold mt-4;
}
a {
@apply text-blue-500 hover:text-blue-700;
}
ol>li, ul>li {
@apply ml-4;
}
ol {
@apply list-decimal;
}
ul {
@apply list-disc;
code {
@apply dark:text-neutral-400 text-neutral-800;
}
pre.astro-code {
@apply w-fit p-4 rounded-md border-2 border-gray-600 my-4;
}
}
</style>
</style>

Datei anzeigen

@ -7,6 +7,7 @@ import {CaretRight, Archive, Rocket, Bell} from "@astropub/icons"
import {t} from "astro-i18n";
import {l} from "../util/util"
import PlayerCount from "../components/PlayerCount.svelte";
import "../../public/fonts/barlow-condensed/barlow-condensed.css"
const teamMember = await fetch("http://localhost:1337/data/team").then(value => value.json())
@ -37,7 +38,6 @@ function mapMap<T, K, J>(i: Map<T, K>, fn: (key: T, value: K) => J): J[] {
---
<NavbarLayout title={t("home.page")} description="SteamWar.de Homepage">
<link rel="stylesheet" href="/fonts/barlow-condensed/barlow-condensed.css" slot="head" />
<div class="w-full h-screen relative mb-4">
<Image src={localBau} alt="Bau" width="1920" height="1080" densities={[1.5, 2, 3, 4]} class="w-full object-cover rounded-b-2xl shadow-2xl dark:brightness-75" style="height: calc(100vh + 1rem)" draggable="false" />
<drop-in class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col items-center">
@ -146,10 +146,6 @@ function mapMap<T, K, J>(i: Map<T, K>, fn: (key: T, value: K) => J): J[] {
</NavbarLayout>
<style>
@tailwind base;
@tailwind components;
@tailwind utilities;
text-carousel{
>* {
@apply absolute top-0 left-0 w-full text-xl sm:text-4xl italic text-white text-center opacity-0;
@ -159,7 +155,7 @@ function mapMap<T, K, J>(i: Map<T, K>, fn: (key: T, value: K) => J): J[] {
}
.barlow {
font-family: Barlow Condensed;
font-family: Barlow Condensed, serif;
}
.card {

Datei anzeigen

@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { l as proxyL } from 'astro-i18n'
import { l as proxyL, t as proxyT } from 'astro-i18n'
const locales = ["de"];