Compare commits
47 Commits
Author | SHA1 | Date |
---|---|---|
Nicolai Ort | 1235776a62 | |
Philipp Dormann | 4a1e26663e | |
Philipp Dormann | 2bdbd00189 | |
Philipp Dormann | 85e7b7c231 | |
Philipp Dormann | d5f685a826 | |
Philipp Dormann | 88449174a1 | |
Philipp Dormann | d30be90102 | |
Philipp Dormann | 7e3570e923 | |
Philipp Dormann | 3ac0a3c142 | |
Philipp Dormann | dc588e83c0 | |
Philipp Dormann | 5d764a80a7 | |
Philipp Dormann | 0f32c71ef0 | |
Philipp Dormann | 4b1a1a324b | |
Philipp Dormann | 569296928e | |
Philipp Dormann | c33157e2d4 | |
Philipp Dormann | ee9799736f | |
Philipp Dormann | 8d38e81b78 | |
Philipp Dormann | 7005ec6a28 | |
Philipp Dormann | 38b0fccb5a | |
Philipp Dormann | 8a4974ffa9 | |
Philipp Dormann | 9b83b38356 | |
Philipp Dormann | 047941babb | |
Philipp Dormann | f909575ca5 | |
Philipp Dormann | 70a6120447 | |
Philipp Dormann | b483ed1e49 | |
Philipp Dormann | 2ce93b45c7 | |
Philipp Dormann | 8139a3f60b | |
Philipp Dormann | 431fc5a047 | |
Philipp Dormann | b287db4d0a | |
Philipp Dormann | b3ce711e6b | |
Philipp Dormann | 456c0635a4 | |
Philipp Dormann | b50398f6eb | |
Philipp Dormann | e04e6713bc | |
Philipp Dormann | de373390ba | |
Nicolai Ort | 5be665b65f | |
Nicolai Ort | 324612b5dd | |
Nicolai Ort | ca1c96b252 | |
Nicolai Ort | d284e8184c | |
Nicolai Ort | 701aae9ed4 | |
Philipp Dormann | 7f7b743f41 | |
Philipp Dormann | ee6af3e069 | |
Philipp Dormann | ea08127927 | |
Philipp Dormann | e0f400a800 | |
Philipp Dormann | c485898b7d | |
Nicolai Ort | 80f5c38c36 | |
Nicolai Ort | 205e09e2fc | |
Nicolai Ort | 9125dec45b |
60
.drone.yml
60
.drone.yml
|
@ -1,60 +0,0 @@
|
|||
---
|
||||
kind: secret
|
||||
name: docker_username
|
||||
get:
|
||||
path: odit-registry-builder
|
||||
name: username
|
||||
|
||||
---
|
||||
kind: secret
|
||||
name: docker_password
|
||||
get:
|
||||
path: odit-registry-builder
|
||||
name: password
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: build:dev
|
||||
|
||||
steps:
|
||||
- name: build dev
|
||||
image: plugins/docker
|
||||
depends_on: [clone]
|
||||
settings:
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: registry.odit.services/lfk/selfservice
|
||||
tags:
|
||||
- dev
|
||||
registry: registry.odit.services
|
||||
mtu: 1000
|
||||
trigger:
|
||||
branch:
|
||||
- dev
|
||||
event:
|
||||
- push
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: build:tags
|
||||
steps:
|
||||
- name: build $DRONE_TAG
|
||||
image: plugins/docker
|
||||
depends_on: [clone]
|
||||
settings:
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: registry.odit.services/lfk/selfservice
|
||||
tags:
|
||||
- '${DRONE_TAG}'
|
||||
registry: registry.odit.services
|
||||
mtu: 1000
|
||||
trigger:
|
||||
event:
|
||||
- tag
|
|
@ -0,0 +1,39 @@
|
|||
steps:
|
||||
- name: build latest
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
settings:
|
||||
repo: registry.odit.services/lfk/beamershow
|
||||
tags:
|
||||
- latest
|
||||
registry: registry.odit.services
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache_from: registry.odit.services/lfk/beamershow:latest
|
||||
username:
|
||||
from_secret: odit-registry-builder-username
|
||||
password:
|
||||
from_secret: odit-registry-builder-password
|
||||
secrets:
|
||||
- source: odit-npm-cache-url
|
||||
target: NPM_REGISTRY_URL
|
||||
when:
|
||||
branch: main
|
||||
- name: build dev
|
||||
image: woodpeckerci/plugin-docker-buildx
|
||||
settings:
|
||||
repo: registry.odit.services/lfk/beamershow
|
||||
tags:
|
||||
- dev
|
||||
registry: registry.odit.services
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache_from: registry.odit.services/lfk/beamershow:dev
|
||||
username:
|
||||
from_secret: odit-registry-builder-username
|
||||
password:
|
||||
from_secret: odit-registry-builder-password
|
||||
secrets:
|
||||
- source: odit-npm-cache-url
|
||||
target: NPM_REGISTRY_URL
|
||||
when:
|
||||
branch: dev
|
||||
when:
|
||||
event: push
|
124
CHANGELOG.md
124
CHANGELOG.md
|
@ -2,4 +2,128 @@
|
|||
|
||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||
|
||||
#### [1.0.4](https://git.odit.services/lfk/beamershow/compare/1.0.3...1.0.4)
|
||||
|
||||
- fix: formatting of total km [`2bdbd00`](https://git.odit.services/lfk/beamershow/commit/2bdbd001898b9dd5aa541f3cce90fc108e7e458c)
|
||||
|
||||
#### [1.0.3](https://git.odit.services/lfk/beamershow/compare/1.0.2...1.0.3)
|
||||
|
||||
> 15 April 2023
|
||||
|
||||
- 🚀Bumped version to 1.0.3 [`85e7b7c`](https://git.odit.services/lfk/beamershow/commit/85e7b7c231b92233b58373cd4ad56f514d6d789c)
|
||||
- cleanup loading [`d5f685a`](https://git.odit.services/lfk/beamershow/commit/d5f685a8269737d148a06e0ec784c0074eac7d3f)
|
||||
- drop laptime runner stats, fix runner distance page [`8844917`](https://git.odit.services/lfk/beamershow/commit/88449174a148ab7498075a15149388213a532c02)
|
||||
|
||||
#### [1.0.2](https://git.odit.services/lfk/beamershow/compare/1.0.1...1.0.2)
|
||||
|
||||
> 15 April 2023
|
||||
|
||||
- 🚀Bumped version to 1.0.2 [`d30be90`](https://git.odit.services/lfk/beamershow/commit/d30be90102b3065b16836adc44a686c677e3053d)
|
||||
- updated release config [`7e3570e`](https://git.odit.services/lfk/beamershow/commit/7e3570e9231929f366047ff149364ec06344d2ee)
|
||||
|
||||
#### [1.0.1](https://git.odit.services/lfk/beamershow/compare/1.0.0...1.0.1)
|
||||
|
||||
> 15 April 2023
|
||||
|
||||
- 🚀Bumped version to 1.0.1 [`3ac0a3c`](https://git.odit.services/lfk/beamershow/commit/3ac0a3c142427adb3b3d461cd39a458685a85335)
|
||||
- fix bg image? [`dc588e8`](https://git.odit.services/lfk/beamershow/commit/dc588e83c03d7e381f67c52b5fd5430fd0462742)
|
||||
|
||||
### [1.0.0](https://git.odit.services/lfk/beamershow/compare/0.1.5...1.0.0)
|
||||
|
||||
> 15 April 2023
|
||||
|
||||
- pin clock to bottom [`b287db4`](https://git.odit.services/lfk/beamershow/commit/b287db4d0a57e8a07d30b756ce0bea30da5ef4e3)
|
||||
- update font to match lfk 2023 branding [`70a6120`](https://git.odit.services/lfk/beamershow/commit/70a61204471cea8f8d5dc17ad225c39c5cd91a43)
|
||||
- bump windicss [`c33157e`](https://git.odit.services/lfk/beamershow/commit/c33157e2d4c5e4a5e9d30d96650e0bfa5ab1ab57)
|
||||
- 1 more empty state [`f909575`](https://git.odit.services/lfk/beamershow/commit/f909575ca5ac862ec8e34d783831c2fcb53f2083)
|
||||
- add empty state for runners_laptime [`8139a3f`](https://git.odit.services/lfk/beamershow/commit/8139a3f60b3544a8992d97b8b9d49520b28270bd)
|
||||
- 🚀Bumped version to 1.0.0 [`5d764a8`](https://git.odit.services/lfk/beamershow/commit/5d764a80a7d25be7f6c2bb29a22b816875a739bf)
|
||||
- updated pnpm lock [`de37339`](https://git.odit.services/lfk/beamershow/commit/de373390ba7051e22f1c4904b1ed60e1dc0e0c7a)
|
||||
- text responsiveness [`9b83b38`](https://git.odit.services/lfk/beamershow/commit/9b83b38356b3faa677421a98c8655bc2357fb489)
|
||||
- fix: font responsiveness [`38b0fcc`](https://git.odit.services/lfk/beamershow/commit/38b0fccb5abf762b88d5a8a3ad27cb80cf85ccb0)
|
||||
- fix: typo [`8a4974f`](https://git.odit.services/lfk/beamershow/commit/8a4974ffa95b4d45f14c14130d7b7cb584c5cb52)
|
||||
- format donation total [`431fc5a`](https://git.odit.services/lfk/beamershow/commit/431fc5a0474076568e9184d4c6b9819af6cc2e3f)
|
||||
- default fallback on no data [`e04e671`](https://git.odit.services/lfk/beamershow/commit/e04e6713bc282810da2a0d103484cb6043af6063)
|
||||
- formatting [`047941b`](https://git.odit.services/lfk/beamershow/commit/047941babbccb1f0674347babfa1468ac51fa487)
|
||||
- monospace clock [`b50398f`](https://git.odit.services/lfk/beamershow/commit/b50398f6eb4e99e4d1c0d654e2710b265186837a)
|
||||
- formatting [`ee97997`](https://git.odit.services/lfk/beamershow/commit/ee9799736f912f32e37e0d5d06a5591ec6180a31)
|
||||
- improved clock position on xl [`0f32c71`](https://git.odit.services/lfk/beamershow/commit/0f32c71ef0e0267b2dc271507346c60b83eaa176)
|
||||
- improved clock alignment [`4b1a1a3`](https://git.odit.services/lfk/beamershow/commit/4b1a1a324b865354472e45e0ef24230678be6111)
|
||||
- fix container width [`5692969`](https://git.odit.services/lfk/beamershow/commit/569296928ee0a3c21844c183d74a36d759f65150)
|
||||
- improved footer [`8d38e81`](https://git.odit.services/lfk/beamershow/commit/8d38e81b782252c84163aa87ec660199a2e2b065)
|
||||
- updated width [`7005ec6`](https://git.odit.services/lfk/beamershow/commit/7005ec6a28b50763a5e4ee42a8d50e9953149168)
|
||||
- drop "teams_distance" screen [`b483ed1`](https://git.odit.services/lfk/beamershow/commit/b483ed1e49aebbdfb59b41df75160a8acab546b2)
|
||||
- improved empty state [`2ce93b4`](https://git.odit.services/lfk/beamershow/commit/2ce93b45c772284e59d84f063069e1546434bbc3)
|
||||
- fix: width of general container [`b3ce711`](https://git.odit.services/lfk/beamershow/commit/b3ce711e6b8a8497ccbe6e5eea5ff1d6cd550e91)
|
||||
- reload data every 90s [`456c063`](https://git.odit.services/lfk/beamershow/commit/456c0635a4fb5e129e94d4537fb735dc94933a12)
|
||||
|
||||
#### [0.1.5](https://git.odit.services/lfk/beamershow/compare/0.1.4...0.1.5)
|
||||
|
||||
> 29 March 2023
|
||||
|
||||
- Switched dockerfile over to pnpm + cache [`701aae9`](https://git.odit.services/lfk/beamershow/commit/701aae9ed4af66b973e88fec384e46752fcb9ca2)
|
||||
- Switched ci over to pnpm cache [`324612b`](https://git.odit.services/lfk/beamershow/commit/324612b5ddc1cf148a7750a02cdce557bef54d38)
|
||||
- pinned dependencies [`d284e81`](https://git.odit.services/lfk/beamershow/commit/d284e8184c5a3c357398e3ab5a24a2e611001640)
|
||||
- 🚀Bumped version to 0.1.5 [`5be665b`](https://git.odit.services/lfk/beamershow/commit/5be665b65fc021ae8ae544a965444cc29ec20e62)
|
||||
- Docker copy all [`ca1c96b`](https://git.odit.services/lfk/beamershow/commit/ca1c96b252c9665b94dd9ef37c700afbb0039d46)
|
||||
|
||||
#### [0.1.4](https://git.odit.services/lfk/beamershow/compare/0.1.3...0.1.4)
|
||||
|
||||
> 5 February 2023
|
||||
|
||||
- cleanup invalid track stuff (leftovers from scanclient) [`c485898`](https://git.odit.services/lfk/beamershow/commit/c485898b7db7ae09f6e405e12aa6d458833f2dcf)
|
||||
- bullet-proof login ux [`ea08127`](https://git.odit.services/lfk/beamershow/commit/ea08127927e2b1ebcbcd7907fbf51a66a43da421)
|
||||
- add rst command [`ee6af3e`](https://git.odit.services/lfk/beamershow/commit/ee6af3e06921ef33651076b8767149c2df3a1f2d)
|
||||
- 🚀Bumped version to 0.1.4 [`7f7b743`](https://git.odit.services/lfk/beamershow/commit/7f7b743f414b77902a358b6bd813412096d195b3)
|
||||
- Settings: reload on lang change [`e0f400a`](https://git.odit.services/lfk/beamershow/commit/e0f400a800f2652cf3edf2ac0a5f802b65d0c460)
|
||||
|
||||
#### [0.1.3](https://git.odit.services/lfk/beamershow/compare/0.1.2...0.1.3)
|
||||
|
||||
> 8 April 2021
|
||||
|
||||
- 🚀Bumped version to 0.1.3 [`80f5c38`](https://git.odit.services/lfk/beamershow/commit/80f5c38c364c02d70a99f0e06ea9153e10438bfb)
|
||||
- Fixed image name [`205e09e`](https://git.odit.services/lfk/beamershow/commit/205e09e2fc6a2a49251278a8ead31e1718ac7e44)
|
||||
|
||||
#### [0.1.2](https://git.odit.services/lfk/beamershow/compare/0.1.1...0.1.2)
|
||||
|
||||
> 8 April 2021
|
||||
|
||||
- 🚀Bumped version to 0.1.2 [`9125dec`](https://git.odit.services/lfk/beamershow/commit/9125dec45b41f80445cd6cc75436f5a63de2fd98)
|
||||
|
||||
#### 0.1.1
|
||||
|
||||
> 7 April 2021
|
||||
|
||||
- Sorted translations 🌍 [`#1`](https://git.odit.services/lfk/beamershow/issues/1)
|
||||
- 🎉 initial commit [`b902b08`](https://git.odit.services/lfk/beamershow/commit/b902b081d7e2e80fdf167657f3c2fda79b888985)
|
||||
- formatting... [`866436f`](https://git.odit.services/lfk/beamershow/commit/866436fa82882dffe6f2f45bd303effc67d92a37)
|
||||
- Added/updated settings translations [`b367648`](https://git.odit.services/lfk/beamershow/commit/b36764869bf1e302713d457b3ba3ec804c5d38f7)
|
||||
- 🚀Bumped version to 0.1.1 [`94ceca9`](https://git.odit.services/lfk/beamershow/commit/94ceca9454da77d29f975cf894d2304dcc60c481)
|
||||
- i18n run [`c5e4fac`](https://git.odit.services/lfk/beamershow/commit/c5e4facffa19578db95315d53bd0befc936016e4)
|
||||
- Added drone file for dev and tag build [`d809dcb`](https://git.odit.services/lfk/beamershow/commit/d809dcba799a94c6ed5a6cfac551d14c1a2cbadd)
|
||||
- You can now go back to config by typeing cnf [`9135090`](https://git.odit.services/lfk/beamershow/commit/9135090e73ff6fc021b4f7f80b3780b3ff73ad02)
|
||||
- Added top teams by distance page [`d78e896`](https://git.odit.services/lfk/beamershow/commit/d78e896fecf5f7975267f3a1c3faf8b5c8728c25)
|
||||
- Added nginx conf for dockerfile [`b3b06bc`](https://git.odit.services/lfk/beamershow/commit/b3b06bc30e4043d3f7b874e939a090f85841a516)
|
||||
- Implemented fix for url crashing [`7f6134d`](https://git.odit.services/lfk/beamershow/commit/7f6134d0efd1a6a1161acc2c8bc8c4496c529ffe)
|
||||
- Added html/template for the top runenry by laptime [`3275ae2`](https://git.odit.services/lfk/beamershow/commit/3275ae2609ef966183ca66a0234ff7f570eaef81)
|
||||
- Added release comand and config [`ca48959`](https://git.odit.services/lfk/beamershow/commit/ca489595812da8756629a498d673e3206cb66a2f)
|
||||
- Added track to config [`abdc510`](https://git.odit.services/lfk/beamershow/commit/abdc5103055844da73438e8dfbb0eea2b41105d1)
|
||||
- removed unused stuff from the store [`cb559da`](https://git.odit.services/lfk/beamershow/commit/cb559da57c58a1998f54beb83bee837e0a8b71e7)
|
||||
- Implemented settings dialog [`de7e96c`](https://git.odit.services/lfk/beamershow/commit/de7e96cd01f70bfff80f42e7c709e67d44681920)
|
||||
- Added js part of runners by laptime [`10b862d`](https://git.odit.services/lfk/beamershow/commit/10b862d43ac35122c1cc4eaed30e7ac8228d294f)
|
||||
- User quickstart docs README [`19cc7d0`](https://git.odit.services/lfk/beamershow/commit/19cc7d0c28ff56481fc37cc98b341259566a39ed)
|
||||
- Removed license export from drone pipelines [`e5c51b9`](https://git.odit.services/lfk/beamershow/commit/e5c51b956e210f3f4652f020edefb0de5bb789d9)
|
||||
- Formatting [`fca7a99`](https://git.odit.services/lfk/beamershow/commit/fca7a99689469f8a8b281f643346b3281036ee40)
|
||||
- added svelte transitions [`1f95b8b`](https://git.odit.services/lfk/beamershow/commit/1f95b8ba53e3152517d730ad6b3b39dc472bb386)
|
||||
- Added 2-staged dockerfile [`c83ff39`](https://git.odit.services/lfk/beamershow/commit/c83ff39677c4575346a0b7eced95796de90d6fee)
|
||||
- Precommit hooks doing their best to not die [`85b40c1`](https://git.odit.services/lfk/beamershow/commit/85b40c10bffa15ad381e51fee348bb014780d5d8)
|
||||
- Renamed Firma -> Organsiation [`3e7b120`](https://git.odit.services/lfk/beamershow/commit/3e7b1201e25da7dcc2f6be2b4b826b90d616dd67)
|
||||
- Added beamershow docker-compose [`b42684f`](https://git.odit.services/lfk/beamershow/commit/b42684f7fc8e40740a6511d895af03f7f110e2a4)
|
||||
- Updated release-it config [`cfd64c2`](https://git.odit.services/lfk/beamershow/commit/cfd64c2f19dabd8aa758aefd02342935c54e20de)
|
||||
- Renamed Firma -Y Organsiation [`662e31b`](https://git.odit.services/lfk/beamershow/commit/662e31b36674f66696a4a4bc3ca4abae3efd93bb)
|
||||
- CNF now opens settings [`d5ce648`](https://git.odit.services/lfk/beamershow/commit/d5ce648a53bb70a1c4ad7f2b12c334e328e36448)
|
||||
- Added missing let [`70e5f17`](https://git.odit.services/lfk/beamershow/commit/70e5f172a66dcad64353f8469ebb845a1b4895bb)
|
||||
- Added missing let [`fa35ac8`](https://git.odit.services/lfk/beamershow/commit/fa35ac8254028570bd3e425276a008fe83887f09)
|
||||
- Updated release-it config [`a7e84c7`](https://git.odit.services/lfk/beamershow/commit/a7e84c7d426525a5041f0ec260cd57dcfd107afb)
|
||||
- Added url validation fix [`64ce42d`](https://git.odit.services/lfk/beamershow/commit/64ce42d8a04cc4b149db7f75be5ff0d9fbfb3a75)
|
||||
- removed useless console log [`fe0cba9`](https://git.odit.services/lfk/beamershow/commit/fe0cba9058a1874058618ef3b697093fcfc78a99)
|
||||
|
|
16
Dockerfile
16
Dockerfile
|
@ -1,12 +1,12 @@
|
|||
FROM node:15.11.0-alpine3.13
|
||||
FROM registry.odit.services/hub/library/node:19.8.1-alpine3.16 as build
|
||||
ARG NPM_REGISTRY_URL=https://registry.npmjs.org
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN yarn
|
||||
RUN yarn build
|
||||
|
||||
COPY . ./
|
||||
RUN npm config set registry $NPM_REGISTRY_URL && npm i -g pnpm@8 && pnpm i
|
||||
RUN pnpm build
|
||||
|
||||
# final image
|
||||
FROM alpine
|
||||
COPY --from=0 /app/dist /app
|
||||
FROM fholzer/nginx-brotli:v1.19.1
|
||||
COPY --from=1 /app /usr/share/nginx/html
|
||||
FROM registry.odit.services/library/nginx-brotli:3.15 as final
|
||||
COPY --from=build /app/dist /usr/share/nginx/html
|
||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
|
@ -6,6 +6,11 @@
|
|||
<title>LfK!Beamershow</title>
|
||||
<base href="./" />
|
||||
<link rel="icon" type="image/png" href="./favicon.png" />
|
||||
<style>
|
||||
* {
|
||||
font-family: "Athiti", sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-white font-family-karla h-screen">
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
# @fontsource/athiti
|
||||
**Author**: Lotus <declininglotus@gmail.com>
|
||||
**Repo**: https://github.com/fontsource/fontsource
|
||||
**License**: MIT
|
||||
**Description**: Self-host the Athiti font in a neatly bundled NPM package.
|
||||
## License Text
|
||||
|
||||
|
||||
# @odit/license-exporter
|
||||
**Author**: ODIT.Services
|
||||
**Repo**: https://git.odit.services/odit/license-exporter
|
||||
|
|
99
package.json
99
package.json
|
@ -1,48 +1,51 @@
|
|||
{
|
||||
"name": "@lfk/beamershow",
|
||||
"version": "0.1.1",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"format": "prettier --write --plugin-search-dir=. ./**/*.html ./**/*.svelte",
|
||||
"prepare": "husky install",
|
||||
"license:export": "license-exporter --markdown && git stage licenses.md",
|
||||
"release": "release-it --only-version"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@odit/license-exporter": "^0.0.11",
|
||||
"@svitejs/vite-plugin-svelte": "^0.11.1",
|
||||
"@tsconfig/svelte": "^1.0.10",
|
||||
"@types/html-minifier": "^4.0.0",
|
||||
"axios": "^0.21.1",
|
||||
"html-minifier": "^4.0.0",
|
||||
"husky": "^5.1.3",
|
||||
"prettier": "^2.2.1",
|
||||
"prettier-plugin-svelte": "^2.2.0",
|
||||
"release-it": "14.5.0",
|
||||
"svelte": "3.36.0",
|
||||
"svelte-i18n": "3.3.9",
|
||||
"svelte-preprocess": "4.7.0",
|
||||
"validator": "^13.5.2",
|
||||
"vite": "2.1.4",
|
||||
"vite-plugin-windicss": "0.11.2"
|
||||
},
|
||||
"release-it": {
|
||||
"git": {
|
||||
"commit": true,
|
||||
"requireCleanWorkingDir": false,
|
||||
"commitMessage": "🚀Bumped version to ${version}",
|
||||
"requireBranch": "main",
|
||||
"push": false,
|
||||
"tag": true,
|
||||
"tagName": null,
|
||||
"tagAnnotation": "${version}"
|
||||
},
|
||||
"npm": {
|
||||
"publish": false
|
||||
},
|
||||
"hooks": {
|
||||
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order.js && git add src/locales"
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"name": "@lfk/beamershow",
|
||||
"version": "1.0.4",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"format": "prettier --write --plugin-search-dir=. ./**/*.html ./**/*.svelte",
|
||||
"prepare": "husky install",
|
||||
"license:export": "license-exporter --markdown && git stage licenses.md",
|
||||
"release": "release-it --only-version"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@odit/license-exporter": "0.0.11",
|
||||
"@svitejs/vite-plugin-svelte": "0.11.1",
|
||||
"@tsconfig/svelte": "1.0.10",
|
||||
"@types/html-minifier": "4.0.0",
|
||||
"axios": "0.21.1",
|
||||
"html-minifier": "4.0.0",
|
||||
"husky": "5.1.3",
|
||||
"prettier": "2.2.1",
|
||||
"prettier-plugin-svelte": "2.2.0",
|
||||
"release-it": "14.5.0",
|
||||
"svelte": "3.36.0",
|
||||
"svelte-i18n": "3.3.9",
|
||||
"svelte-preprocess": "4.7.0",
|
||||
"validator": "13.5.2",
|
||||
"vite": "2.1.4",
|
||||
"vite-plugin-windicss": "1.8.10"
|
||||
},
|
||||
"release-it": {
|
||||
"git": {
|
||||
"commit": true,
|
||||
"requireCleanWorkingDir": false,
|
||||
"commitMessage": "🚀Bumped version to ${version}",
|
||||
"requireBranch": "main",
|
||||
"push": true,
|
||||
"tag": true,
|
||||
"tagName": null,
|
||||
"tagAnnotation": "${version}"
|
||||
},
|
||||
"npm": {
|
||||
"publish": false
|
||||
},
|
||||
"hooks": {
|
||||
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order.js && git add src/locales"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@fontsource/athiti": "^4.5.10"
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -12,12 +12,10 @@
|
|||
import Login from "./Login.svelte";
|
||||
import Settings from "./Settings.svelte";
|
||||
export let settings_open = false;
|
||||
$: is_configured =
|
||||
$apikey &&
|
||||
$apikey !== "null" &&
|
||||
$apikey !== "" &&
|
||||
$laptime_track != 0 &&
|
||||
$laptime_track != null;
|
||||
$: is_configured = $apikey?.length === 44 && $api_endpoint?.includes("://");
|
||||
// &&
|
||||
// $laptime_track != 0 &&
|
||||
// $laptime_track != null;
|
||||
init({
|
||||
fallbackLocale: "en-US",
|
||||
initialLocale: $lang,
|
||||
|
@ -29,12 +27,12 @@
|
|||
if (e.key === "Escape") {
|
||||
modal_open = false;
|
||||
}
|
||||
if (e.keyCode === 13) {
|
||||
if (createbtnenabled === true) {
|
||||
createbtnenabled = false;
|
||||
submit();
|
||||
}
|
||||
}
|
||||
// if (e.keyCode === 13) {
|
||||
// if (createbtnenabled === true) {
|
||||
// createbtnenabled = false;
|
||||
// submit();
|
||||
// }
|
||||
// }
|
||||
if (command === "" && e.key === "c") {
|
||||
command = "c";
|
||||
} else if (command === "c" && e.key === "n") {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<script>
|
||||
import axios from "axios";
|
||||
import bg from "../public/beamershow_background.png?import";
|
||||
import { _ } from "svelte-i18n";
|
||||
import { slide } from "svelte/transition";
|
||||
import { apikey, api_endpoint, laptime_track } from "./store.js";
|
||||
|
@ -9,9 +10,9 @@
|
|||
$: pages = [
|
||||
"general",
|
||||
"runners_distance",
|
||||
"runners_laptime",
|
||||
// "runners_laptime",
|
||||
"orgs_distance",
|
||||
"teams_distance",
|
||||
// "teams_distance",
|
||||
];
|
||||
$: current_page = "general";
|
||||
$: general = {};
|
||||
|
@ -120,7 +121,7 @@
|
|||
function fetch_all() {
|
||||
stats_general();
|
||||
stats_runners();
|
||||
stats_runners_by_laptime();
|
||||
// stats_runners_by_laptime();
|
||||
stats_orgs();
|
||||
stats_teams();
|
||||
}
|
||||
|
@ -130,7 +131,7 @@
|
|||
}, 1000);
|
||||
setInterval(() => {
|
||||
fetch_all();
|
||||
}, 15000);
|
||||
}, 50000);
|
||||
setInterval(() => {
|
||||
current_page = pages.cycle(current_page);
|
||||
}, 20000);
|
||||
|
@ -138,230 +139,279 @@
|
|||
|
||||
<div
|
||||
class="min-h-screen flex items-center justify-center bg-gray-100"
|
||||
style="background-image: url('/beamershow_background.png');background-position: center;background-size: contain;background-repeat:no-repeat;"
|
||||
style="background-image: url({bg});background-position: center;background-size: contain;background-repeat:no-repeat;"
|
||||
>
|
||||
<div class="max-w-xl w-full">
|
||||
{#if current_page === "general"}
|
||||
<div transition:slide|local>
|
||||
<h1 class="mr-6 text-7xl font-semibold text-center text-gray-900">
|
||||
{hours}:{minutes}:{seconds}
|
||||
</h1>
|
||||
<!-- -->
|
||||
<div class="flex flex-wrap -mx-1 overflow-hidden mt-5">
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-semibold text-center text-gray-900">
|
||||
{general.total_runners}
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("laeufer")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-semibold text-center text-gray-900">
|
||||
{general.total_distance}
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("kilometer-gesamt")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-semibold text-center text-gray-900">
|
||||
{general.total_donation} €
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("spendensumme")}
|
||||
</h1>
|
||||
<div class="w-full">
|
||||
<div class="w-3/4 xl:w-1/2 mx-auto">
|
||||
<!-- -->
|
||||
{#if current_page === "general"}
|
||||
<div transition:slide|local>
|
||||
<h1
|
||||
class="mr-6 text-5xl xl:text-7xl font-bold text-center text-gray-900"
|
||||
>
|
||||
Statistiken
|
||||
</h1>
|
||||
<!-- -->
|
||||
<div class="flex flex-wrap -mx-1 overflow-hidden mt-5">
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-bold text-center text-gray-900">
|
||||
{general.total_runners || "0"}
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("laeufer")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-bold text-center text-gray-900">
|
||||
{general.total_distance / 1000 || 0}
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("kilometer-gesamt")}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="my-1 px-1 w-full overflow-hidden sm:w-1/2 md:w-1/3">
|
||||
<h1 class="text-5xl font-bold text-center text-gray-900">
|
||||
{parseFloat(
|
||||
((general.total_donation || 0) / 100).toFixed(2)
|
||||
).toLocaleString(undefined, {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2,
|
||||
}) || "0"} €
|
||||
</h1>
|
||||
<h1 class="text-2xl font-semibold text-center text-gray-900">
|
||||
{$_("spendensumme")}
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{:else if current_page === "runners_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1 class="mr-6 text-7xl font-semibold text-center text-gray-900 mb-5">
|
||||
{$_("top-laeufer")} ({$_("distanz")})
|
||||
</h1>
|
||||
<table class="table p-4 bg-white shadow rounded-lg w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("laeufer")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organisation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each runners as r, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.firstname}
|
||||
{r.lastname}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.group.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.distance / 1000} km
|
||||
</td>
|
||||
{:else if current_page === "runners_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1
|
||||
class="mr-6 text-5xl xl:text-7xl font-bold text-center text-gray-900 mb-3"
|
||||
>
|
||||
{$_("top-laeufer")} ({$_("distanz")})
|
||||
</h1>
|
||||
{#if runners.length === 0}
|
||||
<p class="w-full text-center text-3xl font-semibold">
|
||||
Noch keine Daten...
|
||||
</p>
|
||||
{:else}
|
||||
<table
|
||||
class="table font-semibold p-4 bg-white shadow rounded-lg w-full"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("laeufer")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organisation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each runners as r, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.firstname}
|
||||
{r.lastname}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.group.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.distance / 1000} km
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
{:else if current_page === "runners_laptime"}
|
||||
<div transition:slide|local>
|
||||
<h1
|
||||
class="mr-6 text-5xl xl:text-7xl font-bold text-center text-gray-900 mb-3"
|
||||
>
|
||||
{$_("top-laeufer")} ({$_("rundenzeit")})
|
||||
</h1>
|
||||
{#if runners_by_laptime.length === 0}
|
||||
<p class="w-full text-center text-3xl font-semibold">
|
||||
Noch keine Daten...
|
||||
</p>
|
||||
{:else}
|
||||
<table
|
||||
class="table font-semibold p-4 bg-white shadow rounded-lg w-full"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("laeufer")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organisation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("schnellste-rundenzeit")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each runners_by_laptime as r, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.firstname}
|
||||
{r.lastname}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.group.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{format_laptime(r.minLaptime)}
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
{/if}
|
||||
</div>
|
||||
{:else if current_page === "orgs_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1
|
||||
class="mr-6 text-5xl xl:text-7xl font-bold text-center text-gray-900 mb-3"
|
||||
>
|
||||
{$_("top-organisationen")}
|
||||
</h1>
|
||||
<table
|
||||
class="table font-semibold p-4 bg-white shadow rounded-lg w-full"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organsiation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else if current_page === "runners_laptime"}
|
||||
<div transition:slide|local>
|
||||
<h1 class="mr-6 text-7xl font-semibold text-center text-gray-900 mb-5">
|
||||
{$_("top-laeufer")} ({$_("rundenzeit")})
|
||||
</h1>
|
||||
<table class="table p-4 bg-white shadow rounded-lg w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("laeufer")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organisation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("schnellste-rundenzeit")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each runners_by_laptime as r, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.firstname}
|
||||
{r.lastname}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{r.group.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{format_laptime(r.minLaptime)}
|
||||
</td>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each orgs as o, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{o.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{o.distance / 1000} km
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else if current_page === "teams_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1
|
||||
class="mr-6 text-5xl xl:text-7xl font-bold text-center text-gray-900 mb-3"
|
||||
>
|
||||
{$_("top-teams")}
|
||||
</h1>
|
||||
<table
|
||||
class="table font-semibold p-4 bg-white shadow rounded-lg w-full"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("team")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else if current_page === "orgs_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1 class="mr-6 text-7xl font-semibold text-center text-gray-900 mb-5">
|
||||
{$_("top-organsiationen")}
|
||||
</h1>
|
||||
<table class="table p-4 bg-white shadow rounded-lg w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("organsiation")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each orgs as o, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{o.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{o.distance / 1000} km
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else if current_page === "teams_distance"}
|
||||
<div transition:slide|local>
|
||||
<h1 class="mr-6 text-7xl font-semibold text-center text-gray-900 mb-5">
|
||||
{$_("top-teams")}
|
||||
</h1>
|
||||
<table class="table p-4 bg-white shadow rounded-lg w-full">
|
||||
<thead>
|
||||
<tr>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("platz")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("team")}
|
||||
</th>
|
||||
<th
|
||||
class="border p-4 dark:border-dark-5 whitespace-nowrap font-normal text-gray-900"
|
||||
>
|
||||
{$_("kilometer")}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each teams as t, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{t.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{t.distance / 1000} km
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else}
|
||||
<!-- content here -->
|
||||
{/if}
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each teams as t, i}
|
||||
<tr class="text-gray-700">
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{i + 1}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{t.name}
|
||||
</td>
|
||||
<td class="border p-4 dark:border-dark-5">
|
||||
{t.distance / 1000} km
|
||||
</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{:else}
|
||||
<!-- content here -->
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<h1
|
||||
class="text-6xl font-semibold text-right text-gray-900 font-mono top-2 w-full fixed pr-4 xl:top-6 xl:pr-8"
|
||||
>
|
||||
{hours}:{minutes}:{seconds}
|
||||
</h1>
|
||||
<h1
|
||||
class="text-xl xl:text-3xl font-medium text-center text-gray-900 font-mono bottom-2 xl:bottom-4 w-full fixed"
|
||||
>
|
||||
<span class="text-black font-extrabold">LfK!2023 </span>powered by
|
||||
ODIT.Services
|
||||
</h1>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { apikey, lang, api_endpoint, laptime_track } from "./store.js";
|
||||
import { apikey, lang, api_endpoint, laptime_track, clear } from "./store.js";
|
||||
import isURL from "validator/lib/isURL";
|
||||
import isUUID from "validator/lib/isUUID";
|
||||
import axios from "axios";
|
||||
|
@ -10,10 +10,12 @@
|
|||
$: error = false;
|
||||
$: errormessage = "";
|
||||
$: isTokenValid =
|
||||
token?.length === 44 &&
|
||||
token.split(".")[0].length === 7 &&
|
||||
isUUID(token.split(".")[1]);
|
||||
$: isEndpointValid = isURL(api_endpoint_input);
|
||||
token === "rst" ||
|
||||
(token?.length === 44 &&
|
||||
token.split(".")[0].length === 7 &&
|
||||
isUUID(token.split(".")[1]));
|
||||
$: isEndpointValid =
|
||||
api_endpoint_input === "rst" || isURL(api_endpoint_input);
|
||||
</script>
|
||||
|
||||
<div class="w-full flex flex-wrap">
|
||||
|
@ -62,11 +64,15 @@
|
|||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
{#if $api_endpoint && !$apikey}
|
||||
{#if $api_endpoint?.includes("://") && (!$apikey || $apikey == null)}
|
||||
<form
|
||||
class="flex flex-col pt-3 md:pt-8"
|
||||
onsubmit="event.preventDefault();"
|
||||
on:submit={() => {
|
||||
if (token === "rst") {
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
axios
|
||||
.request({
|
||||
method: "GET",
|
||||
|
@ -112,42 +118,19 @@
|
|||
>{$_("configure")}</button
|
||||
>
|
||||
</form>
|
||||
{:else if $api_endpoint && $apikey}
|
||||
<form
|
||||
class="flex flex-col pt-3 md:pt-8"
|
||||
onsubmit="event.preventDefault();"
|
||||
on:submit={() => {
|
||||
laptime_track.set(track);
|
||||
}}
|
||||
>
|
||||
<div class="flex flex-col pt-4">
|
||||
<label for="track" class="text-lg">{$_("track_id")}</label>
|
||||
<input
|
||||
type="number"
|
||||
id="track"
|
||||
placeholder="Track"
|
||||
bind:value={track}
|
||||
class:border-red-500={!isTokenValid}
|
||||
class:border-solid={!isTokenValid}
|
||||
class:border-3={!isTokenValid}
|
||||
class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mt-1 leading-tight focus:outline-none focus:shadow-outline"
|
||||
/>
|
||||
</div>
|
||||
<button
|
||||
disabled={!track}
|
||||
class:cursor-pointer={track}
|
||||
class:opacity-50={!track}
|
||||
id="configure"
|
||||
type="submit"
|
||||
class="bg-black text-white font-bold text-lg hover:bg-gray-700 p-2 mt-8 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black"
|
||||
>{$_("configure")}</button
|
||||
>
|
||||
</form>
|
||||
{:else}
|
||||
<form
|
||||
class="flex flex-col pt-3 md:pt-8"
|
||||
onsubmit="event.preventDefault();"
|
||||
on:submit={() => {
|
||||
if (api_endpoint_input === "rst") {
|
||||
clear();
|
||||
api_endpoint_input = "";
|
||||
return;
|
||||
}
|
||||
if (api_endpoint_input.includes("api/")) {
|
||||
api_endpoint_input = api_endpoint_input.replace("api/", "");
|
||||
}
|
||||
if (api_endpoint_input.substr(-1) !== "/") {
|
||||
api_endpoint_input = api_endpoint_input + "/";
|
||||
}
|
||||
|
|
|
@ -13,14 +13,13 @@
|
|||
<p class="block text-sm text-gray-700">{$api_endpoint}</p>
|
||||
<p class="block text-sm font-bold text-gray-700 mt-2">{$_("api_key")}</p>
|
||||
<p class="block text-sm text-gray-700">{$apikey}</p>
|
||||
<p class="block text-sm font-bold text-gray-700 mt-2">{$_("track_id")}</p>
|
||||
<p class="block text-sm text-gray-700">{$laptime_track}</p>
|
||||
<p class="block text-sm font-bold text-gray-700 mt-2">{$_("language")}</p>
|
||||
<div class="w-full">
|
||||
<div class="inline-block mr-2 mt-2">
|
||||
<button
|
||||
on:click={() => {
|
||||
lang.set("de-DE");
|
||||
location.reload();
|
||||
}}
|
||||
type="button"
|
||||
class:bg-blue-700={$lang === "de-DE"}
|
||||
|
@ -46,6 +45,7 @@
|
|||
<button
|
||||
on:click={() => {
|
||||
lang.set("en-EN");
|
||||
location.reload();
|
||||
}}
|
||||
type="button"
|
||||
class:bg-blue-700={$lang === "en-EN"}
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
"the_provided_scan_station_is_disabled": "Die angegebene Scanstation ist deaktiviert.",
|
||||
"the_provided_scan_station_token_is_invalid": "Der angegebene Scanstation-Token ist ungültig.",
|
||||
"top-laeufer": "Top-Läufer",
|
||||
"top-organsiationen": "Top-Organsiationen",
|
||||
"top-organisationen": "Top-Organisationen",
|
||||
"top-teams": "Top-Teams",
|
||||
"track_distance": "Länge des Tracks",
|
||||
"track_id": "Track ID",
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
"the_provided_scan_station_is_disabled": "The provided scan station is disabled.",
|
||||
"the_provided_scan_station_token_is_invalid": "The provided scan station token is invalid.",
|
||||
"top-laeufer": "Top runners",
|
||||
"top-organsiationen": "Top organizations",
|
||||
"top-organisationen": "Top organizations",
|
||||
"top-teams": "Top teams",
|
||||
"track_distance": "Track Distance",
|
||||
"track_id": "Track ID",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import App from './App.svelte';
|
||||
import 'windi.css';
|
||||
import "@fontsource/athiti"
|
||||
|
||||
const app = new App({
|
||||
target: document.body
|
||||
|
|
22
src/store.js
22
src/store.js
|
@ -1,29 +1,39 @@
|
|||
import { writable } from 'svelte/store';
|
||||
|
||||
const stored_api_endpoint = localStorage.getItem('api_endpoint')||"";
|
||||
const stored_api_endpoint = localStorage.getItem('api_endpoint');
|
||||
export const api_endpoint = writable(stored_api_endpoint);
|
||||
api_endpoint.subscribe((value) => {
|
||||
localStorage.setItem('api_endpoint', value);
|
||||
if (value != null) {
|
||||
localStorage.setItem('api_endpoint', value);
|
||||
}
|
||||
});
|
||||
const stored_apikey = localStorage.getItem('apikey');
|
||||
export const apikey = writable(stored_apikey);
|
||||
apikey.subscribe((value) => {
|
||||
localStorage.setItem('apikey', value);
|
||||
if (value != null) {
|
||||
localStorage.setItem('apikey', value);
|
||||
}
|
||||
});
|
||||
const stored_laptime_track = localStorage.getItem('laptime_track');
|
||||
export const laptime_track = writable(stored_laptime_track);
|
||||
laptime_track.subscribe((value) => {
|
||||
localStorage.setItem('laptime_track', value);
|
||||
if (value != null) {
|
||||
localStorage.setItem('laptime_track', value);
|
||||
}
|
||||
});
|
||||
const stored_lang = localStorage.getItem('lang') === 'null' ? navigator.language : localStorage.getItem('lang');
|
||||
export const lang = writable(stored_lang);
|
||||
lang.subscribe((value) => {
|
||||
localStorage.setItem('lang', value);
|
||||
if (value != null) {
|
||||
localStorage.setItem('lang', value);
|
||||
}
|
||||
});
|
||||
|
||||
export function clear(){
|
||||
export function clear() {
|
||||
api_endpoint.set(null)
|
||||
api_endpoint.set("")
|
||||
apikey.set(null);
|
||||
apikey.set("");
|
||||
laptime_track.set(null)
|
||||
localStorage.clear();
|
||||
}
|
Loading…
Reference in New Issue