Compare commits
	
		
			58 Commits
		
	
	
		
			fdabe4b79c
			...
			1.0.3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						85e7b7c231
	
				 | 
					
					
						|||
| 
						
						
							
						
						d5f685a826
	
				 | 
					
					
						|||
| 
						
						
							
						
						88449174a1
	
				 | 
					
					
						|||
| 
						
						
							
						
						d30be90102
	
				 | 
					
					
						|||
| 
						
						
							
						
						7e3570e923
	
				 | 
					
					
						|||
| 
						
						
							
						
						3ac0a3c142
	
				 | 
					
					
						|||
| 
						
						
							
						
						dc588e83c0
	
				 | 
					
					
						|||
| 
						
						
							
						
						5d764a80a7
	
				 | 
					
					
						|||
| 
						
						
							
						
						0f32c71ef0
	
				 | 
					
					
						|||
| 
						
						
							
						
						4b1a1a324b
	
				 | 
					
					
						|||
| 
						
						
							
						
						569296928e
	
				 | 
					
					
						|||
| 
						
						
							
						
						c33157e2d4
	
				 | 
					
					
						|||
| 
						
						
							
						
						ee9799736f
	
				 | 
					
					
						|||
| 
						
						
							
						
						8d38e81b78
	
				 | 
					
					
						|||
| 
						
						
							
						
						7005ec6a28
	
				 | 
					
					
						|||
| 
						
						
							
						
						38b0fccb5a
	
				 | 
					
					
						|||
| 
						
						
							
						
						8a4974ffa9
	
				 | 
					
					
						|||
| 
						
						
							
						
						9b83b38356
	
				 | 
					
					
						|||
| 
						
						
							
						
						047941babb
	
				 | 
					
					
						|||
| 
						
						
							
						
						f909575ca5
	
				 | 
					
					
						|||
| 
						
						
							
						
						70a6120447
	
				 | 
					
					
						|||
| 
						
						
							
						
						b483ed1e49
	
				 | 
					
					
						|||
| 
						
						
							
						
						2ce93b45c7
	
				 | 
					
					
						|||
| 
						
						
							
						
						8139a3f60b
	
				 | 
					
					
						|||
| 
						
						
							
						
						431fc5a047
	
				 | 
					
					
						|||
| 
						
						
							
						
						b287db4d0a
	
				 | 
					
					
						|||
| 
						
						
							
						
						b3ce711e6b
	
				 | 
					
					
						|||
| 
						
						
							
						
						456c0635a4
	
				 | 
					
					
						|||
| 
						
						
							
						
						b50398f6eb
	
				 | 
					
					
						|||
| 
						
						
							
						
						e04e6713bc
	
				 | 
					
					
						|||
| 
						
						
							
						
						de373390ba
	
				 | 
					
					
						|||
| 
						
						
							
						
						5be665b65f
	
				 | 
					
					
						|||
| 
						
						
							
						
						324612b5dd
	
				 | 
					
					
						|||
| 
						
						
							
						
						ca1c96b252
	
				 | 
					
					
						|||
| 
						
						
							
						
						d284e8184c
	
				 | 
					
					
						|||
| 
						
						
							
						
						701aae9ed4
	
				 | 
					
					
						|||
| 
						
						
							
						
						7f7b743f41
	
				 | 
					
					
						|||
| 
						
						
							
						
						ee6af3e069
	
				 | 
					
					
						|||
| 
						
						
							
						
						ea08127927
	
				 | 
					
					
						|||
| 
						
						
							
						
						e0f400a800
	
				 | 
					
					
						|||
| 
						
						
							
						
						c485898b7d
	
				 | 
					
					
						|||
| 80f5c38c36 | |||
| 205e09e2fc | |||
| 9125dec45b | |||
| 94ceca9454 | |||
| 2119e9b231 | |||
| cfd64c2f19 | |||
| a7e84c7d42 | |||
| 70bfbfcd53 | |||
| c5e4facffa | |||
| b36764869b | |||
| de7e96cd01 | |||
| d5ce648a53 | |||
| fca7a99689 | |||
| cb559da57c | |||
| abdc510305 | |||
| fe0cba9058 | |||
| 64ce42d8a0 | 
							
								
								
									
										45
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								.drone.yml
									
									
									
									
									
								
							@@ -12,6 +12,13 @@ get:
 | 
			
		||||
  path: odit-registry-builder
 | 
			
		||||
  name: password
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: secret
 | 
			
		||||
name: npm_url
 | 
			
		||||
get:
 | 
			
		||||
  path: odit-npm-cache
 | 
			
		||||
  name: url
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
type: kubernetes
 | 
			
		||||
@@ -26,7 +33,10 @@ steps:
 | 
			
		||||
        from_secret: docker_username
 | 
			
		||||
      password:
 | 
			
		||||
        from_secret: docker_password
 | 
			
		||||
      repo: registry.odit.services/lfk/selfservice
 | 
			
		||||
      build_args:
 | 
			
		||||
        - NPM_REGISTRY_URL:
 | 
			
		||||
          from_secret: npm_url
 | 
			
		||||
      repo: registry.odit.services/lfk/beamershow
 | 
			
		||||
      tags:
 | 
			
		||||
        - dev
 | 
			
		||||
      registry: registry.odit.services
 | 
			
		||||
@@ -37,6 +47,34 @@ trigger:
 | 
			
		||||
  event:
 | 
			
		||||
    - push
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
type: kubernetes
 | 
			
		||||
name: build:latest
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
  - name: build latest
 | 
			
		||||
    image: plugins/docker
 | 
			
		||||
    depends_on: [clone]
 | 
			
		||||
    settings:
 | 
			
		||||
      username:
 | 
			
		||||
        from_secret: docker_username
 | 
			
		||||
      password:
 | 
			
		||||
        from_secret: docker_password
 | 
			
		||||
      build_args:
 | 
			
		||||
        - NPM_REGISTRY_URL:
 | 
			
		||||
          from_secret: npm_url
 | 
			
		||||
      repo: registry.odit.services/lfk/beamershow
 | 
			
		||||
      tags:
 | 
			
		||||
        - latest
 | 
			
		||||
      registry: registry.odit.services
 | 
			
		||||
      mtu: 1000
 | 
			
		||||
trigger:
 | 
			
		||||
  branch:
 | 
			
		||||
    - main
 | 
			
		||||
  event:
 | 
			
		||||
    - push
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
type: kubernetes
 | 
			
		||||
@@ -50,7 +88,10 @@ steps:
 | 
			
		||||
        from_secret: docker_username
 | 
			
		||||
      password:
 | 
			
		||||
        from_secret: docker_password
 | 
			
		||||
      repo: registry.odit.services/lfk/selfservice
 | 
			
		||||
      build_args:
 | 
			
		||||
        - NPM_REGISTRY_URL:
 | 
			
		||||
          from_secret: npm_url
 | 
			
		||||
      repo: registry.odit.services/lfk/beamershow
 | 
			
		||||
      tags:
 | 
			
		||||
        - '${DRONE_TAG}'
 | 
			
		||||
      registry: registry.odit.services
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "i18n-ally.localesPaths": "src/locales",
 | 
			
		||||
    "i18n-ally.keystyle": "nested"
 | 
			
		||||
    "i18n-ally.keystyle": "nested",
 | 
			
		||||
    "i18n-ally.sourceLanguage": "de"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										122
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
### Changelog
 | 
			
		||||
 | 
			
		||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
 | 
			
		||||
 | 
			
		||||
#### [1.0.3](https://git.odit.services/lfk/beamershow/compare/1.0.2...1.0.3)
 | 
			
		||||
 | 
			
		||||
- 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								package.json
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "@lfk/beamershow",
 | 
			
		||||
	"version": "0.0.0",
 | 
			
		||||
	"version": "1.0.3",
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"dev": "vite",
 | 
			
		||||
		"build": "vite build",
 | 
			
		||||
@@ -10,39 +10,42 @@
 | 
			
		||||
		"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",
 | 
			
		||||
		"@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",
 | 
			
		||||
		"validator": "13.5.2",
 | 
			
		||||
		"vite": "2.1.4",
 | 
			
		||||
		"vite-plugin-windicss": "0.11.2"
 | 
			
		||||
		"vite-plugin-windicss": "1.8.10"
 | 
			
		||||
	},
 | 
			
		||||
	"release-it": {
 | 
			
		||||
		"git": {
 | 
			
		||||
			"commit": true,
 | 
			
		||||
			"requireCleanWorkingDir": false,
 | 
			
		||||
			"commitMessage": "🚀Bumped version to v${version}",
 | 
			
		||||
			"requireBranch": "dev",
 | 
			
		||||
			"push": false,
 | 
			
		||||
			"commitMessage": "🚀Bumped version to ${version}",
 | 
			
		||||
			"requireBranch": "main",
 | 
			
		||||
			"push": true,
 | 
			
		||||
			"tag": true,
 | 
			
		||||
			"tagName": null,
 | 
			
		||||
			"tagAnnotation": "v${version}"
 | 
			
		||||
			"tagAnnotation": "${version}"
 | 
			
		||||
		},
 | 
			
		||||
		"npm": {
 | 
			
		||||
			"publish": false
 | 
			
		||||
		},
 | 
			
		||||
		"hooks": {
 | 
			
		||||
			"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order_i18n.js  && git add src/locales"
 | 
			
		||||
			"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"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2608
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2608
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import { apikey, api_endpoint, lang, page, clear } from "./store.js";
 | 
			
		||||
  import { apikey, api_endpoint, lang, clear, laptime_track } from "./store.js";
 | 
			
		||||
  import { addMessages, init } from "svelte-i18n";
 | 
			
		||||
  import en from "./locales/en.json";
 | 
			
		||||
  import de from "./locales/de.json";
 | 
			
		||||
@@ -11,8 +11,11 @@
 | 
			
		||||
  import Beamershow from "./Beamershow.svelte";
 | 
			
		||||
  import Login from "./Login.svelte";
 | 
			
		||||
  import Settings from "./Settings.svelte";
 | 
			
		||||
  $: is_configured = $apikey && $apikey !== "null" && $apikey !== "";
 | 
			
		||||
  $: settings_open = $page === "settings";
 | 
			
		||||
  export let settings_open = false;
 | 
			
		||||
  $: is_configured = $apikey?.length === 44 && $api_endpoint?.includes("://");
 | 
			
		||||
  // &&
 | 
			
		||||
  // $laptime_track != 0 &&
 | 
			
		||||
  // $laptime_track != null;
 | 
			
		||||
  init({
 | 
			
		||||
    fallbackLocale: "en-US",
 | 
			
		||||
    initialLocale: $lang,
 | 
			
		||||
@@ -24,20 +27,18 @@
 | 
			
		||||
      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") {
 | 
			
		||||
        command += "n";
 | 
			
		||||
      } else if (command === "cn" && e.key === "f") {
 | 
			
		||||
        clear();
 | 
			
		||||
        settings_open = true;
 | 
			
		||||
        is_configured = true;
 | 
			
		||||
        command = "";
 | 
			
		||||
      } else {
 | 
			
		||||
        command = "";
 | 
			
		||||
@@ -48,7 +49,7 @@
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if settings_open && is_configured}
 | 
			
		||||
  <Settings />
 | 
			
		||||
  <Settings bind:settings_open />
 | 
			
		||||
{:else if is_configured}
 | 
			
		||||
  <Beamershow />
 | 
			
		||||
{:else}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,18 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import axios from "axios";
 | 
			
		||||
  import bg from "../public/beamershow_background.png?import";
 | 
			
		||||
  import { _ } from "svelte-i18n";
 | 
			
		||||
  import { fade, slide } from "svelte/transition";
 | 
			
		||||
  import { apikey, api_endpoint, page, stationinfo } from "./store.js";
 | 
			
		||||
  import { slide } from "svelte/transition";
 | 
			
		||||
  import { apikey, api_endpoint, laptime_track } from "./store.js";
 | 
			
		||||
  function init(el) {
 | 
			
		||||
    el.focus();
 | 
			
		||||
  }
 | 
			
		||||
  $: pages = [
 | 
			
		||||
    "general",
 | 
			
		||||
    "runners_distance",
 | 
			
		||||
    "runners_laptime",
 | 
			
		||||
    // "runners_laptime",
 | 
			
		||||
    "orgs_distance",
 | 
			
		||||
    "teams_distance",
 | 
			
		||||
    // "teams_distance",
 | 
			
		||||
  ];
 | 
			
		||||
  $: current_page = "general";
 | 
			
		||||
  $: general = {};
 | 
			
		||||
@@ -73,7 +74,8 @@
 | 
			
		||||
    axios
 | 
			
		||||
      .request({
 | 
			
		||||
        method: "GET",
 | 
			
		||||
        url: $api_endpoint + "api/stats/runners/laptime",
 | 
			
		||||
        url:
 | 
			
		||||
          $api_endpoint + "api/stats/runners/laptime?track=" + $laptime_track,
 | 
			
		||||
        headers: { Authorization: "Bearer " + $apikey },
 | 
			
		||||
      })
 | 
			
		||||
      .then(function ({ data }) {
 | 
			
		||||
@@ -119,7 +121,7 @@
 | 
			
		||||
  function fetch_all() {
 | 
			
		||||
    stats_general();
 | 
			
		||||
    stats_runners();
 | 
			
		||||
    stats_runners_by_laptime();
 | 
			
		||||
    // stats_runners_by_laptime();
 | 
			
		||||
    stats_orgs();
 | 
			
		||||
    stats_teams();
 | 
			
		||||
  }
 | 
			
		||||
@@ -129,7 +131,7 @@
 | 
			
		||||
  }, 1000);
 | 
			
		||||
  setInterval(() => {
 | 
			
		||||
    fetch_all();
 | 
			
		||||
  }, 15000);
 | 
			
		||||
  }, 50000);
 | 
			
		||||
  setInterval(() => {
 | 
			
		||||
    current_page = pages.cycle(current_page);
 | 
			
		||||
  }, 20000);
 | 
			
		||||
@@ -137,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">
 | 
			
		||||
              Läufer
 | 
			
		||||
            </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 || "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-Läufer (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"
 | 
			
		||||
              >
 | 
			
		||||
                Läufer
 | 
			
		||||
              </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-Läufer (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"
 | 
			
		||||
              >
 | 
			
		||||
                Läufer
 | 
			
		||||
              </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,18 +1,21 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import { apikey, lang, stationinfo, api_endpoint } 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";
 | 
			
		||||
  import { _, locale } from "svelte-i18n";
 | 
			
		||||
  let token;
 | 
			
		||||
  let api_endpoint_input;
 | 
			
		||||
  let api_endpoint_input = "";
 | 
			
		||||
  let track;
 | 
			
		||||
  $: 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">
 | 
			
		||||
@@ -61,13 +64,15 @@
 | 
			
		||||
          </div>
 | 
			
		||||
        {/if}
 | 
			
		||||
      {/if}
 | 
			
		||||
      {#if $api_endpoint}
 | 
			
		||||
      {#if $api_endpoint?.includes("://") && (!$apikey || $apikey == null)}
 | 
			
		||||
        <form
 | 
			
		||||
          class="flex flex-col pt-3 md:pt-8"
 | 
			
		||||
          onsubmit="event.preventDefault();"
 | 
			
		||||
          on:submit={() => {
 | 
			
		||||
            console.log({ token });
 | 
			
		||||
            // return
 | 
			
		||||
            if (token === "rst") {
 | 
			
		||||
              clear();
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
            axios
 | 
			
		||||
              .request({
 | 
			
		||||
                method: "GET",
 | 
			
		||||
@@ -78,7 +83,6 @@
 | 
			
		||||
                error = false;
 | 
			
		||||
                errormessage = "";
 | 
			
		||||
                apikey.set(token);
 | 
			
		||||
                stationinfo.set(JSON.stringify(response.data));
 | 
			
		||||
              })
 | 
			
		||||
              .catch(function (e) {
 | 
			
		||||
                error = true;
 | 
			
		||||
@@ -119,6 +123,14 @@
 | 
			
		||||
          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 + "/";
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import { _ } from "svelte-i18n";
 | 
			
		||||
 | 
			
		||||
  import { apikey, api_endpoint, lang, page, stationinfo } from "./store.js";
 | 
			
		||||
  import { apikey, api_endpoint, lang, laptime_track, clear } from "./store.js";
 | 
			
		||||
  export let settings_open = false;
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<div class="p-5 min-h-screen">
 | 
			
		||||
@@ -9,40 +9,17 @@
 | 
			
		||||
    Lauf Für Kaya! Beamershow
 | 
			
		||||
  </h1>
 | 
			
		||||
  <h1 class="text-3xl w-full text-center text-gray-900">{$_("settings")}</h1>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">{$_("api_endpoint")}</p>
 | 
			
		||||
  <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">
 | 
			
		||||
    {$_("station_description")}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">
 | 
			
		||||
    {JSON.parse($stationinfo).description}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">{$_("station_id")}</p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">{JSON.parse($stationinfo).id}</p>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">{$_("track_id")}</p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">{JSON.parse($stationinfo).track.id}</p>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">{$_("track_name")}</p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">
 | 
			
		||||
    {JSON.parse($stationinfo).track.name}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">
 | 
			
		||||
    {$_("track_distance")}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">
 | 
			
		||||
    {JSON.parse($stationinfo).track.distance}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm font-bold text-gray-700 mt-2">
 | 
			
		||||
    {$_("minimum_lap_time")}
 | 
			
		||||
  </p>
 | 
			
		||||
  <p class="block text-sm text-gray-700">
 | 
			
		||||
    {JSON.parse($stationinfo).track.minimumLapTime}s
 | 
			
		||||
  </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"}
 | 
			
		||||
@@ -68,6 +45,7 @@
 | 
			
		||||
      <button
 | 
			
		||||
        on:click={() => {
 | 
			
		||||
          lang.set("en-EN");
 | 
			
		||||
          location.reload();
 | 
			
		||||
        }}
 | 
			
		||||
        type="button"
 | 
			
		||||
        class:bg-blue-700={$lang === "en-EN"}
 | 
			
		||||
@@ -95,16 +73,15 @@
 | 
			
		||||
  <br />
 | 
			
		||||
  <button
 | 
			
		||||
    on:click={() => {
 | 
			
		||||
      page.set("");
 | 
			
		||||
      settings_open = false;
 | 
			
		||||
    }}
 | 
			
		||||
    class="mb-3 w-full py-3 border-black border-3 text-black focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black"
 | 
			
		||||
    >{$_("back_to_scanner")}</button
 | 
			
		||||
  >
 | 
			
		||||
  <button
 | 
			
		||||
    on:click={() => {
 | 
			
		||||
      apikey.set("");
 | 
			
		||||
      api_endpoint.set("");
 | 
			
		||||
      page.set("");
 | 
			
		||||
      clear();
 | 
			
		||||
      settings_open = false;
 | 
			
		||||
    }}
 | 
			
		||||
    class="w-full py-3 bg-black text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black"
 | 
			
		||||
    >{$_("log_out_from_this_client")}</button
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "api_endpoint": "API-Endpunkt",
 | 
			
		||||
    "api_key": "API Key",
 | 
			
		||||
    "back_to_scanner": "Zurück zum Scanner",
 | 
			
		||||
    "back_to_scanner": "Zurück zur Beamershow",
 | 
			
		||||
    "client_token": "Client Token",
 | 
			
		||||
    "configuration": "Konfiguration",
 | 
			
		||||
    "configure": "Konfigurieren",
 | 
			
		||||
    "distanz": "Distanz",
 | 
			
		||||
    "error": "Error!",
 | 
			
		||||
    "kilometer": "Kilometer",
 | 
			
		||||
    "kilometer-gesamt": "Kilometer gesamt",
 | 
			
		||||
    "laeufer": "Läufer",
 | 
			
		||||
    "language": "Sprache",
 | 
			
		||||
    "log_out_from_this_client": "Von diesem Scanner abmelden",
 | 
			
		||||
    "log_out_from_this_client": "Von dieser Beamershow abmelden",
 | 
			
		||||
    "minimum_lap_time": "minimale Rundenzeit",
 | 
			
		||||
    "organisation": "Organisation",
 | 
			
		||||
    "organsiation": "Organsiation",
 | 
			
		||||
    "platz": "Platz",
 | 
			
		||||
    "please_check_your_token_and_try_again": "Bitte überprüfe den Token und versuche es erneut...",
 | 
			
		||||
    "please_provide_a_valid_client_api_endpoint": "Bitte gebe einen gültigen API-Endpunkt an ...",
 | 
			
		||||
    "please_provide_a_valid_client_token": "Bitte gebe einen gültigen Client-Token an ...",
 | 
			
		||||
    "please_provide_the_scan_client_token": "Bitte gebe den Beamershow-Client-Token an.",
 | 
			
		||||
    "please_scan_a_card": "Bitte scanne eine Karte ...",
 | 
			
		||||
    "rundenzeit": "Rundenzeit",
 | 
			
		||||
    "runner_card": "Läuferkarte",
 | 
			
		||||
    "scan": "Scannen!",
 | 
			
		||||
    "schnellste-rundenzeit": "Schnellste Rundenzeit",
 | 
			
		||||
    "see_our_configuration_guide": "Siehe dir unsere Konfigurationsanleitung an.",
 | 
			
		||||
    "settings": "Einstellungen",
 | 
			
		||||
    "spendensumme": "Spendensumme",
 | 
			
		||||
    "station_description": "Beschreibung der Scanstation",
 | 
			
		||||
    "station_id": "Scanstations-ID",
 | 
			
		||||
    "team": "Team",
 | 
			
		||||
    "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-organisationen": "Top-Organisationen",
 | 
			
		||||
    "top-teams": "Top-Teams",
 | 
			
		||||
    "track_distance": "Länge des Tracks",
 | 
			
		||||
    "track_id": "Track ID",
 | 
			
		||||
    "track_name": "Track Name"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "api_endpoint": "API Endpoint",
 | 
			
		||||
    "api_key": "API Key",
 | 
			
		||||
    "back_to_scanner": "Back to Scanner",
 | 
			
		||||
    "back_to_scanner": "Back to Beamershow",
 | 
			
		||||
    "client_token": "Client Token",
 | 
			
		||||
    "configuration": "Configuration",
 | 
			
		||||
    "configure": "Configure",
 | 
			
		||||
    "distanz": "distance",
 | 
			
		||||
    "error": "Error!",
 | 
			
		||||
    "kilometer": "Kilometers",
 | 
			
		||||
    "kilometer-gesamt": "Kilometers total",
 | 
			
		||||
    "laeufer": "Runners",
 | 
			
		||||
    "language": "Language",
 | 
			
		||||
    "log_out_from_this_client": "Log Out from this Client",
 | 
			
		||||
    "minimum_lap_time": "minimum lap time",
 | 
			
		||||
    "organisation": "Organization",
 | 
			
		||||
    "organsiation": "Organization",
 | 
			
		||||
    "platz": "Place",
 | 
			
		||||
    "please_check_your_token_and_try_again": "Please check your token and try again...",
 | 
			
		||||
    "please_provide_a_valid_client_api_endpoint": "Please provide a valid api endpoint...",
 | 
			
		||||
    "please_provide_a_valid_client_token": "Please provide a valid client token...",
 | 
			
		||||
    "please_provide_the_scan_client_token": "Please provide the scan client token.",
 | 
			
		||||
    "please_scan_a_card": "please scan a card...",
 | 
			
		||||
    "rundenzeit": "fastetst lap",
 | 
			
		||||
    "runner_card": "Runner Card",
 | 
			
		||||
    "scan": "Scan!",
 | 
			
		||||
    "schnellste-rundenzeit": "Fastest lap",
 | 
			
		||||
    "see_our_configuration_guide": "See our configuration guide.",
 | 
			
		||||
    "settings": "Settings",
 | 
			
		||||
    "spendensumme": "Donations",
 | 
			
		||||
    "station_description": "Station Description",
 | 
			
		||||
    "station_id": "Scanstation ID",
 | 
			
		||||
    "team": "Team",
 | 
			
		||||
    "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-organisationen": "Top organizations",
 | 
			
		||||
    "top-teams": "Top teams",
 | 
			
		||||
    "track_distance": "Track Distance",
 | 
			
		||||
    "track_id": "Track ID",
 | 
			
		||||
    "track_name": "Track Name"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
import App from './App.svelte';
 | 
			
		||||
import 'windi.css';
 | 
			
		||||
import "@fontsource/athiti"
 | 
			
		||||
 | 
			
		||||
const app = new App({
 | 
			
		||||
	target: document.body
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								src/store.js
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								src/store.js
									
									
									
									
									
								
							@@ -1,33 +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_stationinfo = localStorage.getItem('stationinfo');
 | 
			
		||||
export const stationinfo = writable(stored_stationinfo);
 | 
			
		||||
stationinfo.subscribe((value) => {
 | 
			
		||||
	localStorage.setItem('stationinfo', value);
 | 
			
		||||
});
 | 
			
		||||
const stored_page = localStorage.getItem('page');
 | 
			
		||||
export const page = writable(stored_page);
 | 
			
		||||
page.subscribe((value) => {
 | 
			
		||||
	localStorage.setItem('page', value);
 | 
			
		||||
const stored_laptime_track = localStorage.getItem('laptime_track');
 | 
			
		||||
export const laptime_track = writable(stored_laptime_track);
 | 
			
		||||
laptime_track.subscribe((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();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user