Compare commits
88
Commits
0.9.0
...
fa55fce76e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa55fce76e | ||
|
|
f47d5e347d | ||
|
|
7488a8b597 | ||
|
|
2e3ac154be | ||
|
|
2472640755 | ||
|
|
7b685d6cad | ||
|
|
17f6f4e616 | ||
|
|
48cfc15cfb | ||
|
|
bb9b779cee | ||
|
|
af63ce67ae | ||
|
|
5cc4871ec4 | ||
|
|
c8cfe669b8 | ||
|
|
8b74d6d759 | ||
|
|
a9227768de | ||
|
|
d966e1d4de | ||
|
|
ceb2146c1b | ||
|
|
8d006d8c74 | ||
|
|
777304f259 | ||
|
|
12433f7c23 | ||
|
|
44b53da345 | ||
|
|
ab45fc144e | ||
|
|
e99e9e0708 | ||
|
|
467404bfc8 | ||
|
|
ce50fa2a62 | ||
|
|
10a011d842 | ||
|
|
5352410d0c | ||
|
|
c5d155396a | ||
|
|
93187099d3 | ||
|
|
aa24b1dce5 | ||
|
|
eb3ede9593 | ||
|
|
d7fecfbd0b | ||
|
|
b065b4ff21 | ||
|
|
87370d24be | ||
|
|
8f8b9988ad | ||
|
|
f8ccf4f5d8 | ||
|
|
25d8b86efd | ||
|
|
0cd3e937d8 | ||
|
|
89bb9c215e | ||
|
|
2d18686ce7 | ||
|
|
1d999d4910 | ||
|
|
7dfaa7579a | ||
|
|
08cb079e97 | ||
|
|
450aa83592 | ||
|
|
0614c76e92 | ||
|
|
97e338f9d4 | ||
|
|
636f018daa | ||
|
|
c8d639024a | ||
|
|
6be2ee626a | ||
|
|
f7fc1967a5 | ||
|
|
aedb8a765b | ||
|
|
cf58bd15c3 | ||
|
|
34f4f68524 | ||
|
|
09b8144080 | ||
|
|
f1e6fb4ce7 | ||
|
|
2ca63fd1f6 | ||
|
|
a5d25e7d92 | ||
|
|
4167819e7a | ||
|
|
5bd3a463f0 | ||
|
|
79c447b4c6 | ||
|
|
540304f947 | ||
|
|
75d8f7331b | ||
|
|
b2509e9e53 | ||
|
|
7862f44653 | ||
|
|
962dd0c1bb | ||
|
|
5d5f7c7f5c | ||
|
|
6aaf838451 | ||
|
|
ad3bd312e9 | ||
|
|
5fa9939696 | ||
|
|
4956bb0e9c | ||
|
|
c074c12be7 | ||
|
|
ddbc293e9c | ||
|
|
a3921b45c7 | ||
|
|
38e1c8c5a1 | ||
|
|
c2d29ff233 | ||
|
|
2316baa898 | ||
|
|
f185d559c0 | ||
|
|
73d95bc004 | ||
|
|
fcd55f89d7 | ||
|
|
f9fe793573 | ||
|
|
bc36411993 | ||
|
|
48506236bf | ||
|
|
ded9b589fe | ||
|
|
008027db0e | ||
|
|
aec5e3473e | ||
|
|
95c8fde72f | ||
|
|
0f32968fae | ||
|
|
ae79e9fea1 | ||
|
|
9aa8e7edff |
No files matched your search
@@ -0,0 +1,6 @@
|
|||||||
|
FROM mcr.microsoft.com/vscode/devcontainers/base:alpine-3.12
|
||||||
|
RUN apk update
|
||||||
|
RUN apk add --upgrade nodejs-current npm
|
||||||
|
RUN npm i -g yarn rimraf
|
||||||
|
RUN rimraf node_modules
|
||||||
|
RUN yarn set version berry
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "Node.js",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.shell.linux": "/bin/sh"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"2gua.rainbow-brackets",
|
||||||
|
"christian-kohler.npm-intellisense",
|
||||||
|
"remimarsal.prettier-now",
|
||||||
|
"svelte.svelte-vscode",
|
||||||
|
"lokalise.i18n-ally",
|
||||||
|
"fivethree.vscode-svelte-snippets",
|
||||||
|
"voorjaar.windicss-intellisense"
|
||||||
|
],
|
||||||
|
"postCreateCommand": "yarn && yarn dev --open"
|
||||||
|
}
|
||||||
+1
-3
@@ -1,3 +1 @@
|
|||||||
public/env.sample.js
|
public/env.sample.js
|
||||||
public/workbox-*.js
|
|
||||||
public/workbox-*.js.map
|
|
||||||
+4
-5
@@ -1,11 +1,10 @@
|
|||||||
node_modules
|
node_modules
|
||||||
build
|
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
yarn.lock
|
||||||
*.map
|
*.map
|
||||||
public/env.js
|
public/env.js
|
||||||
public/sw.js
|
|
||||||
public/index.html
|
|
||||||
public/workbox-*.js
|
|
||||||
svelte.config.js
|
|
||||||
public/index.html
|
public/index.html
|
||||||
|
/dist
|
||||||
|
.yarn
|
||||||
|
.pnp.js
|
||||||
|
.yarnrc.yml
|
||||||
Vendored
+2
-1
@@ -5,7 +5,8 @@
|
|||||||
"remimarsal.prettier-now",
|
"remimarsal.prettier-now",
|
||||||
"svelte.svelte-vscode",
|
"svelte.svelte-vscode",
|
||||||
"lokalise.i18n-ally",
|
"lokalise.i18n-ally",
|
||||||
"fivethree.vscode-svelte-snippets"
|
"fivethree.vscode-svelte-snippets",
|
||||||
|
"voorjaar.windicss-intellisense"
|
||||||
],
|
],
|
||||||
"unwantedRecommendations": [
|
"unwantedRecommendations": [
|
||||||
"antfu.i18n-ally"
|
"antfu.i18n-ally"
|
||||||
|
|||||||
Vendored
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"i18n-ally.localesPaths": "src/locales",
|
"i18n-ally.localesPaths": "src/locales",
|
||||||
"i18n-ally.keystyle": "nested"
|
"i18n-ally.keystyle": "nested",
|
||||||
|
"windicss.enableCodeFolding": false,
|
||||||
}
|
}
|
||||||
@@ -2,8 +2,65 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||||
|
|
||||||
|
#### [0.11.0](https://git.odit.services/lfk/frontend/compare/0.10.0...0.11.0)
|
||||||
|
|
||||||
|
- Merge pull request 'Generate and print bulk blank cards feature/116-download_blanc_cards' (#117) from feature/116-download_blanc_cards into dev [`25d8b86`](https://git.odit.services/lfk/frontend/commit/25d8b86efd89c442d1bf308a8743134820acfd1f)
|
||||||
|
- Added button (including translations [`0614c76`](https://git.odit.services/lfk/frontend/commit/0614c76e924b18b512bab59933a26fec07cf483d)
|
||||||
|
- Added button (including translations [`97e338f`](https://git.odit.services/lfk/frontend/commit/97e338f9d4f388596d550990457254c7fa1a3492)
|
||||||
|
- Sorted translations [`89bb9c2`](https://git.odit.services/lfk/frontend/commit/89bb9c215e356e0940678f5cabd9e38bc203040e)
|
||||||
|
- Added function for generating cards with pdf [`c8d6390`](https://git.odit.services/lfk/frontend/commit/c8d639024a5f2f72d6e30d2ce990b08bd71a5471)
|
||||||
|
- Fixed button styling [`08cb079`](https://git.odit.services/lfk/frontend/commit/08cb079e9798392e26515d559af2637e74deea97)
|
||||||
|
- Now returning cards on creation with pdf [`1d999d4`](https://git.odit.services/lfk/frontend/commit/1d999d4910acb5efa21b3f9922cdb359babff404)
|
||||||
|
- Added comment [`636f018`](https://git.odit.services/lfk/frontend/commit/636f018daa33b99468a257bfc33477e1e644d081)
|
||||||
|
- Bumped lfk client js version [`2d18686`](https://git.odit.services/lfk/frontend/commit/2d18686ce782a434ca7bd34c07c36a35b9497273)
|
||||||
|
- Bumped lfk-client-js [`7dfaa75`](https://git.odit.services/lfk/frontend/commit/7dfaa7579a22b13194fcdd1c02b4437958261472)
|
||||||
|
|
||||||
|
#### [0.10.0](https://git.odit.services/lfk/frontend/compare/0.9.1...0.10.0)
|
||||||
|
|
||||||
|
> 26 March 2021
|
||||||
|
|
||||||
|
- Added translations [`79c447b`](https://git.odit.services/lfk/frontend/commit/79c447b4c65e55ebb5af71fb0b09174c36e2cecf)
|
||||||
|
- Sorted translations 🌍 [`5bd3a46`](https://git.odit.services/lfk/frontend/commit/5bd3a463f00abaf2c98ab554f88e5542d01f364a)
|
||||||
|
- Reset can now only be triggered if pw is strong enoug [`75d8f73`](https://git.odit.services/lfk/frontend/commit/75d8f7331b6ae78f3979bb62148188a16f83cb8d)
|
||||||
|
- Module now exports functions that check if a password is strong enough and equal to a potential confirmation field [`b2509e9`](https://git.odit.services/lfk/frontend/commit/b2509e9e53ab6b51dfd55e26712e8928160cd64b)
|
||||||
|
- 🚀RELEASE v0.10.0 [`f7fc196`](https://git.odit.services/lfk/frontend/commit/f7fc1967a50f302af1d8b668628be2f4ab2975a3)
|
||||||
|
- Added more cirteria to the password strength component [`5fa9939`](https://git.odit.services/lfk/frontend/commit/5fa9939696a35d60d762feb0cebef61d31869218)
|
||||||
|
- Now using pw strength component [`6aaf838`](https://git.odit.services/lfk/frontend/commit/6aaf8384512185a3a319ce6b3e2505e910468e64)
|
||||||
|
- Added a password strength verification [`ad3bd31`](https://git.odit.services/lfk/frontend/commit/ad3bd312e9a5785f81029ea2b7e302ea1addd988)
|
||||||
|
- Implemented a custom password strength component [`4956bb0`](https://git.odit.services/lfk/frontend/commit/4956bb0e9c3c1d22d60e849aea5664e35330f897)
|
||||||
|
- User creation can now only be triggered if pw is strong enoug [`540304f`](https://git.odit.services/lfk/frontend/commit/540304f947f60a7072c592ca8088996ce7e95cb4)
|
||||||
|
- Now using pw strength component for user creation [`7862f44`](https://git.odit.services/lfk/frontend/commit/7862f446532903f1a2eac7b21d5c80c3245785e5)
|
||||||
|
- Added missing exports [`962dd0c`](https://git.odit.services/lfk/frontend/commit/962dd0c1bbc0df7f20bcec5b4247188c8935c87e)
|
||||||
|
- new license file version [CI SKIP] [`aedb8a7`](https://git.odit.services/lfk/frontend/commit/aedb8a765ba053545adbba9eb014b3bb0e5aac8c)
|
||||||
|
- Bumped lfk-client version 🔝 [`cf58bd1`](https://git.odit.services/lfk/frontend/commit/cf58bd15c3541c417ab2be83d96135e931a2b6f6)
|
||||||
|
- new license file version [CI SKIP] [`34f4f68`](https://git.odit.services/lfk/frontend/commit/34f4f68524918fd3d1963966a1e259d5b60efaca)
|
||||||
|
- Merge pull request 'Implemented password strength test feature/106-password_strength' (#115) from feature/106-password_strength into dev [`09b8144`](https://git.odit.services/lfk/frontend/commit/09b81440804cf98303fcb723a9717d6d0f432da8)
|
||||||
|
- Formatting🛠 [`4167819`](https://git.odit.services/lfk/frontend/commit/4167819e7a864d3b1dd95ba48ab1525a454f7f30)
|
||||||
|
- Now using pw strength component for reset [`5d5f7c7`](https://git.odit.services/lfk/frontend/commit/5d5f7c7f5c6a69146f41996f4facfeff95791be0)
|
||||||
|
|
||||||
|
#### [0.9.1](https://git.odit.services/lfk/frontend/compare/0.9.0...0.9.1)
|
||||||
|
|
||||||
|
> 26 March 2021
|
||||||
|
|
||||||
|
- 🚀RELEASE v0.9.1 [`2ca63fd`](https://git.odit.services/lfk/frontend/commit/2ca63fd1f675f0da2b18ba43095074dd4823991d)
|
||||||
|
- Merge pull request 'Org selfservice Link feature/112-org_registration_links' (#114) from feature/112-org_registration_links into dev [`a5d25e7`](https://git.odit.services/lfk/frontend/commit/a5d25e7d92c7c37e90dbb4ba74b787873f920c6b)
|
||||||
|
- Added checkbox to enable registration [`f9fe793`](https://git.odit.services/lfk/frontend/commit/f9fe79357317653b46c09eb95b0db13845cddcf9)
|
||||||
|
- Sorted translations [`c074c12`](https://git.odit.services/lfk/frontend/commit/c074c12be75f285612f7a732c106404d9fb4538a)
|
||||||
|
- You can now copy the selfservice links to your clipboard [`fcd55f8`](https://git.odit.services/lfk/frontend/commit/fcd55f89d72e6ceb9bb2bdd194cc3420145d6d0d)
|
||||||
|
- Formatting [`f185d55`](https://git.odit.services/lfk/frontend/commit/f185d559c0d6476f2f2b9ea74aaad3297411801d)
|
||||||
|
- Copy now 100% worX [`a3921b4`](https://git.odit.services/lfk/frontend/commit/a3921b45c70b410293db593a75d2fdd34c131733)
|
||||||
|
- Fixed changes in wrong file [`73d95bc`](https://git.odit.services/lfk/frontend/commit/73d95bc0042f8f586ba2f2345342e25da1d280c2)
|
||||||
|
- Added check if key exists [`c2d29ff`](https://git.odit.services/lfk/frontend/commit/c2d29ff233f6b3e9dd2555b7e0b845592da2ba35)
|
||||||
|
- Added check if key exists [`2316baa`](https://git.odit.services/lfk/frontend/commit/2316baa8984832382be9f3b4549ca62cf9ccb5a3)
|
||||||
|
- Added translations [`ddbc293`](https://git.odit.services/lfk/frontend/commit/ddbc293e9ca0525910bf3d995de970ee2c35c56a)
|
||||||
|
- new license file version [CI SKIP] [`ded9b58`](https://git.odit.services/lfk/frontend/commit/ded9b589fe087915176c5b54f3c55e412541bc8f)
|
||||||
|
- Merge pull request 'first merge to main 🚀' (#71) from dev into main [`9aa8e7e`](https://git.odit.services/lfk/frontend/commit/9aa8e7edffa7e51b00a5ab7a8f16828b7a469181)
|
||||||
|
|
||||||
#### [0.9.0](https://git.odit.services/lfk/frontend/compare/0.8.7...0.9.0)
|
#### [0.9.0](https://git.odit.services/lfk/frontend/compare/0.8.7...0.9.0)
|
||||||
|
|
||||||
|
> 26 March 2021
|
||||||
|
|
||||||
|
- 🚀RELEASE v0.9.0 [`67c3732`](https://git.odit.services/lfk/frontend/commit/67c3732fad5a7c64ae11dcbebaaa095e1a2b387c)
|
||||||
- Merge pull request 'Runner cards feature/94-runnercard_mgnt' (#111) from feature/94-runnercard_mgnt into dev [`2932f45`](https://git.odit.services/lfk/frontend/commit/2932f4591e62187a4903511051d110e9679c0993)
|
- Merge pull request 'Runner cards feature/94-runnercard_mgnt' (#111) from feature/94-runnercard_mgnt into dev [`2932f45`](https://git.odit.services/lfk/frontend/commit/2932f4591e62187a4903511051d110e9679c0993)
|
||||||
- Sorted translations 🌍 [`1665a1a`](https://git.odit.services/lfk/frontend/commit/1665a1a093862a13be78ec65dcdf64eb7d855593)
|
- Sorted translations 🌍 [`1665a1a`](https://git.odit.services/lfk/frontend/commit/1665a1a093862a13be78ec65dcdf64eb7d855593)
|
||||||
- Added translations [`6b5945a`](https://git.odit.services/lfk/frontend/commit/6b5945add86a77630c500872545bb91724b2047f)
|
- Added translations [`6b5945a`](https://git.odit.services/lfk/frontend/commit/6b5945add86a77630c500872545bb91724b2047f)
|
||||||
|
|||||||
+4
-8
@@ -1,18 +1,14 @@
|
|||||||
FROM node:15.5.1-alpine3.12
|
FROM node:15.5.1-alpine3.12
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN npm i -g pnpm
|
|
||||||
COPY package.json ./
|
COPY package.json ./
|
||||||
RUN pnpm i
|
RUN yarn
|
||||||
COPY package.json *.config.js workbox-config.js template-copy.js index.template.html s-config.template.js ./
|
COPY package.json *.config.js index.html ./
|
||||||
COPY src ./src
|
COPY src ./src
|
||||||
COPY public ./public
|
COPY public ./public
|
||||||
RUN pnpm run build
|
RUN yarn build
|
||||||
# final image
|
# final image
|
||||||
FROM alpine
|
FROM alpine
|
||||||
COPY --from=0 /app/build /app
|
COPY --from=0 /app/dist /app
|
||||||
RUN rm -rf /app/build/_dist_/components
|
|
||||||
RUN rm -rf /app/build/_dist_/locales
|
|
||||||
RUN rm -rf /app/build-manifest.json
|
|
||||||
FROM fholzer/nginx-brotli:v1.19.1
|
FROM fholzer/nginx-brotli:v1.19.1
|
||||||
COPY --from=1 /app /usr/share/nginx/html
|
COPY --from=1 /app /usr/share/nginx/html
|
||||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
COPY ./nginx.conf /etc/nginx/nginx.conf
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# @odit/lfk-frontend
|
||||||
|
|
||||||
|
## ✒️ Overview
|
||||||
|
This is an API client for [https://git.odit.services/lfk/backend](@lfk/backend)
|
||||||
|
- WebApp built with [Svelte](https://svelte.dev), [WindiCSS](https://windicss.org/) (to compile [TailwindCSS](https://tailwindcss.com/)) and [Vite](https://vitejs.dev).
|
||||||
|
|
||||||
|
This application is intended for use by admin users/ members only.
|
||||||
|
|
||||||
|
## 🚀 Getting Started
|
||||||
|
```
|
||||||
|
yarn
|
||||||
|
```
|
||||||
|
## Development
|
||||||
|
```
|
||||||
|
yarn dev
|
||||||
|
/
|
||||||
|
yarn dev --open
|
||||||
|
```
|
||||||
|
## Build
|
||||||
|
```
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
@@ -1,23 +1,22 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="/favicon.png" />
|
<link rel="icon" href="/favicon.png" />
|
||||||
<link rel="manifest" href="/manifest.webmanifest">
|
<link rel="manifest" href="/manifest.webmanifest">
|
||||||
<link rel="apple-touch-icon" href="/lfk-logo.png">
|
<link rel="apple-touch-icon" href="/lfk-logo.png">
|
||||||
<meta name="theme-color" content="#FFFFFF">
|
<meta name="theme-color" content="#FFFFFF">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="description" content="Lauf Für Kaya! - Admin" />
|
<meta name="description" content="Lauf Für Kaya! - Admin" />
|
||||||
<title>Lauf für Kaya! - Admin</title>
|
<title>Lauf für Kaya! - Admin</title>
|
||||||
__TAILWIND_INSERT__
|
</head>
|
||||||
</head>
|
|
||||||
|
<body>
|
||||||
<body>
|
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.8.4-RELEASE_INFO</span>
|
||||||
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.9.0-RELEASE_INFO</span>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<script src="/env.js"></script>
|
||||||
<script src="/env.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
<script defer type="module" src="/_dist_/index.js"></script>
|
</body>
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -6,6 +6,15 @@ http {
|
|||||||
server {
|
server {
|
||||||
error_page 404 /index.html;
|
error_page 404 /index.html;
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
|
location = /index.html {
|
||||||
|
add_header Cache-Control 'no-store';
|
||||||
|
}
|
||||||
|
location = / {
|
||||||
|
add_header Cache-Control 'no-store';
|
||||||
|
}
|
||||||
|
location = /env.js {
|
||||||
|
add_header Cache-Control 'no-store';
|
||||||
|
}
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-33
@@ -1,45 +1,40 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/lfk-frontend",
|
"name": "@odit/lfk-frontend",
|
||||||
"version": "0.9.0",
|
"version": "0.8.4",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"i18n-order": "node order.js",
|
"i18n-order": "node order.js",
|
||||||
"dev:all": "yarn prebuild && snowpack dev",
|
"dev": "vite",
|
||||||
"dev": "cross-env NODE_ENV_ODIT=development_fast node template-copy.js && yarn build:sw && snowpack dev",
|
"build": "vite build",
|
||||||
"build": "yarn prebuild && snowpack build",
|
|
||||||
"prebuild": "cross-env NODE_ENV_ODIT=production node template-copy.js && yarn build:sw",
|
|
||||||
"build:sw": "workbox generateSW workbox-config.js",
|
|
||||||
"release": "release-it",
|
"release": "release-it",
|
||||||
"licenses:export": "license-exporter --json -o public"
|
"licenses:export": "license-exporter --json -o public"
|
||||||
},
|
},
|
||||||
"license": "CC-BY-NC-SA-4.0",
|
"license": "CC-BY-NC-SA-4.0",
|
||||||
"dependencies": {
|
|
||||||
"@odit/lfk-client-js": "0.7.0",
|
|
||||||
"csvtojson": "^2.0.10",
|
|
||||||
"gridjs": "3.3.0",
|
|
||||||
"localforage": "1.9.0",
|
|
||||||
"marked": "^2.0.1",
|
|
||||||
"svelte-focus-trap": "1.0.1",
|
|
||||||
"svelte-i18n": "3.3.7",
|
|
||||||
"svelte-select": "^3.17.0",
|
|
||||||
"tailwindcss": "2.0.3",
|
|
||||||
"tinro": "0.6.1",
|
|
||||||
"toastify-js": "1.9.3",
|
|
||||||
"validator": "13.5.2",
|
|
||||||
"xlsx": "^0.16.9"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@odit/license-exporter": "^0.0.11",
|
"check-password-strength": "2.0.2",
|
||||||
"@snowpack/plugin-svelte": "3.5.2",
|
"@odit/lfk-client-js": "0.10.1",
|
||||||
"auto-changelog": "^2.2.1",
|
"@odit/license-exporter": "0.0.11",
|
||||||
|
"@sveltejs/vite-plugin-svelte": "1.0.0-next.5",
|
||||||
|
"@types/html-minifier": "4.0.0",
|
||||||
|
"auto-changelog": "2.2.1",
|
||||||
"autoprefixer": "10.2.5",
|
"autoprefixer": "10.2.5",
|
||||||
"cross-env": "^7.0.3",
|
"csvtojson": "2.0.10",
|
||||||
"postcss": "8.2.8",
|
"gridjs": "3.4.0",
|
||||||
"postcss-load-config": "3.0.1",
|
"html-minifier": "4.0.0",
|
||||||
"release-it": "^14.4.1",
|
"localforage": "1.9.0",
|
||||||
"snowpack": "3.0.13",
|
"marked": "2.0.1",
|
||||||
"svelte": "3.35.0",
|
"release-it": "14.5.1",
|
||||||
"svelte-preprocess": "4.6.9",
|
"svelte": "3.37.0",
|
||||||
"workbox-cli": "6.1.2"
|
"svelte-focus-trap": "1.2.0",
|
||||||
|
"svelte-i18n": "3.3.9",
|
||||||
|
"svelte-preprocess": "4.7.0",
|
||||||
|
"svelte-select": "3.17.0",
|
||||||
|
"tailwindcss": "2.0.4",
|
||||||
|
"tinro": "0.6.1",
|
||||||
|
"toastify-js": "1.10.0",
|
||||||
|
"validator": "13.5.2",
|
||||||
|
"vite": "2.1.5",
|
||||||
|
"vite-plugin-windicss": "0.12.2",
|
||||||
|
"xlsx": "0.16.9"
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
@@ -55,7 +50,7 @@
|
|||||||
"publish": false
|
"publish": false
|
||||||
},
|
},
|
||||||
"hooks": {
|
"hooks": {
|
||||||
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node versionbuilder.js && git add index.template.html && node order.js && git add src/locales"
|
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node versionbuilder.js && git add index.html && node order.js && git add src/locales"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
[{"author":"ODIT.Services","repo":{"type":"git","url":"git+https://git.odit.services/lfk/lfk-client-js"},"description":"A lib to interact with https://git.odit.services/lfk/backend. Use this version for native JS applications.","name":"@odit/lfk-client-js","license":"CC-BY-NC-SA-4.0","version":"0.6.4","licensetext":"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Creative\r\nCommons Corporation (\"Creative Commons\") is not a law firm and does not provide\r\nlegal services or legal advice. Distribution of Creative Commons public licenses\r\ndoes not create a lawyer-client or other relationship. Creative Commons makes\r\nits licenses and related information available on an \"as-is\" basis. Creative\r\nCommons gives no warranties regarding its licenses, any material licensed\r\nunder their terms and conditions, or any related information. Creative Commons\r\ndisclaims all liability for damages resulting from their use to the fullest\r\nextent possible.\r\n\r\nUsing Creative Commons Public Licenses\r\n\r\nCreative Commons public licenses provide a standard set of terms and conditions\r\nthat creators and other rights holders may use to share original works of\r\nauthorship and other material subject to copyright and certain other rights\r\nspecified in the public license below. The following considerations are for\r\ninformational purposes only, are not exhaustive, and do not form part of our\r\nlicenses.\r\n\r\nConsiderations for licensors: Our public licenses are intended for use by\r\nthose authorized to give the public permission to use material in ways otherwise\r\nrestricted by copyright and certain other rights. Our licenses are irrevocable.\r\nLicensors should read and understand the terms and conditions of the license\r\nthey choose before applying it. Licensors should also secure all rights necessary\r\nbefore applying our licenses so that the public can reuse the material as\r\nexpected. Licensors should clearly mark any material not subject to the license.\r\nThis includes other CC-licensed material, or material used under an exception\r\nor limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors\r\n\r\nConsiderations for the public: By using one of our public licenses, a licensor\r\ngrants the public permission to use the licensed material under specified\r\nterms and conditions. If the licensor's permission is not necessary for any\r\nreason–for example, because of any applicable exception or limitation to copyright–then\r\nthat use is not regulated by the license. Our licenses grant only permissions\r\nunder copyright and certain other rights that a licensor has authority to\r\ngrant. Use of the licensed material may still be restricted for other reasons,\r\nincluding because others have copyright or other rights in the material. A\r\nlicensor may make special requests, such as asking that all changes be marked\r\nor described. Although not required by our licenses, you are encouraged to\r\nrespect those requests where reasonable. More considerations for the public\r\n: wiki.creativecommons.org/Considerations_for_licensees\r\n\r\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public\r\nLicense\r\n\r\nBy exercising the Licensed Rights (defined below), You accept and agree to\r\nbe bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike\r\n4.0 International Public License (\"Public License\"). To the extent this Public\r\nLicense may be interpreted as a contract, You are granted the Licensed Rights\r\nin consideration of Your acceptance of these terms and conditions, and the\r\nLicensor grants You such rights in consideration of benefits the Licensor\r\nreceives from making the Licensed Material available under these terms and\r\nconditions.\r\n\r\nSection 1 – Definitions.\r\n\r\na. Adapted Material means material subject to Copyright and Similar Rights\r\nthat is derived from or based upon the Licensed Material and in which the\r\nLicensed Material is translated, altered, arranged, transformed, or otherwise\r\nmodified in a manner requiring permission under the Copyright and Similar\r\nRights held by the Licensor. For purposes of this Public License, where the\r\nLicensed Material is a musical work, performance, or sound recording, Adapted\r\nMaterial is always produced where the Licensed Material is synched in timed\r\nrelation with a moving image.\r\n\r\nb. Adapter's License means the license You apply to Your Copyright and Similar\r\nRights in Your contributions to Adapted Material in accordance with the terms\r\nand conditions of this Public License.\r\n\r\nc. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses,\r\napproved by Creative Commons as essentially the equivalent of this Public\r\nLicense.\r\n\r\nd. Copyright and Similar Rights means copyright and/or similar rights closely\r\nrelated to copLine truncated
|
[{"author":"deanilvincent","repo":{"type":"git","url":"https://github.com/deanilvincent/check-password-strength"},"description":"A NPM Password strength checker based from Javascript RegExp. Check passphrase if it's \"Weak\", \"Medium\" or \"Strong\"","name":"check-password-strength","license":"MIT","version":"2.0.2","licensetext":"MIT License\r\n\r\nCopyright (c) 2020 Mark Deanil Vicente\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"},{"author":"ODIT.Services","repo":{"type":"git","url":"git+https://git.odit.services/lfk/lfk-client-js"},"description":"A lib to interact with https://git.odit.services/lfk/backend. Use this version for native JS applications.","name":"@odit/lfk-client-js","license":"CC-BY-NC-SA-4.0","version":"0.10.1","licensetext":"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Creative\r\nCommons Corporation (\"Creative Commons\") is not a law firm and does not provide\r\nlegal services or legal advice. Distribution of Creative Commons public licenses\r\ndoes not create a lawyer-client or other relationship. Creative Commons makes\r\nits licenses and related information available on an \"as-is\" basis. Creative\r\nCommons gives no warranties regarding its licenses, any material licensed\r\nunder their terms and conditions, or any related information. Creative Commons\r\ndisclaims all liability for damages resulting from their use to the fullest\r\nextent possible.\r\n\r\nUsing Creative Commons Public Licenses\r\n\r\nCreative Commons public licenses provide a standard set of terms and conditions\r\nthat creators and other rights holders may use to share original works of\r\nauthorship and other material subject to copyright and certain other rights\r\nspecified in the public license below. The following considerations are for\r\ninformational purposes only, are not exhaustive, and do not form part of our\r\nlicenses.\r\n\r\nConsiderations for licensors: Our public licenses are intended for use by\r\nthose authorized to give the public permission to use material in ways otherwise\r\nrestricted by copyright and certain other rights. Our licenses are irrevocable.\r\nLicensors should read and understand the terms and conditions of the license\r\nthey choose before applying it. Licensors should also secure all rights necessary\r\nbefore applying our licenses so that the public can reuse the material as\r\nexpected. Licensors should clearly mark any material not subject to the license.\r\nThis includes other CC-licensed material, or material used under an exception\r\nor limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors\r\n\r\nConsiderations for the public: By using one of our public licenses, a licensor\r\ngrants the public permission to use the licensed material under specified\r\nterms and conditions. If the licensor's permission is not necessary for any\r\nreason–for example, because of any applicable exception or limitation to copyright–then\r\nthat use is not regulated by the license. Our licenses grant only permissions\r\nunder copyright and certain other rights that a licensor has authority to\r\ngrant. Use of the licensed material may still be restricted for other reasons,\r\nincluding because others have copyright or other rights in the material. A\r\nlicensor may make special requests, such as asking that all changes be marked\r\nor described. Although not required by our licenses, you are encouraged to\r\nrespect those requests where reasonable. More considerations for the public\r\n: wiki.creativecommons.org/Considerations_for_licensees\r\n\r\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public\r\nLicense\r\n\r\nBy exercising the Licensed Rights (defined below), You accept and agree to\r\nbe bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike\r\n4.0 International Public License (\"Public License\"). ToLine truncated
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
const sveltePreprocess = require('svelte-preprocess');
|
|
||||||
const preprocess = sveltePreprocess(__insert__);
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
preprocess
|
|
||||||
};
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/** @type {import("snowpack").SnowpackUserConfig } */
|
|
||||||
module.exports = {
|
|
||||||
mount: {
|
|
||||||
public: '/',
|
|
||||||
src: '/_dist_'
|
|
||||||
},
|
|
||||||
plugins: [ '@snowpack/plugin-svelte' ],
|
|
||||||
routes: [
|
|
||||||
/* Enable an SPA Fallback in development: */
|
|
||||||
{ match: 'routes', src: '.*', dest: '/index.html' }
|
|
||||||
],
|
|
||||||
packageOptions: {
|
|
||||||
/* ... */
|
|
||||||
sourceMap: false
|
|
||||||
},
|
|
||||||
devOptions: {
|
|
||||||
/* ... */
|
|
||||||
},
|
|
||||||
buildOptions: {
|
|
||||||
/* ... */
|
|
||||||
},
|
|
||||||
alias: {
|
|
||||||
/* ... */
|
|
||||||
},
|
|
||||||
optimize: { bundle: true, minify: true }
|
|
||||||
};
|
|
||||||
+221
-224
@@ -1,224 +1,221 @@
|
|||||||
<script>
|
<script>
|
||||||
import "./TailwindStyles.svelte";
|
import "toastify-js/src/toastify.css";
|
||||||
import "toastify-js/src/toastify.css";
|
import "gridjs/dist/theme/mermaid.css";
|
||||||
import "gridjs/dist/theme/mermaid.css";
|
import { Route, router } from "tinro";
|
||||||
import { Route, router } from "tinro";
|
router.subscribe((routeInfo) => {
|
||||||
router.subscribe((routeInfo) => {
|
window.scrollTo(0, 0);
|
||||||
window.scrollTo(0, 0);
|
});
|
||||||
});
|
if (config.prefersHashRouting) {
|
||||||
if (config.prefersHashRouting) {
|
if (config.prefersHashRouting === true) {
|
||||||
if (config.prefersHashRouting === true) {
|
router.useHashNavigation();
|
||||||
router.useHashNavigation();
|
}
|
||||||
}
|
}
|
||||||
}
|
import localForage from "localforage";
|
||||||
import localForage from "localforage";
|
import { addMessages, init, getLocaleFromNavigator } from "svelte-i18n";
|
||||||
import { addMessages, init, getLocaleFromNavigator } from "svelte-i18n";
|
import en from "./locales/en.json";
|
||||||
import en from "./locales/en.json";
|
import de from "./locales/de.json";
|
||||||
import de from "./locales/de.json";
|
addMessages("en", en);
|
||||||
addMessages("en", en);
|
addMessages("de", de);
|
||||||
addMessages("de", de);
|
init({
|
||||||
init({
|
fallbackLocale: "en",
|
||||||
fallbackLocale: "en",
|
initialLocale: getLocaleFromNavigator(),
|
||||||
initialLocale: getLocaleFromNavigator(),
|
});
|
||||||
});
|
localForage.config({
|
||||||
localForage.config({
|
name: "lfk_admin",
|
||||||
name: "lfk_admin",
|
version: 1.0,
|
||||||
version: 1.0,
|
storeName: "lfk_admin",
|
||||||
storeName: "lfk_admin",
|
description: "LfK! admin dashbaord",
|
||||||
description: "LfK! admin dashbaord",
|
});
|
||||||
});
|
window.onunhandledrejection = (event) => {
|
||||||
window.onunhandledrejection = (event) => {
|
if (event.reason.toString() == "Error: Unauthorized") {
|
||||||
if (event.reason.toString() == "Error: Unauthorized") {
|
console.log("Found 1");
|
||||||
console.log("Found 1");
|
localForage.clear();
|
||||||
localForage.clear();
|
location.replace("/");
|
||||||
location.replace("/");
|
}
|
||||||
}
|
};
|
||||||
};
|
//
|
||||||
//
|
import Login from "./components/auth/Login.svelte";
|
||||||
import Login from "./components/auth/Login.svelte";
|
import Dashboard from "./components/dashboard/Dashboard.svelte";
|
||||||
import Dashboard from "./components/dashboard/Dashboard.svelte";
|
import store from "./store.js";
|
||||||
import store from "./store.js";
|
import ForgotPassword from "./components/auth/ForgotPassword.svelte";
|
||||||
import ForgotPassword from "./components/auth/ForgotPassword.svelte";
|
import MainDashContent from "./components/dashboard/MainDashContent.svelte";
|
||||||
import MainDashContent from "./components/dashboard/MainDashContent.svelte";
|
import Users from "./components/users/Users.svelte";
|
||||||
import Users from "./components/users/Users.svelte";
|
import About from "./components/general/About.svelte";
|
||||||
import About from "./components/general/About.svelte";
|
import Settings from "./components/settings/Settings.svelte";
|
||||||
import Settings from "./components/settings/Settings.svelte";
|
import Transition from "./components/base/Transition.svelte";
|
||||||
import Transition from "./components/base/Transition.svelte";
|
import Orgs from "./components/orgs/Orgs.svelte";
|
||||||
import Orgs from "./components/orgs/Orgs.svelte";
|
import Runners from "./components/runners/Runners.svelte";
|
||||||
import Runners from "./components/runners/Runners.svelte";
|
import Footer from "./components/general/Footer.svelte";
|
||||||
import Footer from "./components/general/Footer.svelte";
|
import TracksOverview from "./components/tracks/TracksOverview.svelte";
|
||||||
import TracksOverview from "./components/tracks/TracksOverview.svelte";
|
import OrgDetail from "./components/orgs/OrgDetail.svelte";
|
||||||
import OrgDetail from "./components/orgs/OrgDetail.svelte";
|
import Teams from "./components/teams/Teams.svelte";
|
||||||
import Teams from "./components/teams/Teams.svelte";
|
import { OpenAPI } from "@odit/lfk-client-js";
|
||||||
import { OpenAPI } from "@odit/lfk-client-js";
|
import UserDetail from "./components/users/UserDetail.svelte";
|
||||||
import UserDetail from "./components/users/UserDetail.svelte";
|
OpenAPI.BASE = config.baseurl;
|
||||||
OpenAPI.BASE = config.baseurl;
|
import TeamDetail from "./components/teams/TeamDetail.svelte";
|
||||||
import { register as registerSW } from "./swmodule";
|
import UserPermissions from "./components/users/UserPermissions.svelte";
|
||||||
import TeamDetail from "./components/teams/TeamDetail.svelte";
|
import GroupPermissions from "./components/groups/GroupPermissions.svelte";
|
||||||
import UserPermissions from "./components/users/UserPermissions.svelte";
|
import RunnerDetail from "./components/runners/RunnerDetail.svelte";
|
||||||
import GroupPermissions from "./components/groups/GroupPermissions.svelte";
|
import Imprint from "./components/general/Imprint.svelte";
|
||||||
import RunnerDetail from "./components/runners/RunnerDetail.svelte";
|
import Privacy from "./components/general/Privacy.svelte";
|
||||||
import Imprint from "./components/general/Imprint.svelte";
|
import ResetPassword from "./components/auth/ResetPassword.svelte";
|
||||||
import Privacy from "./components/general/Privacy.svelte";
|
import Contacts from "./components/contacts/Contacts.svelte";
|
||||||
import ResetPassword from "./components/auth/ResetPassword.svelte";
|
import ContactDetail from "./components/contacts/ContactDetail.svelte";
|
||||||
import Contacts from "./components/contacts/Contacts.svelte";
|
import Donors from "./components/donors/Donors.svelte";
|
||||||
import ContactDetail from "./components/contacts/ContactDetail.svelte";
|
import Groups from "./components/groups/Groups.svelte";
|
||||||
import Donors from "./components/donors/Donors.svelte";
|
import DonorDetail from "./components/donors/DonorDetail.svelte";
|
||||||
import Groups from "./components/groups/Groups.svelte";
|
import Donations from "./components/donations/Donations.svelte";
|
||||||
import DonorDetail from "./components/donors/DonorDetail.svelte";
|
import DonationDetail from "./components/donations/DonationDetail.svelte";
|
||||||
import Donations from "./components/donations/Donations.svelte";
|
import GroupDetail from "./components/groups/GroupDetail.svelte";
|
||||||
import DonationDetail from "./components/donations/DonationDetail.svelte";
|
import ScanStations from "./components/scanstations/ScanStations.svelte";
|
||||||
import GroupDetail from "./components/groups/GroupDetail.svelte";
|
import ScanStationDetail from "./components/scanstations/ScanStationDetail.svelte";
|
||||||
import ScanStations from "./components/scanstations/ScanStations.svelte";
|
import Scans from "./components/scans/Scans.svelte";
|
||||||
import ScanStationDetail from "./components/scanstations/ScanStationDetail.svelte";
|
import ScanDetail from "./components/scans/ScanDetail.svelte";
|
||||||
import Scans from "./components/scans/Scans.svelte";
|
import Cards from "./components/cards/Cards.svelte";
|
||||||
import ScanDetail from "./components/scans/ScanDetail.svelte";
|
store.init();
|
||||||
import Cards from "./components/cards/Cards.svelte";
|
</script>
|
||||||
store.init();
|
|
||||||
registerSW();
|
<Route>
|
||||||
</script>
|
{#if $router.path === '/forgot_password'}
|
||||||
|
<Route path="/forgot_password">
|
||||||
<Route>
|
<ForgotPassword />
|
||||||
{#if $router.path === '/forgot_password'}
|
</Route>
|
||||||
<Route path="/forgot_password">
|
{:else if $router.path.includes('/reset')}
|
||||||
<ForgotPassword />
|
<Route path="/reset/:resetkey" let:params>
|
||||||
</Route>
|
<ResetPassword {params} />
|
||||||
{:else if $router.path.includes('/reset')}
|
</Route>
|
||||||
<Route path="/reset/:resetkey" let:params>
|
{:else if $router.path === '/about'}
|
||||||
<ResetPassword {params} />
|
<Route path="/about">
|
||||||
</Route>
|
<About />
|
||||||
{:else if $router.path === '/about'}
|
</Route>
|
||||||
<Route path="/about">
|
{:else if $router.path === '/imprint'}
|
||||||
<About />
|
<Route path="/imprint">
|
||||||
</Route>
|
<Imprint />
|
||||||
{:else if $router.path === '/imprint'}
|
</Route>
|
||||||
<Route path="/imprint">
|
{:else if $router.path === '/privacy'}
|
||||||
<Imprint />
|
<Route path="/privacy">
|
||||||
</Route>
|
<Privacy />
|
||||||
{:else if $router.path === '/privacy'}
|
</Route>
|
||||||
<Route path="/privacy">
|
{:else if $store.isLoggedIn}
|
||||||
<Privacy />
|
<Dashboard>
|
||||||
</Route>
|
<Transition>
|
||||||
{:else if $store.isLoggedIn}
|
<Route path="/">
|
||||||
<Dashboard>
|
<MainDashContent />
|
||||||
<Transition>
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/users/*">
|
||||||
<MainDashContent />
|
<Route path="/">
|
||||||
</Route>
|
<Users />
|
||||||
<Route path="/users/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:userid/*" let:params>
|
||||||
<Users />
|
<Route path="/">
|
||||||
</Route>
|
<UserDetail {params} />
|
||||||
<Route path="/:userid/*" let:params>
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/permissions/">
|
||||||
<UserDetail {params} />
|
<UserPermissions {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/permissions/">
|
</Route>
|
||||||
<UserPermissions {params} />
|
</Route>
|
||||||
</Route>
|
<Route path="/groups/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Groups />
|
||||||
<Route path="/groups/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:groupid/*" let:params>
|
||||||
<Groups />
|
<Route path="/">
|
||||||
</Route>
|
<GroupDetail {params} />
|
||||||
<Route path="/:groupid/*" let:params>
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/permissions/">
|
||||||
<GroupDetail {params} />
|
<GroupPermissions {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/permissions/">
|
</Route>
|
||||||
<GroupPermissions {params} />
|
</Route>
|
||||||
</Route>
|
<Route path="/tracks/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<TracksOverview />
|
||||||
<Route path="/tracks/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:trackid" let:params />
|
||||||
<TracksOverview />
|
</Route>
|
||||||
</Route>
|
<Route path="/runners/*">
|
||||||
<Route path="/:trackid" let:params />
|
<Route path="/">
|
||||||
</Route>
|
<Runners />
|
||||||
<Route path="/runners/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:runnerid" let:params>
|
||||||
<Runners />
|
<RunnerDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:runnerid" let:params>
|
</Route>
|
||||||
<RunnerDetail {params} />
|
<Route path="/teams/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Teams />
|
||||||
<Route path="/teams/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:teamid" let:params>
|
||||||
<Teams />
|
<TeamDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:teamid" let:params>
|
</Route>
|
||||||
<TeamDetail {params} />
|
<Route path="/contacts/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Contacts />
|
||||||
<Route path="/contacts/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:contact" let:params>
|
||||||
<Contacts />
|
<ContactDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:contact" let:params>
|
</Route>
|
||||||
<ContactDetail {params} />
|
<Route path="/orgs/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Orgs />
|
||||||
<Route path="/orgs/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:orgid" let:params>
|
||||||
<Orgs />
|
<OrgDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:orgid" let:params>
|
</Route>
|
||||||
<OrgDetail {params} />
|
<Route path="/donors/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Donors />
|
||||||
<Route path="/donors/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:donorid" let:params>
|
||||||
<Donors />
|
<DonorDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:donorid" let:params>
|
</Route>
|
||||||
<DonorDetail {params} />
|
<Route path="/donations/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Donations />
|
||||||
<Route path="/donations/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:donationid" let:params>
|
||||||
<Donations />
|
<DonationDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:donationid" let:params>
|
</Route>
|
||||||
<DonationDetail {params} />
|
<Route path="/cards/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<Cards />
|
||||||
<Route path="/cards/*">
|
</Route>
|
||||||
<Route path="/">
|
<!-- <Route path="/:scanid" let:params>
|
||||||
<Cards />
|
<ScanDetail {params} />
|
||||||
</Route>
|
</Route> -->
|
||||||
<!-- <Route path="/:scanid" let:params>
|
</Route>
|
||||||
<ScanDetail {params} />
|
<Route path="/scans/*">
|
||||||
</Route> -->
|
<Route path="/">
|
||||||
</Route>
|
<Scans />
|
||||||
<Route path="/scans/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:scanid" let:params>
|
||||||
<Scans />
|
<ScanDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:scanid" let:params>
|
</Route>
|
||||||
<ScanDetail {params} />
|
<Route path="/scanstations/*">
|
||||||
</Route>
|
<Route path="/">
|
||||||
</Route>
|
<ScanStations />
|
||||||
<Route path="/scanstations/*">
|
</Route>
|
||||||
<Route path="/">
|
<Route path="/:stationid" let:params>
|
||||||
<ScanStations />
|
<ScanStationDetail {params} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/:stationid" let:params>
|
</Route>
|
||||||
<ScanStationDetail {params} />
|
<Route path="/about">
|
||||||
</Route>
|
<About />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/about">
|
<Route path="/settings">
|
||||||
<About />
|
<Settings />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/settings">
|
</Transition>
|
||||||
<Settings />
|
<Footer />
|
||||||
</Route>
|
</Dashboard>
|
||||||
</Transition>
|
{:else}
|
||||||
<Footer />
|
<Login />
|
||||||
</Dashboard>
|
{/if}
|
||||||
{:else}
|
</Route>
|
||||||
<Login />
|
|
||||||
{/if}
|
|
||||||
</Route>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<style global>
|
|
||||||
/*! @import */
|
|
||||||
@tailwind base;
|
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
</style>
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<script context="module">
|
||||||
|
import { passwordStrength } from "check-password-strength";
|
||||||
|
export function password_strong_enough(password_change) {
|
||||||
|
let strength = passwordStrength(password_change);
|
||||||
|
return (
|
||||||
|
strength?.contains.includes("lowercase") &&
|
||||||
|
strength?.contains.includes("uppercase") &&
|
||||||
|
strength?.contains.includes("number") &&
|
||||||
|
strength?.length > 9
|
||||||
|
);
|
||||||
|
}
|
||||||
|
export function password_strong_enough_and_equal(
|
||||||
|
password_change,
|
||||||
|
password_confirm
|
||||||
|
) {
|
||||||
|
return (
|
||||||
|
password_strong_enough(password_change) &&
|
||||||
|
password_change === password_confirm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
||||||
|
import { passwordStrength as Strength } from "check-password-strength";
|
||||||
|
export let password_change;
|
||||||
|
export let password_confirm;
|
||||||
|
|
||||||
|
$: strength = Strength(password_change);
|
||||||
|
$: passwords_match =
|
||||||
|
!password_confirm || password_confirm === password_change;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="ml-4">
|
||||||
|
<ul class="list-disc font-medium tracking-wide text-red-500 text-xs">
|
||||||
|
{#if !strength.contains.includes('lowercase')}
|
||||||
|
<li>{$_('must-contain-a-lowercase-letter')}</li>
|
||||||
|
{/if}
|
||||||
|
{#if !strength.contains.includes('uppercase')}
|
||||||
|
<li>{$_('must-contain-a-uppercase-letter')}</li>
|
||||||
|
{/if}
|
||||||
|
{#if !strength.contains.includes('number')}
|
||||||
|
<li>{$_('must-contain-a-number')}</li>
|
||||||
|
{/if}
|
||||||
|
{#if !(strength.length > 9)}
|
||||||
|
<li>{$_('must-be-at-least-10-characters-long')}</li>
|
||||||
|
{/if}
|
||||||
|
{#if !(passwords_match == true)}
|
||||||
|
<li>{$_('passwords-dont-match')}</li>
|
||||||
|
{/if}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
@@ -1,38 +1,43 @@
|
|||||||
<script>
|
<script>
|
||||||
import { AuthService } from "@odit/lfk-client-js";
|
import { AuthService } from "@odit/lfk-client-js";
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import "toastify-js/src/toastify.css";
|
import "toastify-js/src/toastify.css";
|
||||||
|
import PasswordStrength, {
|
||||||
|
password_strong_enough,
|
||||||
|
} from "../auth/PasswordStrength.svelte";
|
||||||
let state = "reset_in_progress";
|
let state = "reset_in_progress";
|
||||||
let password = "";
|
let password = "";
|
||||||
export let params;
|
export let params;
|
||||||
function set_new_password() {
|
function set_new_password() {
|
||||||
if(password.trim() !== ""){
|
if (password.trim() !== "") {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('password-reset-in-progress'),
|
text: $_("password-reset-in-progress"),
|
||||||
duration: 3500,
|
duration: 3500,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
AuthService.authControllerResetPassword(atob(params.resetkey),{ password })
|
AuthService.authControllerResetPassword(atob(params.resetkey), {
|
||||||
|
password,
|
||||||
|
})
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('password-reset-successful'),
|
text: $_("password-reset-successful"),
|
||||||
duration: 3500,
|
duration: 3500,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
state="reset_success";
|
state = "reset_success";
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
state="reset_error";
|
state = "reset_error";
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('please-provide-a-password'),
|
text: $_("please-provide-a-password"),
|
||||||
duration: 3500,
|
duration: 3500,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if state==="reset_success"}
|
{#if state === 'reset_success'}
|
||||||
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
||||||
<div class="max-w-md w-full py-12 px-6">
|
<div class="max-w-md w-full py-12 px-6">
|
||||||
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
||||||
@@ -56,31 +61,31 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else if state==="reset_error"}
|
{:else if state === 'reset_error'}
|
||||||
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
||||||
<div class="max-w-md w-full py-12 px-6">
|
<div class="max-w-md w-full py-12 px-6">
|
||||||
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
||||||
<p class="mt-6 text-lg text-center font-bold text-gray-900">
|
<p class="mt-6 text-lg text-center font-bold text-gray-900">
|
||||||
{$_('application_name')}
|
{$_('application_name')}
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold">
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold">
|
||||||
{$_('password-reset-failed')}
|
{$_('password-reset-failed')}
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-2 mb-2 text-sm text-center text-gray-900">
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900">
|
||||||
{$_('please-request-a-new-reset-mail')}
|
{$_('please-request-a-new-reset-mail')}
|
||||||
</p>
|
</p>
|
||||||
<div class="mt-6">
|
|
||||||
<div class="mt-6">
|
<div class="mt-6">
|
||||||
<a
|
<div class="mt-6">
|
||||||
href="/forgot_password/"
|
<a
|
||||||
class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
href="/forgot_password/"
|
||||||
{$_('request-a-new-reset-mail')}
|
class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
||||||
</a>
|
{$_('request-a-new-reset-mail')}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{:else if state === 'reset_in_progress'}
|
||||||
{:else if state==="reset_in_progress"}
|
|
||||||
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
||||||
<div class="max-w-md w-full py-12 px-6">
|
<div class="max-w-md w-full py-12 px-6">
|
||||||
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
||||||
@@ -102,11 +107,14 @@
|
|||||||
placeholder={$_('new-password')}
|
placeholder={$_('new-password')}
|
||||||
bind:value={password} />
|
bind:value={password} />
|
||||||
</div>
|
</div>
|
||||||
|
<PasswordStrength bind:password_change={password} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
<button
|
<button
|
||||||
on:click={set_new_password}
|
on:click={set_new_password}
|
||||||
|
disabled={!password_strong_enough(password)}
|
||||||
|
class:opacity-50={!password_strong_enough(password)}
|
||||||
type="submit"
|
type="submit"
|
||||||
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
||||||
<span class="absolute left-0 inset-y pl-3">
|
<span class="absolute left-0 inset-y pl-3">
|
||||||
|
|||||||
@@ -22,19 +22,19 @@
|
|||||||
if (e.keyCode === 13) {
|
if (e.keyCode === 13) {
|
||||||
if (createbtnenabled === true) {
|
if (createbtnenabled === true) {
|
||||||
createbtnenabled = false;
|
createbtnenabled = false;
|
||||||
submit();
|
submit_with_print();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
function submit() {
|
function submit_without_print() {
|
||||||
if (processed_last_submit === true) {
|
if (processed_last_submit === true) {
|
||||||
processed_last_submit = false;
|
processed_last_submit = false;
|
||||||
const toast = Toastify({
|
const toast = Toastify({
|
||||||
text: $_("creating-blanco-cards"),
|
text: $_("creating-blanco-cards"),
|
||||||
duration: -1,
|
duration: -1,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count)
|
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count, false)
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
bulk_modal_open = false;
|
bulk_modal_open = false;
|
||||||
//
|
//
|
||||||
@@ -54,6 +54,80 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function submit_with_print() {
|
||||||
|
if (processed_last_submit === true) {
|
||||||
|
processed_last_submit = false;
|
||||||
|
const toast = Toastify({
|
||||||
|
text: $_("creating-blanco-cards"),
|
||||||
|
duration: -1,
|
||||||
|
}).showToast();
|
||||||
|
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count, true)
|
||||||
|
.then((result) => {
|
||||||
|
bulk_modal_open = false;
|
||||||
|
//
|
||||||
|
Toastify({
|
||||||
|
text: $_("created-blanco-cards"),
|
||||||
|
duration: 500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
current_cards = current_cards.concat(result);
|
||||||
|
const toast = Toastify({
|
||||||
|
text: $_("generating-pdf"),
|
||||||
|
duration: -1,
|
||||||
|
}).showToast();
|
||||||
|
fetch(
|
||||||
|
`${config.baseurl}/documents/cards?&download=true&key=${config.documentserver_key}`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(result),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status != "200") {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-generation-failed"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
} else {
|
||||||
|
return response.blob();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((blob) => {
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
let a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = "Bulkcards.pdf";
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
a.remove();
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-successfully-generated"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
//
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
processed_last_submit = true;
|
||||||
|
//
|
||||||
|
toast.hideToast();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if bulk_modal_open}
|
{#if bulk_modal_open}
|
||||||
@@ -75,14 +149,14 @@
|
|||||||
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
aria-hidden="true">​</span>
|
aria-hidden="true">​</span>
|
||||||
<div
|
<div
|
||||||
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
aria-labelledby="modal-headline">
|
aria-labelledby="modal-headline">
|
||||||
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
<div class="sm:flex sm:items-start">
|
<div class="sm:flex sm:items-start">
|
||||||
<div
|
<div
|
||||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w- rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
||||||
<svg
|
<svg
|
||||||
class="h-6 w-6 text-blue-600"
|
class="h-6 w-6 text-blue-600"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
@@ -138,17 +212,25 @@
|
|||||||
<button
|
<button
|
||||||
disabled={!createbtnenabled}
|
disabled={!createbtnenabled}
|
||||||
class:opacity-50={!createbtnenabled}
|
class:opacity-50={!createbtnenabled}
|
||||||
on:click={submit}
|
on:click={submit_with_print}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
||||||
{$_('create')}
|
{$_('create-and-generate-pdf')}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
disabled={!createbtnenabled}
|
||||||
|
class:opacity-50={!createbtnenabled}
|
||||||
|
on:click={submit_without_print}
|
||||||
|
type="button"
|
||||||
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-400 text-base font-medium text-white hover:bg-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
||||||
|
{$_('create-without-pdf')}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
bulk_modal_open = false;
|
bulk_modal_open = false;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
|
class="mr-auto mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm">
|
||||||
{$_('cancel')}
|
{$_('cancel')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
import Select from "svelte-select";
|
import Select from "svelte-select";
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
|
import { tick } from "svelte";
|
||||||
$: delete_triggered = false;
|
$: delete_triggered = false;
|
||||||
$: address_valid_or_none =
|
$: address_valid_or_none =
|
||||||
(isAddress1Valid && iszipcodevalid && iscityvalid) ||
|
(isAddress1Valid && iszipcodevalid && iscityvalid) ||
|
||||||
@@ -20,6 +21,9 @@
|
|||||||
let original = "";
|
let original = "";
|
||||||
let original_object = {};
|
let original_object = {};
|
||||||
let contacts = [];
|
let contacts = [];
|
||||||
|
let valueCopy = null;
|
||||||
|
let areaDom;
|
||||||
|
let copied = false;
|
||||||
export let params;
|
export let params;
|
||||||
$: editable = {};
|
$: editable = {};
|
||||||
$: contact = {};
|
$: contact = {};
|
||||||
@@ -31,6 +35,7 @@
|
|||||||
$: sponsoring_contracts_show = true;
|
$: sponsoring_contracts_show = true;
|
||||||
$: cards_show = true;
|
$: cards_show = true;
|
||||||
$: generate_orgs = [original_object];
|
$: generate_orgs = [original_object];
|
||||||
|
$: registrationLink = `${config.baseurl}/selfservice/register/${editable.registrationKey}`;
|
||||||
const getContactLabel = (option) =>
|
const getContactLabel = (option) =>
|
||||||
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
|
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
|
||||||
const promise = RunnerOrganizationService.runnerOrganizationControllerGetOne(
|
const promise = RunnerOrganizationService.runnerOrganizationControllerGetOne(
|
||||||
@@ -98,6 +103,7 @@
|
|||||||
postdata
|
postdata
|
||||||
)
|
)
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
|
editable.registrationKey = resp.registrationKey;
|
||||||
original_object = Object.assign({}, editable);
|
original_object = Object.assign({}, editable);
|
||||||
original = JSON.stringify(original_object);
|
original = JSON.stringify(original_object);
|
||||||
Toastify({
|
Toastify({
|
||||||
@@ -110,9 +116,46 @@
|
|||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function copy() {
|
||||||
|
if(!editable.registrationKey){
|
||||||
|
Toastify({
|
||||||
|
text: $_('you-have-to-save-your-changes-to-generate-a-link'),
|
||||||
|
duration: 500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
valueCopy = registrationLink;
|
||||||
|
await tick();
|
||||||
|
areaDom.focus();
|
||||||
|
areaDom.select();
|
||||||
|
try {
|
||||||
|
const successful = document.execCommand("copy");
|
||||||
|
if (!successful) {
|
||||||
|
throw new Error();
|
||||||
|
}
|
||||||
|
Toastify({
|
||||||
|
text: $_("copied-link-to-clipboard"),
|
||||||
|
duration: 500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
copied = true;
|
||||||
|
} catch (err) {
|
||||||
|
Toastify({
|
||||||
|
text: $_("error-whyile-copying-to-clipboard"),
|
||||||
|
duration: 500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
|
// we can notifi by event or storage about copy status
|
||||||
|
valueCopy = null;
|
||||||
|
}
|
||||||
export let import_modal_open = false;
|
export let import_modal_open = false;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{#if valueCopy != null}<textarea bind:this={areaDom}>{valueCopy}</textarea>{/if}
|
||||||
<ImportRunnerModal
|
<ImportRunnerModal
|
||||||
on:cancelDelete={(event) => {
|
on:cancelDelete={(event) => {
|
||||||
import_modal_open = false;
|
import_modal_open = false;
|
||||||
@@ -132,9 +175,7 @@
|
|||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_orgs />
|
bind:generate_orgs />
|
||||||
<GenerateRunnerCards
|
<GenerateRunnerCards bind:cards_show bind:generate_orgs />
|
||||||
bind:cards_show
|
|
||||||
bind:generate_orgs />
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:IMPORT')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:IMPORT')}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
@@ -277,99 +318,151 @@
|
|||||||
on:select={(selectedValue) => (editable.contact = selectedValue.detail.value)}
|
on:select={(selectedValue) => (editable.contact = selectedValue.detail.value)}
|
||||||
on:clear={() => (editable.contact = null)} />
|
on:clear={() => (editable.contact = null)} />
|
||||||
</div>
|
</div>
|
||||||
<!-- -->
|
<div>
|
||||||
<div class="flex items-start mt-2">
|
<div class="flex items-start mt-2">
|
||||||
<div class="flex items-center h-5">
|
<div class="flex items-center h-5">
|
||||||
<input
|
<input
|
||||||
bind:checked={editable.address_checked}
|
bind:checked={editable.registrationEnabled}
|
||||||
id="comments"
|
id="comments"
|
||||||
name="comments"
|
name="comments"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
||||||
|
</div>
|
||||||
|
<div class="ml-3 text-sm">
|
||||||
|
<label
|
||||||
|
for="comments"
|
||||||
|
class="font-medium text-gray-700">{$_('selfservice-registration')}</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-3 text-sm">
|
<div>
|
||||||
<label
|
{#if editable.registrationEnabled}
|
||||||
for="comments"
|
<div class="text-sm w-full">
|
||||||
class="font-medium text-gray-700">{$_('address')}</label>
|
<div on:click={copy} class="inline-flex w-full">
|
||||||
|
<p
|
||||||
|
name="token"
|
||||||
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
|
||||||
|
{#if editable.registrationKey}
|
||||||
|
{registrationLink}
|
||||||
|
{:else}
|
||||||
|
{$_('you-have-to-save-your-changes-to-generate-a-link')}
|
||||||
|
{/if}
|
||||||
|
</p>
|
||||||
|
<div
|
||||||
|
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="24"
|
||||||
|
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{#if editable.registrationKey}
|
||||||
|
<p class="text-gray-500 text-xs">
|
||||||
|
{$_('click-to-copy-the-link-into-your-clipboard')}
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
<!-- -->
|
||||||
|
<div>
|
||||||
|
<div class="flex items-start mt-2">
|
||||||
|
<div class="flex items-center h-5">
|
||||||
|
<input
|
||||||
|
bind:checked={editable.address_checked}
|
||||||
|
id="comments"
|
||||||
|
name="comments"
|
||||||
|
type="checkbox"
|
||||||
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
||||||
|
</div>
|
||||||
|
<div class="ml-3 text-sm">
|
||||||
|
<label
|
||||||
|
for="comments"
|
||||||
|
class="font-medium text-gray-700">{$_('address')}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{#if editable.address_checked === true}
|
||||||
|
<div class="col-span-6">
|
||||||
|
<label
|
||||||
|
for="address1"
|
||||||
|
class="block text-sm font-medium text-gray-700">{$_('address')}</label>
|
||||||
|
<input
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder="Address"
|
||||||
|
class:border-red-500={!isAddress1Valid}
|
||||||
|
class:focus:border-red-500={!isAddress1Valid}
|
||||||
|
class:focus:ring-red-500={!isAddress1Valid}
|
||||||
|
bind:value={editable.address.address1}
|
||||||
|
type="text"
|
||||||
|
name="address1"
|
||||||
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
||||||
|
{#if !isAddress1Valid}
|
||||||
|
<span
|
||||||
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
||||||
|
{$_('address-is-required')}
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<div class="col-span-6">
|
||||||
|
<label
|
||||||
|
for="address2"
|
||||||
|
class="block text-sm font-medium text-gray-700">{$_('apartment-suite-etc')}</label>
|
||||||
|
<input
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder={$_('apartment-suite-etc')}
|
||||||
|
bind:value={editable.address.address2}
|
||||||
|
type="text"
|
||||||
|
name="address2"
|
||||||
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
||||||
|
</div>
|
||||||
|
<div class="col-span-6">
|
||||||
|
<label
|
||||||
|
for="zipcode"
|
||||||
|
class="block text-sm font-medium text-gray-700">{$_('zip-postal-code')}</label>
|
||||||
|
<input
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder={$_('zip-postal-code')}
|
||||||
|
class:border-red-500={!iszipcodevalid}
|
||||||
|
class:focus:border-red-500={!iszipcodevalid}
|
||||||
|
class:focus:ring-red-500={!iszipcodevalid}
|
||||||
|
bind:value={editable.address.postalcode}
|
||||||
|
type="text"
|
||||||
|
name="zipcode"
|
||||||
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
||||||
|
{#if !iszipcodevalid}
|
||||||
|
<span
|
||||||
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
||||||
|
{$_('valid-zipcode-postal-code-is-required')}
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<div class="col-span-6">
|
||||||
|
<label
|
||||||
|
for="city"
|
||||||
|
class="block text-sm font-medium text-gray-700">{$_('city')}</label>
|
||||||
|
<input
|
||||||
|
autocomplete="off"
|
||||||
|
placeholder={$_('city')}
|
||||||
|
class:border-red-500={!iscityvalid}
|
||||||
|
class:focus:border-red-500={!iscityvalid}
|
||||||
|
class:focus:ring-red-500={!iscityvalid}
|
||||||
|
bind:value={editable.address.city}
|
||||||
|
type="text"
|
||||||
|
name="city"
|
||||||
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
||||||
|
{#if !iscityvalid}
|
||||||
|
<span
|
||||||
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
||||||
|
{$_('valid-city-is-required')}
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{#if editable.address_checked === true}
|
|
||||||
<div class="col-span-6">
|
|
||||||
<label
|
|
||||||
for="address1"
|
|
||||||
class="block text-sm font-medium text-gray-700">{$_('address')}</label>
|
|
||||||
<input
|
|
||||||
autocomplete="off"
|
|
||||||
placeholder="Address"
|
|
||||||
class:border-red-500={!isAddress1Valid}
|
|
||||||
class:focus:border-red-500={!isAddress1Valid}
|
|
||||||
class:focus:ring-red-500={!isAddress1Valid}
|
|
||||||
bind:value={editable.address.address1}
|
|
||||||
type="text"
|
|
||||||
name="address1"
|
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
|
||||||
{#if !isAddress1Valid}
|
|
||||||
<span
|
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
|
||||||
{$_('address-is-required')}
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
<div class="col-span-6">
|
|
||||||
<label
|
|
||||||
for="address2"
|
|
||||||
class="block text-sm font-medium text-gray-700">{$_('apartment-suite-etc')}</label>
|
|
||||||
<input
|
|
||||||
autocomplete="off"
|
|
||||||
placeholder={$_('apartment-suite-etc')}
|
|
||||||
bind:value={editable.address.address2}
|
|
||||||
type="text"
|
|
||||||
name="address2"
|
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
|
||||||
</div>
|
|
||||||
<div class="col-span-6">
|
|
||||||
<label
|
|
||||||
for="zipcode"
|
|
||||||
class="block text-sm font-medium text-gray-700">{$_('zip-postal-code')}</label>
|
|
||||||
<input
|
|
||||||
autocomplete="off"
|
|
||||||
placeholder={$_('zip-postal-code')}
|
|
||||||
class:border-red-500={!iszipcodevalid}
|
|
||||||
class:focus:border-red-500={!iszipcodevalid}
|
|
||||||
class:focus:ring-red-500={!iszipcodevalid}
|
|
||||||
bind:value={editable.address.postalcode}
|
|
||||||
type="text"
|
|
||||||
name="zipcode"
|
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
|
||||||
{#if !iszipcodevalid}
|
|
||||||
<span
|
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
|
||||||
{$_('valid-zipcode-postal-code-is-required')}
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
<div class="col-span-6">
|
|
||||||
<label
|
|
||||||
for="city"
|
|
||||||
class="block text-sm font-medium text-gray-700">{$_('city')}</label>
|
|
||||||
<input
|
|
||||||
autocomplete="off"
|
|
||||||
placeholder={$_('city')}
|
|
||||||
class:border-red-500={!iscityvalid}
|
|
||||||
class:focus:border-red-500={!iscityvalid}
|
|
||||||
class:focus:ring-red-500={!iscityvalid}
|
|
||||||
bind:value={editable.address.city}
|
|
||||||
type="text"
|
|
||||||
name="city"
|
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
|
||||||
{#if !iscityvalid}
|
|
||||||
<span
|
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
|
||||||
{$_('valid-city-is-required')}
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</section>
|
</section>
|
||||||
{:else}
|
{:else}
|
||||||
{#await promise}
|
{#await promise}
|
||||||
|
|||||||
@@ -1,212 +1,212 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
let modal_open = false;
|
let modal_open = false;
|
||||||
let delete_org = {};
|
let delete_org = {};
|
||||||
import { RunnerOrganizationService } from "@odit/lfk-client-js";
|
import { RunnerOrganizationService } from "@odit/lfk-client-js";
|
||||||
import store from "../../store";
|
import store from "../../store";
|
||||||
import OrgsEmptyState from "./OrgsEmptyState.svelte";
|
import OrgsEmptyState from "./OrgsEmptyState.svelte";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import ConfirmOrgDeletion from "./ConfirmOrgDeletion.svelte";
|
import ConfirmOrgDeletion from "./ConfirmOrgDeletion.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
$: searchvalue = "";
|
$: searchvalue = "";
|
||||||
$: active_deletes = [];
|
$: active_deletes = [];
|
||||||
$: sponsoring_contracts_show = current_organizations.some((r) => r.is_selected === true);
|
$: sponsoring_contracts_show = current_organizations.some((r) => r.is_selected === true);
|
||||||
$: cards_show = current_organizations.some((r) => r.is_selected === true);
|
$: cards_show = current_organizations.some((r) => r.is_selected === true);
|
||||||
$: generate_orgs = current_organizations.filter((r) => r.is_selected === true);
|
$: generate_orgs = current_organizations.filter((r) => r.is_selected === true);
|
||||||
export let current_organizations = [];
|
export let current_organizations = [];
|
||||||
|
|
||||||
const promise = RunnerOrganizationService.runnerOrganizationControllerGetAll().then(
|
const promise = RunnerOrganizationService.runnerOrganizationControllerGetAll().then(
|
||||||
(val) => {
|
(val) => {
|
||||||
current_organizations = val;
|
current_organizations = val;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<ConfirmOrgDeletion
|
<ConfirmOrgDeletion
|
||||||
on:cancelDelete={(event) => {
|
on:cancelDelete={(event) => {
|
||||||
modal_open = false;
|
modal_open = false;
|
||||||
active_deletes[event.detail.id] = false;
|
active_deletes[event.detail.id] = false;
|
||||||
}}
|
}}
|
||||||
bind:modal_open
|
bind:modal_open
|
||||||
bind:delete_org />
|
bind:delete_org />
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('ORGANIZATION:GET')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('ORGANIZATION:GET')}
|
||||||
{#await promise}
|
{#await promise}
|
||||||
<div
|
<div
|
||||||
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
<p class="font-bold">{$_('organizations-are-being-loaded')}</p>
|
<p class="font-bold">{$_('organizations-are-being-loaded')}</p>
|
||||||
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
|
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
|
||||||
</div>
|
</div>
|
||||||
{:then}
|
{:then}
|
||||||
{#if current_organizations.length === 0}
|
{#if current_organizations.length === 0}
|
||||||
<OrgsEmptyState />
|
<OrgsEmptyState />
|
||||||
{:else}
|
{:else}
|
||||||
<input
|
<input
|
||||||
type="search"
|
type="search"
|
||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="gridjs-input gridjs-search-input mb-4" />
|
||||||
<div class="h-12">
|
<div class="h-12">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_orgs />
|
bind:generate_orgs />
|
||||||
<GenerateRunnerCards
|
<GenerateRunnerCards
|
||||||
bind:cards_show
|
bind:cards_show
|
||||||
bind:generate_orgs />
|
bind:generate_orgs />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
<thead class="bg-gray-50">
|
<thead class="bg-gray-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
<span
|
<span
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
const newstate = !current_organizations.some((r) => r.is_selected === true);
|
const newstate = !current_organizations.some((r) => r.is_selected === true);
|
||||||
current_organizations = current_organizations.map((r) => {
|
current_organizations = current_organizations.map((r) => {
|
||||||
r.is_selected = newstate;
|
r.is_selected = newstate;
|
||||||
return r;
|
return r;
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
class="underline cursor-pointer select-none">{#if current_organizations.some((r) => r.is_selected === true)}
|
class="underline cursor-pointer select-none">{#if current_organizations.some((r) => r.is_selected === true)}
|
||||||
{$_('deselect-all')}
|
{$_('deselect-all')}
|
||||||
{:else}{$_('select-all')}{/if}
|
{:else}{$_('select-all')}{/if}
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('name')}
|
{$_('name')}
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('address')}
|
{$_('address')}
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('contact')}
|
{$_('contact')}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="relative px-6 py-3">
|
<th scope="col" class="relative px-6 py-3">
|
||||||
<span class="sr-only">{$_('action')}</span>
|
<span class="sr-only">{$_('action')}</span>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-200">
|
<tbody class="divide-y divide-gray-200">
|
||||||
{#each current_organizations as o}
|
{#each current_organizations as o}
|
||||||
{#if Object.values(o)
|
{#if Object.values(o)
|
||||||
.toString()
|
.toString()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.includes(searchvalue)}
|
.includes(searchvalue)}
|
||||||
<tr data-rowid="org_{o.id}">
|
<tr data-rowid="org_{o.id}">
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<input
|
<input
|
||||||
bind:checked={o.is_selected}
|
bind:checked={o.is_selected}
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{o.name}
|
{o.name}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{#if o.address.address1 !== null}
|
{#if o.address.address1 !== null}
|
||||||
{o.address.address1}<br />
|
{o.address.address1}<br />
|
||||||
{o.address.address2 || ''}<br />
|
{o.address.address2 || ''}<br />
|
||||||
{o.address.postalcode}
|
{o.address.postalcode}
|
||||||
{o.address.city}
|
{o.address.city}
|
||||||
{o.address.country}
|
{o.address.country}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{#if o.contact}
|
{#if o.contact}
|
||||||
<a
|
<a
|
||||||
href="../contacts/{o.contact.id}"
|
href="../contacts/{o.contact.id}"
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{o.contact.firstname}
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{o.contact.firstname}
|
||||||
{o.contact.middlename || ''}
|
{o.contact.middlename || ''}
|
||||||
{o.contact.lastname}</a>
|
{o.contact.lastname}</a>
|
||||||
{:else}{$_('no-contact-specified')}{/if}
|
{:else}{$_('no-contact-specified')}{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
{#if active_deletes[o.id] === true}
|
{#if active_deletes[o.id] === true}
|
||||||
<td
|
<td
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
active_deletes[o.id] = false;
|
active_deletes[o.id] = false;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">{$_('cancel-delete')}</button>
|
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">{$_('cancel-delete')}</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
RunnerOrganizationService.runnerOrganizationControllerRemove(o.id, false)
|
RunnerOrganizationService.runnerOrganizationControllerRemove(o.id, false)
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
current_organizations = current_organizations.filter((obj) => obj.id !== o.id);
|
current_organizations = current_organizations.filter((obj) => obj.id !== o.id);
|
||||||
Toastify({
|
Toastify({
|
||||||
text: 'Organization deleted',
|
text: 'Organization deleted',
|
||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor:
|
backgroundColor:
|
||||||
'linear-gradient(to right, #00b09b, #96c93d)',
|
'linear-gradient(to right, #00b09b, #96c93d)',
|
||||||
}).showToast();
|
}).showToast();
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
modal_open = true;
|
modal_open = true;
|
||||||
delete_org = o;
|
delete_org = o;
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
|
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
|
||||||
</td>
|
</td>
|
||||||
{:else}
|
{:else}
|
||||||
<td
|
<td
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||||
<a
|
<a
|
||||||
href="./{o.id}"
|
href="./{o.id}"
|
||||||
class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
|
class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('ORGANIZATION:DELETE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('ORGANIZATION:DELETE')}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
active_deletes[o.id] = true;
|
active_deletes[o.id] = true;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
|
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
|
||||||
{/if}
|
{/if}
|
||||||
</td>
|
</td>
|
||||||
{/if}
|
{/if}
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{:catch error}
|
{:catch error}
|
||||||
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
||||||
<span class="inline-block align-middle mr-8">
|
<span class="inline-block align-middle mr-8">
|
||||||
<b class="capitalize">{$_('general_promise_error')}</b>
|
<b class="capitalize">{$_('general_promise_error')}</b>
|
||||||
{error}
|
{error}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/await}
|
{/await}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
}).showToast();
|
}).showToast();
|
||||||
let count = 0;
|
let count = 0;
|
||||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||||
for await (const t of generate_teams) {
|
for (const t of generate_teams) {
|
||||||
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||||
t.id
|
t.id
|
||||||
);
|
);
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
}).showToast();
|
}).showToast();
|
||||||
let count = 0;
|
let count = 0;
|
||||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||||
for await (const o of generate_orgs) {
|
for (const o of generate_orgs) {
|
||||||
const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||||
o.id
|
o.id
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,273 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
import {
|
||||||
|
DonationService,
|
||||||
|
RunnerTeamService,
|
||||||
|
RunnerOrganizationService
|
||||||
|
} from "@odit/lfk-client-js";
|
||||||
|
import Toastify from "toastify-js";
|
||||||
|
export let certificates_show = false;
|
||||||
|
export let generate_runners = [];
|
||||||
|
export let generate_orgs = [];
|
||||||
|
export let generate_teams = [];
|
||||||
|
$: certificates_dropdown_open = false;
|
||||||
|
document.addEventListener("click", function (e) {
|
||||||
|
if (
|
||||||
|
e.target.parentNode?.parentNode?.id != "certificates:dropdown" &&
|
||||||
|
e.target.parentNode?.parentNode?.id != "certificates:dropdown:menu"
|
||||||
|
) {
|
||||||
|
certificates_dropdown_open = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function generateCertificates(locale) {
|
||||||
|
certificates_dropdown_open = false;
|
||||||
|
|
||||||
|
if (generate_orgs.length > 0) {
|
||||||
|
generateOrgCertificates(locale);
|
||||||
|
} else if (generate_teams.length > 0) {
|
||||||
|
generateTeamCertificates(locale);
|
||||||
|
} else {
|
||||||
|
generateRunnerCertificates(locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateRunnerCertificates(locale) {
|
||||||
|
const toast = Toastify({
|
||||||
|
text: $_("generating-pdf"),
|
||||||
|
duration: -1,
|
||||||
|
}).showToast();
|
||||||
|
const current_donations = await DonationService.donationControllerGetAll();
|
||||||
|
let certificateRunners = [];
|
||||||
|
for (let runner of generate_runners) {
|
||||||
|
runner.distanceDonations = current_donations.find((d) => d.runner?.id == runner.id) || [];
|
||||||
|
certificateRunners.push(runner);
|
||||||
|
}
|
||||||
|
fetch(
|
||||||
|
`${config.baseurl}/documents/certificates?locale=${locale}&download=true&key=${config.documentserver_key}`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(certificateRunners),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status != "200") {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-generation-failed"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
} else {
|
||||||
|
return response.blob();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((blob) => {
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
let a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = "Certificates.pdf";
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
a.remove();
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-successfully-generated"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
})
|
||||||
|
.catch((err) => {});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateTeamCertificates(locale) {
|
||||||
|
const toast = Toastify({
|
||||||
|
text: $_("generating-pdfs"),
|
||||||
|
duration: -1,
|
||||||
|
}).showToast();
|
||||||
|
let count = 0;
|
||||||
|
const current_donations = await DonationService.donationControllerGetAll();
|
||||||
|
for (const t of generate_teams) {
|
||||||
|
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||||
|
t.id
|
||||||
|
);
|
||||||
|
let certificateRunners = [];
|
||||||
|
for (let runner of runners) {
|
||||||
|
runner.distanceDonations = current_donations.find((d) => d.runner?.id == runner.id) || [];
|
||||||
|
certificateRunners.push(runner);
|
||||||
|
}
|
||||||
|
console.log(certificateRunners)
|
||||||
|
fetch(
|
||||||
|
`${config.baseurl}/documents/certificates?locale=${locale}&download=true&key=${config.documentserver_key}`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(certificateRunners),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status != "200") {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-generation-failed"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
} else {
|
||||||
|
return response.blob();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((blob) => {
|
||||||
|
count++;
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
let a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = "Certificates_" + t.name + ".pdf";
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
a.remove();
|
||||||
|
if (count === generate_teams.length) {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdfs-successfully-generated"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateOrgCertificates(locale) {
|
||||||
|
const toast = Toastify({
|
||||||
|
text: $_("generating-pdf"),
|
||||||
|
duration: -1,
|
||||||
|
}).showToast();
|
||||||
|
let count = 0;
|
||||||
|
const current_donations = await DonationService.donationControllerGetAll();
|
||||||
|
for (const o of generate_orgs) {
|
||||||
|
const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||||
|
o.id
|
||||||
|
);
|
||||||
|
let certificateRunners = [];
|
||||||
|
for (let runner of runners) {
|
||||||
|
runner.distanceDonations = current_donations.find((d) => d.runner?.id == runner.id) || [];
|
||||||
|
certificateRunners.push(runner);
|
||||||
|
}
|
||||||
|
fetch(
|
||||||
|
`${config.baseurl}/documents/certificates?locale=${locale}&download=true&key=${config.documentserver_key}`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(certificateRunners),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
if (response.status != "200") {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdf-generation-failed"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
|
}).showToast();
|
||||||
|
} else {
|
||||||
|
return response.blob();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then((blob) => {
|
||||||
|
count++;
|
||||||
|
const url = window.URL.createObjectURL(blob);
|
||||||
|
let a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = "Certificates_" + o.name + ".pdf";
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
a.remove();
|
||||||
|
if (count === generate_orgs.length) {
|
||||||
|
toast.hideToast();
|
||||||
|
Toastify({
|
||||||
|
text: $_("pdfs-successfully-generated"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor:
|
||||||
|
"linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if certificates_show}
|
||||||
|
<div id="certificates:dropdown" class="relative inline-block">
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
certificates_dropdown_open = !certificates_dropdown_open;
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-600 text-base font-medium text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 sm:ml-3 sm:w-auto sm:text-sm inline-flex"
|
||||||
|
id="options-menu"
|
||||||
|
aria-haspopup="true"
|
||||||
|
aria-expanded="true">
|
||||||
|
{$_('generate-runner-certificates')}
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
class="-mr-1 ml-2 h-5 w-5"><path
|
||||||
|
fill="none"
|
||||||
|
d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M3 19h18v2H3v-2zm10-5.83l6.07-6.07 1.42 1.41L12 17 3.52 8.52l1.4-1.42L11 13.17V2h2v11.17z" /></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{#if certificates_dropdown_open}
|
||||||
|
<div
|
||||||
|
class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"
|
||||||
|
id="certificates:dropdown:menu">
|
||||||
|
<div
|
||||||
|
class="py-1"
|
||||||
|
role="menu"
|
||||||
|
aria-orientation="vertical"
|
||||||
|
aria-labelledby="options-menu">
|
||||||
|
<span
|
||||||
|
class="block w-full text-left px-4 py-2 text-sm text-gray-700">{$_('select-language')}</span>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
generateCertificates('de');
|
||||||
|
}}
|
||||||
|
type="submit"
|
||||||
|
class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
|
||||||
|
role="menuitem">
|
||||||
|
{$_('german')}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
generateCertificates('en');
|
||||||
|
}}
|
||||||
|
type="submit"
|
||||||
|
class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900"
|
||||||
|
role="menuitem">
|
||||||
|
{$_('english')}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
||||||
import { RunnerOrganizationService, RunnerTeamService } from "@odit/lfk-client-js";
|
import {
|
||||||
|
RunnerOrganizationService,
|
||||||
|
RunnerTeamService,
|
||||||
|
} from "@odit/lfk-client-js";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
export let sponsoring_contracts_show = false;
|
export let sponsoring_contracts_show = false;
|
||||||
export let generate_runners = [];
|
export let generate_runners = [];
|
||||||
@@ -34,7 +37,7 @@
|
|||||||
duration: -1,
|
duration: -1,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
let count = 0;
|
let count = 0;
|
||||||
for await (const t of generate_teams) {
|
for (const t of generate_teams) {
|
||||||
count++;
|
count++;
|
||||||
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||||
t.id
|
t.id
|
||||||
@@ -89,7 +92,7 @@
|
|||||||
text: $_("generating-pdf"),
|
text: $_("generating-pdf"),
|
||||||
duration: -1,
|
duration: -1,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
for await (const o of generate_orgs) {
|
for (const o of generate_orgs) {
|
||||||
const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||||
o.id
|
o.id
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
import { getLocaleFromNavigator, _ } from "svelte-i18n";
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
|
import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
|
||||||
import store from "../../store";
|
import store from "../../store";
|
||||||
import {
|
import {
|
||||||
RunnerService,
|
RunnerService,
|
||||||
@@ -36,6 +37,7 @@
|
|||||||
editable.group != null;
|
editable.group != null;
|
||||||
$: sponsoring_contracts_show = true;
|
$: sponsoring_contracts_show = true;
|
||||||
$: cards_show = true;
|
$: cards_show = true;
|
||||||
|
$: certificates_show = true;
|
||||||
$: generate_runners = [original_data_pdf];
|
$: generate_runners = [original_data_pdf];
|
||||||
runner_promise.then((data) => {
|
runner_promise.then((data) => {
|
||||||
data_loaded = true;
|
data_loaded = true;
|
||||||
@@ -158,7 +160,10 @@
|
|||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_runners />
|
bind:generate_runners />
|
||||||
<GenerateRunnerCards
|
<GenerateRunnerCards
|
||||||
bind:sponsoring_contracts_show
|
bind:cards_show
|
||||||
|
bind:generate_runners />
|
||||||
|
<GenerateRunnerCertificates
|
||||||
|
bind:certificates_show
|
||||||
bind:generate_runners />
|
bind:generate_runners />
|
||||||
{#if !delete_triggered}
|
{#if !delete_triggered}
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
import Select from "svelte-select";
|
import Select from "svelte-select";
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
|
import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
|
||||||
$: searchvalue = "";
|
$: searchvalue = "";
|
||||||
$: active_deletes = [];
|
$: active_deletes = [];
|
||||||
export let current_runners = [];
|
export let current_runners = [];
|
||||||
@@ -27,6 +28,9 @@
|
|||||||
$: cards_show = current_runners.some(
|
$: cards_show = current_runners.some(
|
||||||
(r) => r.is_selected === true
|
(r) => r.is_selected === true
|
||||||
);
|
);
|
||||||
|
$: certificates_show = current_runners.some(
|
||||||
|
(r) => r.is_selected === true
|
||||||
|
);
|
||||||
$: generate_runners = current_runners.filter((r) => r.is_selected === true);
|
$: generate_runners = current_runners.filter((r) => r.is_selected === true);
|
||||||
$: teams = [];
|
$: teams = [];
|
||||||
$: orgs = [];
|
$: orgs = [];
|
||||||
@@ -92,6 +96,9 @@
|
|||||||
<GenerateRunnerCards
|
<GenerateRunnerCards
|
||||||
bind:cards_show
|
bind:cards_show
|
||||||
bind:generate_runners />
|
bind:generate_runners />
|
||||||
|
<GenerateRunnerCertificates
|
||||||
|
bind:certificates_show
|
||||||
|
bind:generate_runners />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
|
|||||||
@@ -23,14 +23,14 @@
|
|||||||
throw new Error();
|
throw new Error();
|
||||||
}
|
}
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('copied-token-to-clipboard'),
|
text: $_("copied-token-to-clipboard"),
|
||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
copied = true;
|
copied = true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('error-whyile-copying-to-clipboard'),
|
text: $_("error-whyile-copying-to-clipboard"),
|
||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor:
|
backgroundColor:
|
||||||
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
@@ -75,7 +75,9 @@
|
|||||||
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z" /></svg>
|
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z" /></svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
<h3 class="text-lg leading-6 font-medium text-gray-900">{$_('token')}</h3>
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
|
{$_('token')}
|
||||||
|
</h3>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
{$_('the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again')}
|
{$_('the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again')}
|
||||||
@@ -106,7 +108,9 @@
|
|||||||
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-500 text-xs">{$_('click-to-copy-token-to-clipboard')}</p>
|
<p class="text-gray-500 text-xs">
|
||||||
|
{$_('click-to-copy-token-to-clipboard')}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
import { MeService } from "@odit/lfk-client-js";
|
import { MeService } from "@odit/lfk-client-js";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import ConfirmProfileDeletion from "./ConfirmProfileDeletion.svelte";
|
import ConfirmProfileDeletion from "./ConfirmProfileDeletion.svelte";
|
||||||
|
import PasswordStrength, {
|
||||||
|
password_strong_enough_and_equal,
|
||||||
|
} from "../auth/PasswordStrength.svelte";
|
||||||
$: data_loaded = false;
|
$: data_loaded = false;
|
||||||
$: delete_triggered = false;
|
$: delete_triggered = false;
|
||||||
$: original_data = {};
|
$: original_data = {};
|
||||||
@@ -15,8 +18,10 @@
|
|||||||
JSON.stringify(editable) === JSON.stringify(original_data)
|
JSON.stringify(editable) === JSON.stringify(original_data)
|
||||||
);
|
);
|
||||||
$: save_enabled = changes_performed && isEmail(editable.email);
|
$: save_enabled = changes_performed && isEmail(editable.email);
|
||||||
$: update_password_enabled =
|
$: update_password_enabled = password_strong_enough_and_equal(
|
||||||
password_change.length > 0 && password_change === password_confirm;
|
password_change,
|
||||||
|
password_confirm
|
||||||
|
);
|
||||||
const user_promise = MeService.meControllerGet().then((data) => {
|
const user_promise = MeService.meControllerGet().then((data) => {
|
||||||
data_loaded = true;
|
data_loaded = true;
|
||||||
data.groups = data.groups.map((g) => g.id);
|
data.groups = data.groups.map((g) => g.id);
|
||||||
@@ -45,7 +50,7 @@
|
|||||||
function changePassword() {
|
function changePassword() {
|
||||||
if (data_loaded === true && update_password_enabled) {
|
if (data_loaded === true && update_password_enabled) {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('changing-your-password'),
|
text: $_("changing-your-password"),
|
||||||
duration: 2500,
|
duration: 2500,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
let postdata = Object.assign({}, original_data);
|
let postdata = Object.assign({}, original_data);
|
||||||
@@ -56,7 +61,7 @@
|
|||||||
password_change = "";
|
password_change = "";
|
||||||
postdata = {};
|
postdata = {};
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('password-changed'),
|
text: $_("password-changed"),
|
||||||
duration: 2500,
|
duration: 2500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
@@ -242,10 +247,7 @@
|
|||||||
class="border-gray-300 placeholder-gray-500 appearance-none rounded-md relative block w-full px-3 py-2 border focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
|
class="border-gray-300 placeholder-gray-500 appearance-none rounded-md relative block w-full px-3 py-2 border focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
|
||||||
placeholder={$_('password')} />
|
placeholder={$_('password')} />
|
||||||
</div>
|
</div>
|
||||||
{#if password_change != password_confirm && password_change.length > 0}
|
<PasswordStrength bind:password_change bind:password_confirm />
|
||||||
<span
|
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">{$_('passwords-dont-match')}</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="px-4 py-3 bg-gray-50 text-right sm:px-6">
|
<div class="px-4 py-3 bg-gray-50 text-right sm:px-6">
|
||||||
<button
|
<button
|
||||||
@@ -257,9 +259,9 @@
|
|||||||
{$_('update-password')}
|
{$_('update-password')}
|
||||||
</button>
|
</button>
|
||||||
{#if update_password_enabled}
|
{#if update_password_enabled}
|
||||||
<p>
|
<p>
|
||||||
{$_('after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that')}
|
{$_('after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that')}
|
||||||
</p>
|
</p>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,217 +1,217 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getLocaleFromNavigator, t, _ } from "svelte-i18n";
|
import { getLocaleFromNavigator, t, _ } from "svelte-i18n";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { RunnerTeamService } from "@odit/lfk-client-js";
|
import { RunnerTeamService } from "@odit/lfk-client-js";
|
||||||
const teams_promise = RunnerTeamService.runnerTeamControllerGetAll();
|
const teams_promise = RunnerTeamService.runnerTeamControllerGetAll();
|
||||||
import store, { users as usersstore } from "../../store.js";
|
import store, { users as usersstore } from "../../store.js";
|
||||||
import TeamsEmptyState from "./TeamsEmptyState.svelte";
|
import TeamsEmptyState from "./TeamsEmptyState.svelte";
|
||||||
import ConfirmTeamDeletion from "./ConfirmTeamDeletion.svelte";
|
import ConfirmTeamDeletion from "./ConfirmTeamDeletion.svelte";
|
||||||
import { clickOutside } from "../base/outsideclick";
|
import { clickOutside } from "../base/outsideclick";
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
$: searchvalue = "";
|
$: searchvalue = "";
|
||||||
$: active_deletes = [];
|
$: active_deletes = [];
|
||||||
$: sponsoring_contracts_show = current_teams.some(
|
$: sponsoring_contracts_show = current_teams.some(
|
||||||
(r) => r.is_selected === true
|
(r) => r.is_selected === true
|
||||||
);
|
);
|
||||||
$: cards_show = current_teams.some(
|
$: cards_show = current_teams.some(
|
||||||
(r) => r.is_selected === true
|
(r) => r.is_selected === true
|
||||||
);
|
);
|
||||||
$: generate_teams = current_teams.filter((r) => r.is_selected === true);
|
$: generate_teams = current_teams.filter((r) => r.is_selected === true);
|
||||||
export let current_teams = [];
|
export let current_teams = [];
|
||||||
let modal_open = false;
|
let modal_open = false;
|
||||||
let delete_team = {};
|
let delete_team = {};
|
||||||
usersstore.subscribe((val) => {
|
usersstore.subscribe((val) => {
|
||||||
current_teams = val;
|
current_teams = val;
|
||||||
});
|
});
|
||||||
teams_promise.then((data) => {
|
teams_promise.then((data) => {
|
||||||
usersstore.set(data);
|
usersstore.set(data);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<ConfirmTeamDeletion
|
<ConfirmTeamDeletion
|
||||||
on:cancelDelete={(event) => {
|
on:cancelDelete={(event) => {
|
||||||
modal_open = false;
|
modal_open = false;
|
||||||
active_deletes[event.detail.id] = false;
|
active_deletes[event.detail.id] = false;
|
||||||
}}
|
}}
|
||||||
bind:modal_open
|
bind:modal_open
|
||||||
bind:delete_team />
|
bind:delete_team />
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:GET')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:GET')}
|
||||||
{#await teams_promise}
|
{#await teams_promise}
|
||||||
<div
|
<div
|
||||||
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
||||||
role="alert">
|
role="alert">
|
||||||
<p class="font-bold">{$_('teams-are-being-loaded')}</p>
|
<p class="font-bold">{$_('teams-are-being-loaded')}</p>
|
||||||
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
|
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
|
||||||
</div>
|
</div>
|
||||||
{:then}
|
{:then}
|
||||||
{#if current_teams.length === 0}
|
{#if current_teams.length === 0}
|
||||||
<TeamsEmptyState />
|
<TeamsEmptyState />
|
||||||
{:else}
|
{:else}
|
||||||
<input
|
<input
|
||||||
type="search"
|
type="search"
|
||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="gridjs-input gridjs-search-input mb-4" />
|
||||||
<div class="h-12">
|
<div class="h-12">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_teams />
|
bind:generate_teams />
|
||||||
<GenerateRunnerCards
|
<GenerateRunnerCards
|
||||||
bind:cards_show
|
bind:cards_show
|
||||||
bind:generate_teams />
|
bind:generate_teams />
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
<thead class="bg-gray-50">
|
<thead class="bg-gray-50">
|
||||||
<tr>
|
<tr>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
<span
|
<span
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
const newstate = !current_teams.some((r) => r.is_selected === true);
|
const newstate = !current_teams.some((r) => r.is_selected === true);
|
||||||
current_teams = current_teams.map((r) => {
|
current_teams = current_teams.map((r) => {
|
||||||
r.is_selected = newstate;
|
r.is_selected = newstate;
|
||||||
return r;
|
return r;
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
class="underline cursor-pointer select-none">{#if current_teams.some((r) => r.is_selected === true)}
|
class="underline cursor-pointer select-none">{#if current_teams.some((r) => r.is_selected === true)}
|
||||||
{$_('deselect-all')}
|
{$_('deselect-all')}
|
||||||
{:else}{$_('select-all')}{/if}
|
{:else}{$_('select-all')}{/if}
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('name')}
|
{$_('name')}
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('organization')}
|
{$_('organization')}
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
scope="col"
|
scope="col"
|
||||||
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
|
||||||
{$_('contact')}
|
{$_('contact')}
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="relative px-6 py-3">
|
<th scope="col" class="relative px-6 py-3">
|
||||||
<span class="sr-only">{$_('action')}</span>
|
<span class="sr-only">{$_('action')}</span>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="divide-y divide-gray-200">
|
<tbody class="divide-y divide-gray-200">
|
||||||
{#each current_teams as t}
|
{#each current_teams as t}
|
||||||
{#if Object.values(t)
|
{#if Object.values(t)
|
||||||
.toString()
|
.toString()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.includes(searchvalue)}
|
.includes(searchvalue)}
|
||||||
<tr data-rowid="team_{t.id}">
|
<tr data-rowid="team_{t.id}">
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<input
|
<input
|
||||||
bind:checked={t.is_selected}
|
bind:checked={t.is_selected}
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{t.name}
|
{t.name}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{#if t.parentGroup}
|
{#if t.parentGroup}
|
||||||
<a
|
<a
|
||||||
href="../orgs/{t.parentGroup.id}"
|
href="../orgs/{t.parentGroup.id}"
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.parentGroup.name}</a>
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.parentGroup.name}</a>
|
||||||
{:else}{$_('no-organization-specified')}{/if}
|
{:else}{$_('no-organization-specified')}{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
<td class="px-6 py-4 whitespace-nowrap">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="ml-4">
|
<div class="ml-4">
|
||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{#if t.contact}
|
{#if t.contact}
|
||||||
<a
|
<a
|
||||||
href="../contacts/{t.contact.id}"
|
href="../contacts/{t.contact.id}"
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.contact.firstname}
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.contact.firstname}
|
||||||
{t.contact.middlename || ''}
|
{t.contact.middlename || ''}
|
||||||
{t.contact.lastname}</a>
|
{t.contact.lastname}</a>
|
||||||
{:else}{$_('no-contact-specified')}{/if}
|
{:else}{$_('no-contact-specified')}{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
{#if active_deletes[t.id] === true}
|
{#if active_deletes[t.id] === true}
|
||||||
<td
|
<td
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
active_deletes[t.id] = false;
|
active_deletes[t.id] = false;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">Cancel
|
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">Cancel
|
||||||
Delete</button>
|
Delete</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
RunnerTeamService.runnerTeamControllerRemove(t.id, false)
|
RunnerTeamService.runnerTeamControllerRemove(t.id, false)
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
current_teams = current_teams.filter((obj) => obj.id !== t.id);
|
current_teams = current_teams.filter((obj) => obj.id !== t.id);
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('organization-deleted'),
|
text: $_('organization-deleted'),
|
||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor:
|
backgroundColor:
|
||||||
'linear-gradient(to right, #00b09b, #96c93d)',
|
'linear-gradient(to right, #00b09b, #96c93d)',
|
||||||
}).showToast();
|
}).showToast();
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
modal_open = true;
|
modal_open = true;
|
||||||
delete_team = t;
|
delete_team = t;
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
|
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
|
||||||
</td>
|
</td>
|
||||||
{:else}
|
{:else}
|
||||||
<td
|
<td
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||||
<a
|
<a
|
||||||
href="./{t.id}"
|
href="./{t.id}"
|
||||||
class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
|
class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:DELETE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:DELETE')}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
active_deletes[t.id] = true;
|
active_deletes[t.id] = true;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
|
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
|
||||||
{/if}
|
{/if}
|
||||||
</td>
|
</td>
|
||||||
{/if}
|
{/if}
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{:catch error}
|
{:catch error}
|
||||||
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
||||||
<span class="inline-block align-middle mr-8">
|
<span class="inline-block align-middle mr-8">
|
||||||
<b class="capitalize">{$_('general_promise_error')}</b>
|
<b class="capitalize">{$_('general_promise_error')}</b>
|
||||||
{error}
|
{error}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{/await}
|
{/await}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
import { UserService } from "@odit/lfk-client-js";
|
import { UserService } from "@odit/lfk-client-js";
|
||||||
import isEmail from "validator/es/lib/isEmail";
|
import isEmail from "validator/es/lib/isEmail";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
|
import PasswordStrength, {
|
||||||
|
password_strong_enough,
|
||||||
|
} from "../auth/PasswordStrength.svelte";
|
||||||
export let modal_open;
|
export let modal_open;
|
||||||
export let current_users;
|
export let current_users;
|
||||||
let firstname_input;
|
let firstname_input;
|
||||||
@@ -28,7 +31,10 @@
|
|||||||
$: isLastnameValid = lastname_input_value.trim().length !== 0;
|
$: isLastnameValid = lastname_input_value.trim().length !== 0;
|
||||||
$: isFirstnameValid = firstname_input_value.trim().length !== 0;
|
$: isFirstnameValid = firstname_input_value.trim().length !== 0;
|
||||||
$: createbtnenabled =
|
$: createbtnenabled =
|
||||||
isFirstnameValid && isLastnameValid && isPasswordValid && isEmailValid;
|
isFirstnameValid &&
|
||||||
|
isLastnameValid &&
|
||||||
|
password_strong_enough(password_input_value) &&
|
||||||
|
isEmailValid;
|
||||||
(function () {
|
(function () {
|
||||||
document.onkeydown = function (e) {
|
document.onkeydown = function (e) {
|
||||||
e = e || window.event;
|
e = e || window.event;
|
||||||
@@ -203,12 +209,8 @@
|
|||||||
type="password"
|
type="password"
|
||||||
name="password"
|
name="password"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
||||||
{#if !isPasswordValid}
|
<PasswordStrength
|
||||||
<span
|
bind:password_change={password_input_value} />
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
|
||||||
{$_('password-is-required')}
|
|
||||||
</span>
|
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-6">
|
<div class="col-span-6">
|
||||||
<label
|
<label
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import App from './App.svelte';
|
|
||||||
|
|
||||||
const app = new App({
|
|
||||||
target: document.body
|
|
||||||
});
|
|
||||||
|
|
||||||
export default app;
|
|
||||||
// HMR
|
|
||||||
if (import.meta.hot) {
|
|
||||||
import.meta.hot.accept();
|
|
||||||
import.meta.hot.dispose(() => {
|
|
||||||
app.$destroy();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
+427
-416
@@ -1,417 +1,428 @@
|
|||||||
{
|
{
|
||||||
"404message": "Die gesuchte Seite wurde leider nicht gefunden.",
|
"404message": "Die gesuchte Seite wurde leider nicht gefunden.",
|
||||||
"404title": "Fehler 404",
|
"404title": "Fehler 404",
|
||||||
"about": "Über",
|
"about": "Über",
|
||||||
"action": "Aktionen",
|
"action": "Aktionen",
|
||||||
"active": "Aktiv",
|
"active": "Aktiv",
|
||||||
"add-card": "Karte erstellen",
|
"add-card": "Karte erstellen",
|
||||||
"add-donation": "Sponsoring erstellen",
|
"add-donation": "Sponsoring erstellen",
|
||||||
"add-donor": "Sponsor:in erstellen",
|
"add-donor": "Sponsor:in erstellen",
|
||||||
"add-scan": "Scan erstellen",
|
"add-scan": "Scan erstellen",
|
||||||
"add-the-first-scanstation": "Erstelle deine erste Scannerstation.",
|
"add-the-first-scanstation": "Erstelle deine erste Scannerstation.",
|
||||||
"add-user-group": "Neue Gruppe erstellen",
|
"add-user-group": "Neue Gruppe erstellen",
|
||||||
"add-your-first-card": "Erstelle deine erste Läuferkarte",
|
"add-your-first-card": "Erstelle deine erste Läuferkarte",
|
||||||
"add-your-first-contact": "Erstelle den ersten Kontakt",
|
"add-your-first-contact": "Erstelle den ersten Kontakt",
|
||||||
"add-your-first-donor": "Erstelle die erste Sponsor:in",
|
"add-your-first-donor": "Erstelle die erste Sponsor:in",
|
||||||
"add-your-first-group": "Erstelle die erste Gruppe",
|
"add-your-first-group": "Erstelle die erste Gruppe",
|
||||||
"add-your-first-organization": "Erstelle die erste Organisation",
|
"add-your-first-organization": "Erstelle die erste Organisation",
|
||||||
"add-your-first-runner": "Erstelle die erste Läufer:in",
|
"add-your-first-runner": "Erstelle die erste Läufer:in",
|
||||||
"add-your-first-team": "Erstelle das erste Team",
|
"add-your-first-team": "Erstelle das erste Team",
|
||||||
"add-your-first-track": "Erstelle den ersten Track (Laufstrecke).",
|
"add-your-first-track": "Erstelle den ersten Track (Laufstrecke).",
|
||||||
"add-your-first-user": "Erstelle die erste Benutzer:in",
|
"add-your-first-user": "Erstelle die erste Benutzer:in",
|
||||||
"add-your-fist-donation": "Erstelle dein erstes Sponsoring",
|
"add-your-fist-donation": "Erstelle dein erstes Sponsoring",
|
||||||
"add-your-fist-scan": "Füge deinen ersten Scan hinzu",
|
"add-your-fist-scan": "Füge deinen ersten Scan hinzu",
|
||||||
"adding-card": "Karte wird erstellt",
|
"adding-card": "Karte wird erstellt",
|
||||||
"adding-scan": "Scan wird hinzugefügt",
|
"adding-scan": "Scan wird hinzugefügt",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
"address-is-required": "Du musst eine Adresse angeben",
|
"address-is-required": "Du musst eine Adresse angeben",
|
||||||
"after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!",
|
"after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!",
|
||||||
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.",
|
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.",
|
||||||
"all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht",
|
"all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht",
|
||||||
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
|
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
|
||||||
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
|
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
|
||||||
"amount": "Anzahl",
|
"amount": "Anzahl",
|
||||||
"amount-per-kilometer": "Betrag pro Kilometer",
|
"amount-per-kilometer": "Betrag pro Kilometer",
|
||||||
"apartment-suite-etc": "Apartment, Wohnung, etc.",
|
"apartment-suite-etc": "Apartment, Wohnung, etc.",
|
||||||
"application_name": "Lauf für Kaya! - Admin",
|
"application_name": "Lauf für Kaya! - Admin",
|
||||||
"applying-changes": "Änderungen anwenden",
|
"applying-changes": "Änderungen anwenden",
|
||||||
"attention": "Achtung!",
|
"attention": "Achtung!",
|
||||||
"author": "Autor:in",
|
"author": "Autor:in",
|
||||||
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.",
|
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.",
|
||||||
"by": "von",
|
"by": "von",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"cancel-delete": "Löschen abbrechen",
|
"cancel-delete": "Löschen abbrechen",
|
||||||
"cancel-keep-donor": "Abbrechen, Sponsor:in behalten",
|
"cancel-keep-donor": "Abbrechen, Sponsor:in behalten",
|
||||||
"cancel-keep-my-profile": "Abbrechen, mein Profil behalten",
|
"cancel-keep-my-profile": "Abbrechen, mein Profil behalten",
|
||||||
"cancel-keep-organization": "Abbrechen und Organisation bearbeiten",
|
"cancel-keep-organization": "Abbrechen und Organisation bearbeiten",
|
||||||
"cancel-keep-team": "Abbrechen, Team behalten",
|
"cancel-keep-team": "Abbrechen, Team behalten",
|
||||||
"cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.",
|
"cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.",
|
||||||
"card-added": "Karte wurde hinzugefügt",
|
"card-added": "Karte wurde hinzugefügt",
|
||||||
"card-deleted": "Karte gelöscht",
|
"card-deleted": "Karte gelöscht",
|
||||||
"card-updated": "Karte aktualisiert",
|
"card-updated": "Karte aktualisiert",
|
||||||
"cards": "Läuferkarten",
|
"cards": "Läuferkarten",
|
||||||
"change-your-password-here": "Hier kannst du dein Passwort ändern",
|
"change-your-password-here": "Hier kannst du dein Passwort ändern",
|
||||||
"changing-your-password": "Passwort wird geändert",
|
"changing-your-password": "Passwort wird geändert",
|
||||||
"city": "Stadt",
|
"city": "Stadt",
|
||||||
"click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren",
|
"click-to-copy-the-link-into-your-clipboard": "Klicke auf den Link, um ihn in deine Zwischenablage zu kopieren",
|
||||||
"close": "Schließen",
|
"click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren",
|
||||||
"code": "Code",
|
"close": "Schließen",
|
||||||
"configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit",
|
"code": "Code",
|
||||||
"confirm": "Bestätigen",
|
"configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit",
|
||||||
"confirm-delete": "Löschung Bestätigen",
|
"confirm": "Bestätigen",
|
||||||
"confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen",
|
"confirm-delete": "Löschung Bestätigen",
|
||||||
"confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen",
|
"confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen",
|
||||||
"confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.",
|
"confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen",
|
||||||
"confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.",
|
"confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.",
|
||||||
"confirm-deletion": "Löschung Bestätigen",
|
"confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.",
|
||||||
"confirm-the-new-password": "Neues Passwort bestätigen",
|
"confirm-deletion": "Löschung Bestätigen",
|
||||||
"contact": "Kontakt",
|
"confirm-the-new-password": "Neues Passwort bestätigen",
|
||||||
"contact-deleted": "Kontakt gelöscht",
|
"contact": "Kontakt",
|
||||||
"contact-information": "Kontaktinformation",
|
"contact-deleted": "Kontakt gelöscht",
|
||||||
"contact-is-being-updated": "Kontakt wird aktualisiert ...",
|
"contact-information": "Kontaktinformation",
|
||||||
"contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe",
|
"contact-is-being-updated": "Kontakt wird aktualisiert ...",
|
||||||
"contacts": "Kontakte",
|
"contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe",
|
||||||
"contacts-are-being-loaded": "Kontakte werden geladen ...",
|
"contacts": "Kontakte",
|
||||||
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
|
"contacts-are-being-loaded": "Kontakte werden geladen ...",
|
||||||
"count_organizations": "Organisationen (Anzahl)",
|
"copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert",
|
||||||
"count_teams": "Teams (Anzahl)",
|
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
|
||||||
"create": "Erstellen",
|
"count_organizations": "Organisationen (Anzahl)",
|
||||||
"create-a-new": "Erstelle eine neue",
|
"count_teams": "Teams (Anzahl)",
|
||||||
"create-a-new-card": "Neue Läuferkarte erstellen",
|
"create": "Erstellen",
|
||||||
"create-a-new-contact": "Kontakt erstellen",
|
"create-a-new": "Erstelle eine neue",
|
||||||
"create-a-new-distance-donation": "Erstelle ein neues Sponsoring",
|
"create-a-new-card": "Neue Läuferkarte erstellen",
|
||||||
"create-a-new-donor": "Neue Sponsor:in erstellen",
|
"create-a-new-contact": "Kontakt erstellen",
|
||||||
"create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende",
|
"create-a-new-distance-donation": "Erstelle ein neues Sponsoring",
|
||||||
"create-a-new-organization": "Neue Organisation anlegen",
|
"create-a-new-donor": "Neue Sponsor:in erstellen",
|
||||||
"create-a-new-runner": "Neue Läufer:in erstellen",
|
"create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende",
|
||||||
"create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)",
|
"create-a-new-organization": "Neue Organisation anlegen",
|
||||||
"create-a-new-scanstation": "Neue Station erstellen",
|
"create-a-new-runner": "Neue Läufer:in erstellen",
|
||||||
"create-a-new-team": "Erstelle ein neues Team",
|
"create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)",
|
||||||
"create-a-new-track": "Neuen Track erstellen",
|
"create-a-new-scanstation": "Neue Station erstellen",
|
||||||
"create-a-new-user": "Neue Benutzer:in anlegen",
|
"create-a-new-team": "Erstelle ein neues Team",
|
||||||
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
"create-a-new-track": "Neuen Track erstellen",
|
||||||
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
"create-a-new-user": "Neue Benutzer:in anlegen",
|
||||||
"create-bulk-cards": "Blankokarten erstellen",
|
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
||||||
"create-organization": "Organisation erstellen",
|
"create-and-generate-pdf": "Erstellen und PDF herunterladen",
|
||||||
"create-team": "Team erstellen",
|
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
||||||
"create-track": "Track erstellen",
|
"create-bulk-cards": "Blankokarten erstellen",
|
||||||
"create-user": "Benutzer anlegen",
|
"create-organization": "Organisation erstellen",
|
||||||
"created-blanco-cards": "Blankokarten wurden erstellt",
|
"create-team": "Team erstellen",
|
||||||
"creating-blanco-cards": "Erstelle Blankokarten",
|
"create-track": "Track erstellen",
|
||||||
"credits": "Credits",
|
"create-user": "Benutzer anlegen",
|
||||||
"csv_import__class": "Klasse",
|
"create-without-pdf": "Ohne PDF erstellen",
|
||||||
"csv_import__firstname": "Vorname",
|
"created-blanco-cards": "Blankokarten wurden erstellt",
|
||||||
"csv_import__lastname": "Nachname",
|
"creating-blanco-cards": "Erstelle Blankokarten",
|
||||||
"csv_import__middlename": "Mittelname",
|
"credits": "Credits",
|
||||||
"csv_import__team": "Team",
|
"csv_import__class": "Klasse",
|
||||||
"danger-zone": "Gefahrenzone",
|
"csv_import__firstname": "Vorname",
|
||||||
"dashboard-greeting": "Hallo",
|
"csv_import__lastname": "Nachname",
|
||||||
"dashboard-title": "Dashboard",
|
"csv_import__middlename": "Mittelname",
|
||||||
"datatable": {
|
"csv_import__team": "Team",
|
||||||
"search": "🔍 Suche ...",
|
"danger-zone": "Gefahrenzone",
|
||||||
"an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten",
|
"dashboard-greeting": "Hallo",
|
||||||
"loading": "Wird geladen...",
|
"dashboard-title": "Dashboard",
|
||||||
"next": "Nächste",
|
"datatable": {
|
||||||
"of": "von",
|
"search": "🔍 Suche ...",
|
||||||
"previous": "Vorherige",
|
"an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten",
|
||||||
"to": "bis",
|
"loading": "Wird geladen...",
|
||||||
"showing": "Zeige",
|
"next": "Nächste",
|
||||||
"no_matching_records_found": "Keine passenden Einträge gefunden",
|
"of": "von",
|
||||||
"page": "Seite",
|
"previous": "Vorherige",
|
||||||
"records": "Einträge",
|
"to": "bis",
|
||||||
"sort_column_ascending": "Spalte aufsteigend sortieren",
|
"showing": "Zeige",
|
||||||
"sort_column_descending": "Spalte absteigend sortieren"
|
"no_matching_records_found": "Keine passenden Einträge gefunden",
|
||||||
},
|
"page": "Seite",
|
||||||
"delete": "Löschen",
|
"records": "Einträge",
|
||||||
"delete-contact": "Kontakt löschen",
|
"sort_column_ascending": "Spalte aufsteigend sortieren",
|
||||||
"delete-donation": "Sponsporing löschen",
|
"sort_column_descending": "Spalte absteigend sortieren"
|
||||||
"delete-donor": "Sponsor:in löschen",
|
},
|
||||||
"delete-group": "Gruppe löschen",
|
"delete": "Löschen",
|
||||||
"delete-organization": "Organisation löschen",
|
"delete-contact": "Kontakt löschen",
|
||||||
"delete-profile": "Profil löschen",
|
"delete-donation": "Sponsporing löschen",
|
||||||
"delete-runner": "Läufer:in löschen",
|
"delete-donor": "Sponsor:in löschen",
|
||||||
"delete-scan": "Scan löschen",
|
"delete-group": "Gruppe löschen",
|
||||||
"delete-station": "Station löschen",
|
"delete-organization": "Organisation löschen",
|
||||||
"delete-team": "Team Löschen",
|
"delete-profile": "Profil löschen",
|
||||||
"delete-user": "Benutzer:in löschen",
|
"delete-runner": "Läufer:in löschen",
|
||||||
"deleted-scan": "Scan wurde gelöscht",
|
"delete-scan": "Scan löschen",
|
||||||
"dependency_name": "Name",
|
"delete-station": "Station löschen",
|
||||||
"description": "Beschreibung",
|
"delete-team": "Team Löschen",
|
||||||
"description-optional": "Beschreibung (optional)",
|
"delete-user": "Benutzer:in löschen",
|
||||||
"deselect-all": "Alle abwählen",
|
"deleted-scan": "Scan wurde gelöscht",
|
||||||
"details": "Details",
|
"dependency_name": "Name",
|
||||||
"disabled": "deaktiviert",
|
"description": "Beschreibung",
|
||||||
"distance": "Distanz",
|
"description-optional": "Beschreibung (optional)",
|
||||||
"distance-donation": "Sponsoring",
|
"deselect-all": "Alle abwählen",
|
||||||
"distance-in-km": "Distanz (in KM)",
|
"details": "Details",
|
||||||
"distance-track": "Distanz (+Track)",
|
"disabled": "deaktiviert",
|
||||||
"do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?",
|
"distance": "Distanz",
|
||||||
"do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?",
|
"distance-donation": "Sponsoring",
|
||||||
"do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?",
|
"distance-in-km": "Distanz (in KM)",
|
||||||
"do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?",
|
"distance-track": "Distanz (+Track)",
|
||||||
"documentation": "Dokumentation",
|
"do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?",
|
||||||
"donation-amount": "Sponsoringbetrag",
|
"do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?",
|
||||||
"donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.",
|
"do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?",
|
||||||
"donations": "Sponsorings",
|
"do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?",
|
||||||
"donor": "Sponsor:in",
|
"documentation": "Dokumentation",
|
||||||
"donor-added": "Sponsor:in hinzugefügt",
|
"donation-amount": "Sponsoringbetrag",
|
||||||
"donor-deleted": "Sponsor:in gelöscht",
|
"donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.",
|
||||||
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
|
"donations": "Sponsorings",
|
||||||
"donor-is-being-added": "Sponsor:in wird hinzugefügt...",
|
"donor": "Sponsor:in",
|
||||||
"donor-is-being-updated": "Sponsor:in wird aktualisiert",
|
"donor-added": "Sponsor:in hinzugefügt",
|
||||||
"donors": "Sponsor:innen",
|
"donor-deleted": "Sponsor:in gelöscht",
|
||||||
"donors-are-being-loaded": "Sponsor:innen werden geladen",
|
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
|
||||||
"dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
|
"donor-is-being-added": "Sponsor:in wird hinzugefügt...",
|
||||||
"dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
|
"donor-is-being-updated": "Sponsor:in wird aktualisiert",
|
||||||
"e-mail-adress": "E-Mail-Adresse",
|
"donors": "Sponsor:innen",
|
||||||
"edit": "Bearbeiten",
|
"donors-are-being-loaded": "Sponsor:innen werden geladen",
|
||||||
"edit-a-card": "Läuferkarte bearbeiten",
|
"dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
|
||||||
"edit-permissions": "Berechtigungen bearbeiten",
|
"dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
|
||||||
"email_address_or_username": "E-Mail-Adresse/ Benutzername",
|
"e-mail-adress": "E-Mail-Adresse",
|
||||||
"enabled": "aktiviert",
|
"edit": "Bearbeiten",
|
||||||
"enabled_large": "Aktiviert",
|
"edit-a-card": "Läuferkarte bearbeiten",
|
||||||
"english": "Englisch",
|
"edit-permissions": "Berechtigungen bearbeiten",
|
||||||
"error-during-import": "Fehler beim Importieren",
|
"email_address_or_username": "E-Mail-Adresse/ Benutzername",
|
||||||
"error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage",
|
"enabled": "aktiviert",
|
||||||
"error_on_login": "😢Fehler beim Login",
|
"enabled_large": "Aktiviert",
|
||||||
"erteilte": "Direkt erteilte",
|
"english": "Englisch",
|
||||||
"everything-concerning-your-profile": "Alles zu deinem Profil",
|
"error-during-import": "Fehler beim Importieren",
|
||||||
"everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃♂️🏃♀️🏃♂️",
|
"error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage",
|
||||||
"faq": "FAQ",
|
"error_on_login": "😢Fehler beim Login",
|
||||||
"filter-by-organization-team": "Filtern nach Organisation / Team",
|
"erteilte": "Direkt erteilte",
|
||||||
"first-name": "Vorname",
|
"everything-concerning-your-profile": "Alles zu deinem Profil",
|
||||||
"first-name-is-required": "Vorname muss angegeben werden",
|
"everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃♂️🏃♀️🏃♂️",
|
||||||
"first-scan-of-the-day": "Erster Scan des Tages",
|
"faq": "FAQ",
|
||||||
"fixed-donation": "Festbetragsspende",
|
"filter-by-organization-team": "Filtern nach Organisation / Team",
|
||||||
"forgot_password": "Passwort vergessen?",
|
"first-name": "Vorname",
|
||||||
"geerbte": "geerbte",
|
"first-name-is-required": "Vorname muss angegeben werden",
|
||||||
"general-stats": "Allgemeine Statistiken",
|
"first-scan-of-the-day": "Erster Scan des Tages",
|
||||||
"general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten",
|
"fixed-donation": "Festbetragsspende",
|
||||||
"generate-runnercards": "Läuferkarten generieren",
|
"forgot_password": "Passwort vergessen?",
|
||||||
"generate-sponsoring-contract": "Sponsoringvertrag generieren",
|
"geerbte": "geerbte",
|
||||||
"generate-sponsoring-contracts": "Sponsoringverträge generieren",
|
"general-stats": "Allgemeine Statistiken",
|
||||||
"generating-pdf": "Pdf wird generiert...",
|
"general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten",
|
||||||
"generating-pdfs": "PDFs werden generiert...",
|
"generate-runnercards": "Läuferkarten generieren",
|
||||||
"generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.",
|
"generate-sponsoring-contract": "Sponsoringvertrag generieren",
|
||||||
"german": "Deutsch",
|
"generate-sponsoring-contracts": "Sponsoringverträge generieren",
|
||||||
"go-to-login": "Zum Login",
|
"generating-pdf": "Pdf wird generiert...",
|
||||||
"goback": "Zur Startseite",
|
"generating-pdfs": "PDFs werden generiert...",
|
||||||
"granted": "Gewährt",
|
"generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.",
|
||||||
"group": "Gruppe",
|
"german": "Deutsch",
|
||||||
"group-added": "Gruppe hinzugefügt",
|
"go-to-login": "Zum Login",
|
||||||
"group-is-being-added": "Gruppe wird erstellt",
|
"goback": "Zur Startseite",
|
||||||
"group-name-is-required": "Der Gruppenname muss angegeben werden.",
|
"granted": "Gewährt",
|
||||||
"group-updated": "Gruppe aktualisiert",
|
"group": "Gruppe",
|
||||||
"groups": "Gruppen",
|
"group-added": "Gruppe hinzugefügt",
|
||||||
"groups-are-being-loaded": "Gruppen werden geladen",
|
"group-is-being-added": "Gruppe wird erstellt",
|
||||||
"home": "Start",
|
"group-name-is-required": "Der Gruppenname muss angegeben werden.",
|
||||||
"icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:",
|
"group-updated": "Gruppe aktualisiert",
|
||||||
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.",
|
"groups": "Gruppen",
|
||||||
"import-finished": "Import abgeschlossen",
|
"groups-are-being-loaded": "Gruppen werden geladen",
|
||||||
"import-runners": "Läufer:innen importieren",
|
"home": "Start",
|
||||||
"import__target-organization": "Ziel Organisation",
|
"icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:",
|
||||||
"imprint": "Impressum ",
|
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.",
|
||||||
"imprint-loading": "Impressum lädt...",
|
"import-finished": "Import abgeschlossen",
|
||||||
"inactive": "Inaktiv",
|
"import-runners": "Läufer:innen importieren",
|
||||||
"installed-version": "Installierte Version",
|
"import__target-organization": "Ziel Organisation",
|
||||||
"internal-error": "Interner Fehler",
|
"imprint": "Impressum ",
|
||||||
"invalid": "Ungültig",
|
"imprint-loading": "Impressum lädt...",
|
||||||
"invalid-mail-reset": "Das ist keine gültige E-Mail",
|
"inactive": "Inaktiv",
|
||||||
"just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.",
|
"installed-version": "Installierte Version",
|
||||||
"laeufer-hinzufuegen": "Läufer:in hinzufügen",
|
"internal-error": "Interner Fehler",
|
||||||
"laeufer-importieren": "Läufer:innen importieren",
|
"invalid": "Ungültig",
|
||||||
"laptime": "Rundenzeit",
|
"invalid-mail-reset": "Das ist keine gültige E-Mail",
|
||||||
"last-name": "Nachname",
|
"just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.",
|
||||||
"last-name-is-required": "Nachname muss angegeben werden",
|
"laeufer-hinzufuegen": "Läufer:in hinzufügen",
|
||||||
"lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.",
|
"laeufer-importieren": "Läufer:innen importieren",
|
||||||
"license": "Lizenz",
|
"laptime": "Rundenzeit",
|
||||||
"licenses-are-being-loaded": "Lizenzen werden geladen...",
|
"last-name": "Nachname",
|
||||||
"loading-cards": "Läuferkarten werden geladen",
|
"last-name-is-required": "Nachname muss angegeben werden",
|
||||||
"loading-contact-details": "Kontaktdaten werden geladen ...",
|
"lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.",
|
||||||
"loading-donation-details": "Lade Sponsoringdetails",
|
"license": "Lizenz",
|
||||||
"loading-donor-details": "Lade Details",
|
"licenses-are-being-loaded": "Lizenzen werden geladen...",
|
||||||
"loading-group-detail": "Lade Gruppendetails...",
|
"loading-cards": "Läuferkarten werden geladen",
|
||||||
"loading-profile-data": "Lade Profildaten",
|
"loading-contact-details": "Kontaktdaten werden geladen ...",
|
||||||
"loading-runners": "Läufer:innen werden geladen...",
|
"loading-donation-details": "Lade Sponsoringdetails",
|
||||||
"loading-station-details": "Lade Scanstation-Details ...",
|
"loading-donor-details": "Lade Details",
|
||||||
"log_in": "Anmelden",
|
"loading-group-detail": "Lade Gruppendetails...",
|
||||||
"log_in_to_your_account": "Bitte melde dich an",
|
"loading-profile-data": "Lade Profildaten",
|
||||||
"login_is_checked": "Login wird überprüft",
|
"loading-runners": "Läufer:innen werden geladen...",
|
||||||
"logout": "Abmelden",
|
"loading-station-details": "Lade Scanstation-Details ...",
|
||||||
"mail-validation-in-progress": "E-Mail Verifizierung läuft... ",
|
"log_in": "Anmelden",
|
||||||
"manage-admin-users": "Nutzer verwalten",
|
"log_in_to_your_account": "Bitte melde dich an",
|
||||||
"middle-name": "Mittelname",
|
"login_is_checked": "Login wird überprüft",
|
||||||
"minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)",
|
"logout": "Abmelden",
|
||||||
"minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein",
|
"mail-validation-in-progress": "E-Mail Verifizierung läuft... ",
|
||||||
"name": "Name",
|
"manage-admin-users": "Nutzer verwalten",
|
||||||
"name-is-required": "Der Gruppenname muss angegeben werden",
|
"middle-name": "Mittelname",
|
||||||
"new-password": "Neues Passwort",
|
"minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)",
|
||||||
"no-contact-found": "Keine Kontakte gefunden",
|
"minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein",
|
||||||
"no-contact-selected": "Kein Kontakt ausgewählt",
|
"must-be-at-least-10-characters-long": "Passwort muss mindestens 10 Zeichen lang sein!",
|
||||||
"no-contact-specified": "Kein Kontakt angegeben",
|
"must-contain-a-lowercase-letter": "Passwort muss einen Großbuchstaben enthalten!",
|
||||||
"no-donors-found": "Keine Spender:innen gefunden",
|
"must-contain-a-number": "Passwort muss eine Zahl enthalten!",
|
||||||
"no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢",
|
"must-contain-a-uppercase-letter": "Passwort muss einen Kleinbuchstaben enthalten!",
|
||||||
"no-organization-or-team-found": "Keine Organisationen oder Teams gefunden",
|
"name": "Name",
|
||||||
"no-organization-specified": "Keine Organisation angegeben",
|
"name-is-required": "Der Gruppenname muss angegeben werden",
|
||||||
"no-organizations-found": "Keine Organisationen gefunden",
|
"new-password": "Neues Passwort",
|
||||||
"no-runners-found": "Keine Läufer:innen gefunden",
|
"no-contact-found": "Keine Kontakte gefunden",
|
||||||
"no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.",
|
"no-contact-selected": "Kein Kontakt ausgewählt",
|
||||||
"non-blanko": "Keine/Blankokarte",
|
"no-contact-specified": "Kein Kontakt angegeben",
|
||||||
"organization": "Organisation",
|
"no-donors-found": "Keine Spender:innen gefunden",
|
||||||
"organization-added": "Organisation hinzugefügt",
|
"no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢",
|
||||||
"organization-deleted": "Organisation gelöscht",
|
"no-organization-or-team-found": "Keine Organisationen oder Teams gefunden",
|
||||||
"organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...",
|
"no-organization-specified": "Keine Organisation angegeben",
|
||||||
"organization-is-being-added": "Organisation wird hinzugefügt ...",
|
"no-organizations-found": "Keine Organisationen gefunden",
|
||||||
"organization-name-is-required": "Der Name muss angegeben werden",
|
"no-runners-found": "Keine Läufer:innen gefunden",
|
||||||
"organizations": "Organisationen",
|
"no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.",
|
||||||
"organizations-are-being-loaded": "Organisationen werden geladen ...",
|
"non-blanko": "Keine/Blankokarte",
|
||||||
"orgs": "Organisationen",
|
"organization": "Organisation",
|
||||||
"oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!",
|
"organization-added": "Organisation hinzugefügt",
|
||||||
"password": "Passwort",
|
"organization-deleted": "Organisation gelöscht",
|
||||||
"password-changed": "Passwort wurde aktualisiert!",
|
"organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...",
|
||||||
"password-is-required": "Passwort muss angegeben werden",
|
"organization-is-being-added": "Organisation wird hinzugefügt ...",
|
||||||
"password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!",
|
"organization-name-is-required": "Der Name muss angegeben werden",
|
||||||
"password-reset-in-progress": "Passwort wird zurückgesetzt...",
|
"organizations": "Organisationen",
|
||||||
"password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.",
|
"organizations-are-being-loaded": "Organisationen werden geladen ...",
|
||||||
"password-reset-successful": "Passwort erfolgreich zurückgesetzt!",
|
"orgs": "Organisationen",
|
||||||
"passwords-dont-match": "Die Passwörter stimmen nicht überein.",
|
"oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!",
|
||||||
"pdf-generation-failed": "PDF Generierung fehlgeschlagen!",
|
"password": "Passwort",
|
||||||
"pdf-successfully-generated": "PDF wurde erfolgreich generiert!",
|
"password-changed": "Passwort wurde aktualisiert!",
|
||||||
"pdfs-successfully-generated": "Alle PDFs wurden generiert!",
|
"password-is-required": "Passwort muss angegeben werden",
|
||||||
"per-kilometer": "pro Kilometer",
|
"password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!",
|
||||||
"permissions": "Berechtigungen",
|
"password-reset-in-progress": "Passwort wird zurückgesetzt...",
|
||||||
"permissions-updated": "Berechtigungen aktualisiert!",
|
"password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.",
|
||||||
"phone": "Telefon",
|
"password-reset-successful": "Passwort erfolgreich zurückgesetzt!",
|
||||||
"please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.",
|
"passwords-dont-match": "Die Passwörter stimmen nicht überein!",
|
||||||
"please-provide-a-password": "Bitte gebe ein Passwort an...",
|
"pdf-generation-failed": "PDF Generierung fehlgeschlagen!",
|
||||||
"please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen",
|
"pdf-successfully-generated": "PDF wurde erfolgreich generiert!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.",
|
"pdfs-successfully-generated": "Alle PDFs wurden generiert!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.",
|
"per-kilometer": "pro Kilometer",
|
||||||
"please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.",
|
"permissions": "Berechtigungen",
|
||||||
"please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.",
|
"permissions-updated": "Berechtigungen aktualisiert!",
|
||||||
"please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.",
|
"phone": "Telefon",
|
||||||
"please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.",
|
"please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.",
|
||||||
"please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.",
|
"please-provide-a-password": "Bitte gebe ein Passwort an...",
|
||||||
"please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.",
|
"please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen",
|
||||||
"please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.",
|
"please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.",
|
||||||
"please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.",
|
"please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.",
|
||||||
"please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an",
|
"please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.",
|
||||||
"please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...",
|
"please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.",
|
||||||
"privacy": "Datenschutz",
|
"please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.",
|
||||||
"privacy-loading": "Datenschutzerklärung lädt...",
|
"please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.",
|
||||||
"profile": "Profil",
|
"please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.",
|
||||||
"profile-picture": "Profilbild",
|
"please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.",
|
||||||
"profile-updated": "Profil wurde aktualisiert!",
|
"please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.",
|
||||||
"read-license": "Lizenz-Text lesen",
|
"please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.",
|
||||||
"receipt-needed": "Spendenquittung benötigt",
|
"please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an",
|
||||||
"repo_link": "Link",
|
"please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...",
|
||||||
"request-a-new-reset-mail": "Neue Reset-Mail anfordern",
|
"privacy": "Datenschutz",
|
||||||
"reset-my-password": "Passwort zurücksetzen",
|
"privacy-loading": "Datenschutzerklärung lädt...",
|
||||||
"reset-password": "Passwort zurücksetzen",
|
"profile": "Profil",
|
||||||
"runner": "Läufer:in",
|
"profile-picture": "Profilbild",
|
||||||
"runner-added": "Läufer:in hinzugefügt",
|
"profile-updated": "Profil wurde aktualisiert!",
|
||||||
"runner-import": "Läufer:innen Import",
|
"read-license": "Lizenz-Text lesen",
|
||||||
"runner-is-being-added": "Läufer:in wird hinzugefügt...",
|
"receipt-needed": "Spendenquittung benötigt",
|
||||||
"runner-updated": "Läufer:in aktualisiert!",
|
"repo_link": "Link",
|
||||||
"runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen",
|
"request-a-new-reset-mail": "Neue Reset-Mail anfordern",
|
||||||
"runners": "Läufer",
|
"reset-my-password": "Passwort zurücksetzen",
|
||||||
"runners-are-being-imported": "Läufer:innen werden importiert ...",
|
"reset-password": "Passwort zurücksetzen",
|
||||||
"runners-are-being-loaded": "Läufer:innen werden geladen ...",
|
"runner": "Läufer:in",
|
||||||
"save": "Speichern",
|
"runner-added": "Läufer:in hinzugefügt",
|
||||||
"save-changes": "Änderungen speichern",
|
"runner-import": "Läufer:innen Import",
|
||||||
"scan-added": "Scan hinzugefügt",
|
"runner-is-being-added": "Läufer:in wird hinzugefügt...",
|
||||||
"scan-is-being-updated": "Scan wird aktualisiert",
|
"runner-updated": "Läufer:in aktualisiert!",
|
||||||
"scan-with-fixed-distance": "Scan mit Festdistanz",
|
"runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen",
|
||||||
"scans": "Scans",
|
"runners": "Läufer",
|
||||||
"scans-are-being-loaded": "Scans werden geladen",
|
"runners-are-being-imported": "Läufer:innen werden importiert ...",
|
||||||
"scanstation": "Scanner Station",
|
"runners-are-being-loaded": "Läufer:innen werden geladen ...",
|
||||||
"scanstation-added": "Station wurde erstellt",
|
"save": "Speichern",
|
||||||
"scanstation-is-being-added": "Scannerstation wird angelegt...",
|
"save-changes": "Änderungen speichern",
|
||||||
"scanstations": "Scanner Stationen",
|
"scan-added": "Scan hinzugefügt",
|
||||||
"scanstations-are-being-loaded": "Scannerstationen werden geladen...",
|
"scan-is-being-updated": "Scan wird aktualisiert",
|
||||||
"search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)",
|
"scan-with-fixed-distance": "Scan mit Festdistanz",
|
||||||
"search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)",
|
"scans": "Scans",
|
||||||
"search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)",
|
"scans-are-being-loaded": "Scans werden geladen",
|
||||||
"search-for-permission": "Berechtigungen durchsuchen",
|
"scanstation": "Scanner Station",
|
||||||
"search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)",
|
"scanstation-added": "Station wurde erstellt",
|
||||||
"select-all": "Alle auswählen",
|
"scanstation-is-being-added": "Scannerstation wird angelegt...",
|
||||||
"select-language": "Sprache auswählen",
|
"scanstations": "Scanner Stationen",
|
||||||
"send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services",
|
"scanstations-are-being-loaded": "Scannerstationen werden geladen...",
|
||||||
"set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen",
|
"search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)",
|
||||||
"settings": "Einstellungen",
|
"search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)",
|
||||||
"settings-for-your-profile": "Die Einstellungen deines Accounts",
|
"search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)",
|
||||||
"something-about-the-group": "Infos zur Gruppe",
|
"search-for-permission": "Berechtigungen durchsuchen",
|
||||||
"stats-are-being-loaded": "Die Statistiken werden geladen...",
|
"search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)",
|
||||||
"status": "Status",
|
"select-all": "Alle auswählen",
|
||||||
"stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können",
|
"select-language": "Sprache auswählen",
|
||||||
"successful-password-reset": "Passwort erfolgreich zurückgesetzt!",
|
"selfservice-registration": "Selfservice Registrierung",
|
||||||
"team": "Team",
|
"send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services",
|
||||||
"team-detail-is-being-loaded": "Team wird geladen...",
|
"set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen",
|
||||||
"team-name": "Teamname",
|
"settings": "Einstellungen",
|
||||||
"team-name-is-required": "Teamname ist erforderlich",
|
"settings-for-your-profile": "Die Einstellungen deines Accounts",
|
||||||
"teams": "Teams",
|
"something-about-the-group": "Infos zur Gruppe",
|
||||||
"teams-are-being-loaded": "Teams werden geladen ...",
|
"stats-are-being-loaded": "Die Statistiken werden geladen...",
|
||||||
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...",
|
"status": "Status",
|
||||||
"the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.",
|
"stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können",
|
||||||
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
"successful-password-reset": "Passwort erfolgreich zurückgesetzt!",
|
||||||
"there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.",
|
"team": "Team",
|
||||||
"there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.",
|
"team-detail-is-being-loaded": "Team wird geladen...",
|
||||||
"there-are-no-donations-yet": "Es gibt noch keine Sponsorings",
|
"team-name": "Teamname",
|
||||||
"there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen",
|
"team-name-is-required": "Teamname ist erforderlich",
|
||||||
"there-are-no-groups-yet": "Es gibt noch keine Gruppen",
|
"teams": "Teams",
|
||||||
"there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.",
|
"teams-are-being-loaded": "Teams werden geladen ...",
|
||||||
"there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.",
|
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...",
|
||||||
"there-are-no-scans-yet": "Es gibt noch keine Scans",
|
"the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.",
|
||||||
"there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.",
|
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
||||||
"there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.",
|
"there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.",
|
||||||
"this-card-is": "Diese Karte ist",
|
"there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.",
|
||||||
"this-might-take-a-moment": "Das könnte einen kleinen Moment dauern",
|
"there-are-no-donations-yet": "Es gibt noch keine Sponsorings",
|
||||||
"this-scanstation-is": "Diese Station ist",
|
"there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen",
|
||||||
"token": "Token",
|
"there-are-no-groups-yet": "Es gibt noch keine Gruppen",
|
||||||
"total-distance": "gelaufene Strecke",
|
"there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.",
|
||||||
"total-donation-amount": "Gesamtbetrag",
|
"there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.",
|
||||||
"total-donations": "Spendensumme",
|
"there-are-no-scans-yet": "Es gibt noch keine Scans",
|
||||||
"total-scans": "gesamte Scans",
|
"there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.",
|
||||||
"track": "Track",
|
"there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.",
|
||||||
"track-added": "Track hinzugefügt",
|
"this-card-is": "Diese Karte ist",
|
||||||
"track-data-is-being-loaded": "Trackdaten werden geladen",
|
"this-might-take-a-moment": "Das könnte einen kleinen Moment dauern",
|
||||||
"track-is-being-added": "Track wird hinzugefügt...",
|
"this-scanstation-is": "Diese Station ist",
|
||||||
"track-length-in-m": "Tracklänge (in Metern)",
|
"token": "Token",
|
||||||
"track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein",
|
"total-distance": "gelaufene Strecke",
|
||||||
"track-name": "Trackname",
|
"total-donation-amount": "Gesamtbetrag",
|
||||||
"track-name-must-not-be-empty": "Der Name muss angegeben werden",
|
"total-donations": "Spendensumme",
|
||||||
"tracks": "Tracks",
|
"total-scans": "gesamte Scans",
|
||||||
"update-password": "Passwort ändern",
|
"track": "Track",
|
||||||
"updated-contact": "Kontakt aktualisiert!",
|
"track-added": "Track hinzugefügt",
|
||||||
"updated-donor": "Sponsor:in wurde aktualisiert",
|
"track-data-is-being-loaded": "Trackdaten werden geladen",
|
||||||
"updated-organization": "Organisation wurde aktualisiert",
|
"track-is-being-added": "Track wird hinzugefügt...",
|
||||||
"updated-scan": "Scan wurde aktualisiert",
|
"track-length-in-m": "Tracklänge (in Metern)",
|
||||||
"updateing-group": "Gruppe wird aktualisiert...",
|
"track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein",
|
||||||
"updating-card": "Karte wird aktualisiert",
|
"track-name": "Trackname",
|
||||||
"updating-organization": "Organisation wird aktualisiert",
|
"track-name-must-not-be-empty": "Der Name muss angegeben werden",
|
||||||
"updating-permissions": "Berechtigungen werden aktualisiert...",
|
"tracks": "Tracks",
|
||||||
"updating-runner": "Läufer:in wird aktualisiert.",
|
"update-password": "Passwort ändern",
|
||||||
"updating-user": "Benutzer:in wird aktualisiert...",
|
"updated-contact": "Kontakt aktualisiert!",
|
||||||
"updating-your-profile": "Profil wird aktualisiert...",
|
"updated-donor": "Sponsor:in wurde aktualisiert",
|
||||||
"user-added": "Benutzer hinzugefügt",
|
"updated-organization": "Organisation wurde aktualisiert",
|
||||||
"user-groups": "Benutzergruppen",
|
"updated-scan": "Scan wurde aktualisiert",
|
||||||
"user-is-being-added": "Benutzer wird hinzugefügt ...",
|
"updateing-group": "Gruppe wird aktualisiert...",
|
||||||
"user-updated": "Benutzer:in wurde aktualisiert",
|
"updating-card": "Karte wird aktualisiert",
|
||||||
"username": "Benutzername",
|
"updating-organization": "Organisation wird aktualisiert",
|
||||||
"users": "Benutzer",
|
"updating-permissions": "Berechtigungen werden aktualisiert...",
|
||||||
"valid": "Gültig",
|
"updating-runner": "Läufer:in wird aktualisiert.",
|
||||||
"valid-city-is-required": "Du musst eine Stadt angeben",
|
"updating-user": "Benutzer:in wird aktualisiert...",
|
||||||
"valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt",
|
"updating-your-profile": "Profil wird aktualisiert...",
|
||||||
"valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...",
|
"user-added": "Benutzer hinzugefügt",
|
||||||
"valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben",
|
"user-groups": "Benutzergruppen",
|
||||||
"verfuegbare": "Verfügbar",
|
"user-is-being-added": "Benutzer wird hinzugefügt ...",
|
||||||
"welcome_wavinghand": "Willkommen 👋",
|
"user-updated": "Benutzer:in wurde aktualisiert",
|
||||||
"yes-i-copied-the-token": "Ja, ich habe den Token kopiert",
|
"username": "Benutzername",
|
||||||
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!",
|
"users": "Benutzer",
|
||||||
"you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉",
|
"valid": "Gültig",
|
||||||
"you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.",
|
"valid-city-is-required": "Du musst eine Stadt angeben",
|
||||||
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
|
"valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt",
|
||||||
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
|
"valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...",
|
||||||
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
|
"valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben",
|
||||||
"zip-postal-code": "Postleitzahl"
|
"verfuegbare": "Verfügbar",
|
||||||
}
|
"welcome_wavinghand": "Willkommen 👋",
|
||||||
|
"yes-i-copied-the-token": "Ja, ich habe den Token kopiert",
|
||||||
|
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!",
|
||||||
|
"you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉",
|
||||||
|
"you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.",
|
||||||
|
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
|
||||||
|
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
|
||||||
|
"you-have-to-save-your-changes-to-generate-a-link": "Du musst deine Änderungen speichern, um einen Link zu generieren.",
|
||||||
|
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
|
||||||
|
"zip-postal-code": "Postleitzahl",
|
||||||
|
"generate-runner-certificates": "Urkunden generieren"
|
||||||
|
}
|
||||||
+428
-417
@@ -1,418 +1,429 @@
|
|||||||
{
|
{
|
||||||
"404message": "Sorry, the page you are looking for could not be found.",
|
"404message": "Sorry, the page you are looking for could not be found.",
|
||||||
"404title": "Error 404",
|
"404title": "Error 404",
|
||||||
"about": "About",
|
"about": "About",
|
||||||
"action": "Action",
|
"action": "Action",
|
||||||
"active": "Active",
|
"active": "Active",
|
||||||
"add-card": "Add Card",
|
"add-card": "Add Card",
|
||||||
"add-donation": "Add donation",
|
"add-donation": "Add donation",
|
||||||
"add-donor": "add donor",
|
"add-donor": "add donor",
|
||||||
"add-scan": "Add scan",
|
"add-scan": "Add scan",
|
||||||
"add-the-first-scanstation": "Add your first scanstation.",
|
"add-the-first-scanstation": "Add your first scanstation.",
|
||||||
"add-user-group": "Add User Group",
|
"add-user-group": "Add User Group",
|
||||||
"add-your-first-card": "Add your first card",
|
"add-your-first-card": "Add your first card",
|
||||||
"add-your-first-contact": "Add your first contact",
|
"add-your-first-contact": "Add your first contact",
|
||||||
"add-your-first-donor": "add your first donor",
|
"add-your-first-donor": "add your first donor",
|
||||||
"add-your-first-group": "Add your first group",
|
"add-your-first-group": "Add your first group",
|
||||||
"add-your-first-organization": "Add your first organization",
|
"add-your-first-organization": "Add your first organization",
|
||||||
"add-your-first-runner": "Add your first runner",
|
"add-your-first-runner": "Add your first runner",
|
||||||
"add-your-first-team": "Add your first team",
|
"add-your-first-team": "Add your first team",
|
||||||
"add-your-first-track": "Add your first track.",
|
"add-your-first-track": "Add your first track.",
|
||||||
"add-your-first-user": "Add your first user",
|
"add-your-first-user": "Add your first user",
|
||||||
"add-your-fist-donation": "Add your fist donation",
|
"add-your-fist-donation": "Add your fist donation",
|
||||||
"add-your-fist-scan": "Add your fist scan",
|
"add-your-fist-scan": "Add your fist scan",
|
||||||
"adding-card": "Adding Card",
|
"adding-card": "Adding Card",
|
||||||
"adding-scan": "Adding Scan",
|
"adding-scan": "Adding Scan",
|
||||||
"address": "Address",
|
"address": "Address",
|
||||||
"address-is-required": "Address is required",
|
"address-is-required": "Address is required",
|
||||||
"after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!",
|
"after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!",
|
||||||
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.",
|
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.",
|
||||||
"all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well",
|
"all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well",
|
||||||
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
|
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
|
||||||
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
|
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
|
||||||
"amount": "Amount",
|
"amount": "Amount",
|
||||||
"amount-per-kilometer": "Amount per kilometer",
|
"amount-per-kilometer": "Amount per kilometer",
|
||||||
"apartment-suite-etc": "Apartment, suite, etc.",
|
"apartment-suite-etc": "Apartment, suite, etc.",
|
||||||
"application_name": "Lauf für Kaya! - Admin",
|
"application_name": "Lauf für Kaya! - Admin",
|
||||||
"applying-changes": "Applying Changes",
|
"applying-changes": "Applying Changes",
|
||||||
"attention": "Attention!",
|
"attention": "Attention!",
|
||||||
"author": "Author",
|
"author": "Author",
|
||||||
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.",
|
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.",
|
||||||
"by": "by",
|
"by": "by",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"cancel-delete": "Cancel Delete",
|
"cancel-delete": "Cancel Delete",
|
||||||
"cancel-keep-donor": "Cancel, keep donor",
|
"cancel-keep-donor": "Cancel, keep donor",
|
||||||
"cancel-keep-my-profile": "Cancel, keep my profile",
|
"cancel-keep-my-profile": "Cancel, keep my profile",
|
||||||
"cancel-keep-organization": "Cancel, keep organization",
|
"cancel-keep-organization": "Cancel, keep organization",
|
||||||
"cancel-keep-team": "Cancel, keep team",
|
"cancel-keep-team": "Cancel, keep team",
|
||||||
"cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity",
|
"cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity",
|
||||||
"card-added": "Card added",
|
"card-added": "Card added",
|
||||||
"card-deleted": "Card deleted",
|
"card-deleted": "Card deleted",
|
||||||
"card-updated": "Card updated",
|
"card-updated": "Card updated",
|
||||||
"cards": "Cards",
|
"cards": "Cards",
|
||||||
"change-your-password-here": "Change your password here",
|
"change-your-password-here": "Change your password here",
|
||||||
"changing-your-password": "Changing your password",
|
"changing-your-password": "Changing your password",
|
||||||
"city": "City",
|
"city": "City",
|
||||||
"click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard",
|
"click-to-copy-the-link-into-your-clipboard": "Click to copy the link into your clipboard",
|
||||||
"close": "Close",
|
"click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard",
|
||||||
"code": "Code",
|
"close": "Close",
|
||||||
"configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times",
|
"code": "Code",
|
||||||
"confirm": "Confirm",
|
"configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times",
|
||||||
"confirm-delete": "Confirm Delete",
|
"confirm": "Confirm",
|
||||||
"confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations",
|
"confirm-delete": "Confirm Delete",
|
||||||
"confirm-delete-my-user-profile": "Confirm, delete my user profile",
|
"confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations",
|
||||||
"confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.",
|
"confirm-delete-my-user-profile": "Confirm, delete my user profile",
|
||||||
"confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.",
|
"confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.",
|
||||||
"confirm-deletion": "Confirm Deletion",
|
"confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.",
|
||||||
"confirm-the-new-password": "Confirm the new password",
|
"confirm-deletion": "Confirm Deletion",
|
||||||
"contact": "Contact",
|
"confirm-the-new-password": "Confirm the new password",
|
||||||
"contact-deleted": "Contact deleted",
|
"contact": "Contact",
|
||||||
"contact-information": "Contact Information",
|
"contact-deleted": "Contact deleted",
|
||||||
"contact-is-being-updated": "Contact is being updated...",
|
"contact-information": "Contact Information",
|
||||||
"contact-is-not-a-member-in-any-group": "Contact is not a member in any group",
|
"contact-is-being-updated": "Contact is being updated...",
|
||||||
"contacts": "Contacts",
|
"contact-is-not-a-member-in-any-group": "Contact is not a member in any group",
|
||||||
"contacts-are-being-loaded": "contacts are being loaded...",
|
"contacts": "Contacts",
|
||||||
"copied-token-to-clipboard": "Copied token to clipboard",
|
"contacts-are-being-loaded": "contacts are being loaded...",
|
||||||
"count_organizations": "# Organizations",
|
"copied-link-to-clipboard": "Copied link to clipboard",
|
||||||
"count_teams": "# Teams",
|
"copied-token-to-clipboard": "Copied token to clipboard",
|
||||||
"create": "Create",
|
"count_organizations": "# Organizations",
|
||||||
"create-a-new": "Create a new",
|
"count_teams": "# Teams",
|
||||||
"create-a-new-card": "Create a new card",
|
"create": "Create",
|
||||||
"create-a-new-contact": "Create a new contact",
|
"create-a-new": "Create a new",
|
||||||
"create-a-new-distance-donation": "Create a new distance donation",
|
"create-a-new-card": "Create a new card",
|
||||||
"create-a-new-donor": "Create a new donor",
|
"create-a-new-contact": "Create a new contact",
|
||||||
"create-a-new-fixed-donation": "Create a new fixed donation",
|
"create-a-new-distance-donation": "Create a new distance donation",
|
||||||
"create-a-new-organization": "Create a new Organization",
|
"create-a-new-donor": "Create a new donor",
|
||||||
"create-a-new-runner": "Create a new Runner",
|
"create-a-new-fixed-donation": "Create a new fixed donation",
|
||||||
"create-a-new-scan-fixed-only": "Create a new scan (fixed only)",
|
"create-a-new-organization": "Create a new Organization",
|
||||||
"create-a-new-scanstation": "Create a new station",
|
"create-a-new-runner": "Create a new Runner",
|
||||||
"create-a-new-team": "Create a new team",
|
"create-a-new-scan-fixed-only": "Create a new scan (fixed only)",
|
||||||
"create-a-new-track": "Create a new Track",
|
"create-a-new-scanstation": "Create a new station",
|
||||||
"create-a-new-user": "Create a new User",
|
"create-a-new-team": "Create a new team",
|
||||||
"create-a-new-user-group": "Create a new user group",
|
"create-a-new-track": "Create a new Track",
|
||||||
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
"create-a-new-user": "Create a new User",
|
||||||
"create-bulk-cards": "Add blanco cards",
|
"create-a-new-user-group": "Create a new user group",
|
||||||
"create-organization": "Create Organization",
|
"create-and-generate-pdf": "Create and generate PDF",
|
||||||
"create-team": "Create Team",
|
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
||||||
"create-track": "Create Track",
|
"create-bulk-cards": "Add blanco cards",
|
||||||
"create-user": "Create User",
|
"create-organization": "Create Organization",
|
||||||
"created-blanco-cards": "Created blanco cards",
|
"create-team": "Create Team",
|
||||||
"creating-blanco-cards": "Creating blanco cards",
|
"create-track": "Create Track",
|
||||||
"credits": "Credits",
|
"create-user": "Create User",
|
||||||
"csv_import__class": "Class",
|
"create-without-pdf": "Create without PDF",
|
||||||
"csv_import__firstname": "Firstname",
|
"created-blanco-cards": "Created blanco cards",
|
||||||
"csv_import__lastname": "Lastname",
|
"creating-blanco-cards": "Creating blanco cards",
|
||||||
"csv_import__middlename": "Middlename",
|
"credits": "Credits",
|
||||||
"csv_import__team": "Team",
|
"csv_import__class": "Class",
|
||||||
"danger-zone": "Danger zone",
|
"csv_import__firstname": "Firstname",
|
||||||
"dashboard-greeting": "Hello",
|
"csv_import__lastname": "Lastname",
|
||||||
"dashboard-title": "Dashboard",
|
"csv_import__middlename": "Middlename",
|
||||||
"datatable": {
|
"csv_import__team": "Team",
|
||||||
"search": "🔍 Search...",
|
"danger-zone": "Danger zone",
|
||||||
"sort_column_ascending": "Sort column ascending",
|
"dashboard-greeting": "Hello",
|
||||||
"sort_column_descending": "Sort column descending",
|
"dashboard-title": "Dashboard",
|
||||||
"previous": "Previous",
|
"datatable": {
|
||||||
"next": "Next",
|
"search": "🔍 Search...",
|
||||||
"page": "Page",
|
"sort_column_ascending": "Sort column ascending",
|
||||||
"showing": "Showing",
|
"sort_column_descending": "Sort column descending",
|
||||||
"records": "Records",
|
"previous": "Previous",
|
||||||
"of": "of",
|
"next": "Next",
|
||||||
"to": "to",
|
"page": "Page",
|
||||||
"loading": "Loading...",
|
"showing": "Showing",
|
||||||
"no_matching_records_found": "No matching records found",
|
"records": "Records",
|
||||||
"an_error_happened_while_fetching_the_data": "An error happened while fetching the data"
|
"of": "of",
|
||||||
},
|
"to": "to",
|
||||||
"delete": "Delete",
|
"loading": "Loading...",
|
||||||
"delete-contact": "Delete Contact",
|
"no_matching_records_found": "No matching records found",
|
||||||
"delete-donation": "Delete Donation",
|
"an_error_happened_while_fetching_the_data": "An error happened while fetching the data"
|
||||||
"delete-donor": "Delete donor",
|
},
|
||||||
"delete-group": "Delete Group",
|
"delete": "Delete",
|
||||||
"delete-organization": "Delete Organization",
|
"delete-contact": "Delete Contact",
|
||||||
"delete-profile": "Delete Profile",
|
"delete-donation": "Delete Donation",
|
||||||
"delete-runner": "Delete Runner",
|
"delete-donor": "Delete donor",
|
||||||
"delete-scan": "Delete scan",
|
"delete-group": "Delete Group",
|
||||||
"delete-station": "Delete station",
|
"delete-organization": "Delete Organization",
|
||||||
"delete-team": "Delete Team",
|
"delete-profile": "Delete Profile",
|
||||||
"delete-user": "Delete User",
|
"delete-runner": "Delete Runner",
|
||||||
"deleted-scan": "Deleted scan",
|
"delete-scan": "Delete scan",
|
||||||
"dependency_name": "Name",
|
"delete-station": "Delete station",
|
||||||
"description": "description",
|
"delete-team": "Delete Team",
|
||||||
"description-optional": "Description (optional)",
|
"delete-user": "Delete User",
|
||||||
"deselect-all": "deselect all",
|
"deleted-scan": "Deleted scan",
|
||||||
"details": "Details",
|
"dependency_name": "Name",
|
||||||
"disabled": "disabled",
|
"description": "description",
|
||||||
"distance": "Distance",
|
"description-optional": "Description (optional)",
|
||||||
"distance-donation": "distance donation",
|
"deselect-all": "deselect all",
|
||||||
"distance-in-km": "Distance in km",
|
"details": "Details",
|
||||||
"distance-track": "Distance (+Track)",
|
"disabled": "disabled",
|
||||||
"do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?",
|
"distance": "Distance",
|
||||||
"do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?",
|
"distance-donation": "distance donation",
|
||||||
"do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?",
|
"distance-in-km": "Distance in km",
|
||||||
"do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations",
|
"distance-track": "Distance (+Track)",
|
||||||
"documentation": "Documentation",
|
"do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?",
|
||||||
"donation-amount": "Donation amount",
|
"do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?",
|
||||||
"donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€",
|
"do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?",
|
||||||
"donations": "Donations",
|
"do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations",
|
||||||
"donor": "Donor",
|
"documentation": "Documentation",
|
||||||
"donor-added": "Donor added",
|
"donation-amount": "Donation amount",
|
||||||
"donor-deleted": "donor deleted",
|
"donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€",
|
||||||
"donor-has-no-associated-donations": "Donor has no associated donations.",
|
"donations": "Donations",
|
||||||
"donor-is-being-added": "Donor is being added...",
|
"donor": "Donor",
|
||||||
"donor-is-being-updated": "Donor is being updated",
|
"donor-added": "Donor added",
|
||||||
"donors": "Donors",
|
"donor-deleted": "donor deleted",
|
||||||
"donors-are-being-loaded": "donors are being loaded",
|
"donor-has-no-associated-donations": "Donor has no associated donations.",
|
||||||
"dont-have-your-email-connected": "Don't have your email connected?",
|
"donor-is-being-added": "Donor is being added...",
|
||||||
"dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
|
"donor-is-being-updated": "Donor is being updated",
|
||||||
"e-mail-adress": "E-Mail Adress",
|
"donors": "Donors",
|
||||||
"edit": "Edit",
|
"donors-are-being-loaded": "donors are being loaded",
|
||||||
"edit-a-card": "Edit a card",
|
"dont-have-your-email-connected": "Don't have your email connected?",
|
||||||
"edit-permissions": "edit permissions",
|
"dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
|
||||||
"email_address_or_username": "Email / username",
|
"e-mail-adress": "E-Mail Adress",
|
||||||
"enabled": "enabled",
|
"edit": "Edit",
|
||||||
"enabled_large": "Enabled",
|
"edit-a-card": "Edit a card",
|
||||||
"english": "English",
|
"edit-permissions": "edit permissions",
|
||||||
"error-during-import": "Error during import",
|
"email_address_or_username": "Email / username",
|
||||||
"error-whyile-copying-to-clipboard": "Error while copying to clipboard",
|
"enabled": "enabled",
|
||||||
"error_on_login": "Error on login",
|
"enabled_large": "Enabled",
|
||||||
"erteilte": "Directly granted",
|
"english": "English",
|
||||||
"everything-concerning-your-profile": "Everything concerning your profile",
|
"error-during-import": "Error during import",
|
||||||
"everything-is-more-fun-together": "everything is more fun together 🏃♂️🏃♀️🏃♂️",
|
"error-whyile-copying-to-clipboard": "Error while copying to clipboard",
|
||||||
"faq": "FAQ",
|
"error_on_login": "Error on login",
|
||||||
"filter-by-organization-team": "Filter by Organization/ Team",
|
"erteilte": "Directly granted",
|
||||||
"first-name": "First name",
|
"everything-concerning-your-profile": "Everything concerning your profile",
|
||||||
"first-name-is-required": "First Name is required",
|
"everything-is-more-fun-together": "everything is more fun together 🏃♂️🏃♀️🏃♂️",
|
||||||
"first-scan-of-the-day": "First scan of the day.",
|
"faq": "FAQ",
|
||||||
"fixed-donation": "fixed donation",
|
"filter-by-organization-team": "Filter by Organization/ Team",
|
||||||
"forgot_password": "Forgot your password?",
|
"first-name": "First name",
|
||||||
"geerbte": "inherited",
|
"first-name-is-required": "First Name is required",
|
||||||
"general-stats": "General Stats",
|
"first-scan-of-the-day": "First scan of the day.",
|
||||||
"general_promise_error": "😢 Error",
|
"fixed-donation": "fixed donation",
|
||||||
"generate-runnercards": "Generate Runnercards",
|
"forgot_password": "Forgot your password?",
|
||||||
"generate-sponsoring-contract": "generate sponsoring contract",
|
"geerbte": "inherited",
|
||||||
"generate-sponsoring-contracts": "generate sponsoring contracts",
|
"general-stats": "General Stats",
|
||||||
"generating-pdf": "generating PDF...",
|
"general_promise_error": "😢 Error",
|
||||||
"generating-pdfs": "generating PDFs...",
|
"generate-runnercards": "Generate Runnercards",
|
||||||
"generic-ui-logic-error": "Something went wrong in the UI logic",
|
"generate-sponsoring-contract": "generate sponsoring contract",
|
||||||
"german": "German",
|
"generate-sponsoring-contracts": "generate sponsoring contracts",
|
||||||
"go-to-login": "Go To Login",
|
"generating-pdf": "generating PDF...",
|
||||||
"goback": "Go Home",
|
"generating-pdfs": "generating PDFs...",
|
||||||
"granted": "granted",
|
"generic-ui-logic-error": "Something went wrong in the UI logic",
|
||||||
"group": "Group",
|
"german": "German",
|
||||||
"group-added": "Group added",
|
"go-to-login": "Go To Login",
|
||||||
"group-is-being-added": "Group is being added...",
|
"goback": "Go Home",
|
||||||
"group-name-is-required": "Group name is required",
|
"granted": "granted",
|
||||||
"group-updated": "group updated",
|
"group": "Group",
|
||||||
"groups": "Groups",
|
"group-added": "Group added",
|
||||||
"groups-are-being-loaded": "Groups are being loaded",
|
"group-is-being-added": "Group is being added...",
|
||||||
"home": "Home",
|
"group-name-is-required": "Group name is required",
|
||||||
"icon-image-credits": "We also want to thank these projects for illustrations and icons:",
|
"group-updated": "group updated",
|
||||||
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.",
|
"groups": "Groups",
|
||||||
"import-finished": "Import finished",
|
"groups-are-being-loaded": "Groups are being loaded",
|
||||||
"import-runners": "Import runners",
|
"home": "Home",
|
||||||
"import__target-organization": "Target Organization",
|
"icon-image-credits": "We also want to thank these projects for illustrations and icons:",
|
||||||
"imprint": "Imprint",
|
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.",
|
||||||
"imprint-loading": "Imprint loading...",
|
"import-finished": "Import finished",
|
||||||
"inactive": "Inactive",
|
"import-runners": "Import runners",
|
||||||
"installed-version": "Installed version",
|
"import__target-organization": "Target Organization",
|
||||||
"internal-error": "Internal Error",
|
"imprint": "Imprint",
|
||||||
"invalid": "Invalid",
|
"imprint-loading": "Imprint loading...",
|
||||||
"invalid-mail-reset": "the provided email is invalid",
|
"inactive": "Inactive",
|
||||||
"just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them",
|
"installed-version": "Installed version",
|
||||||
"laeufer-hinzufuegen": "Add runner",
|
"internal-error": "Internal Error",
|
||||||
"laeufer-importieren": "Läufer importieren",
|
"invalid": "Invalid",
|
||||||
"laptime": "Laptime",
|
"invalid-mail-reset": "the provided email is invalid",
|
||||||
"last-name": "Last name",
|
"just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them",
|
||||||
"last-name-is-required": "Last Name is required",
|
"laeufer-hinzufuegen": "Add runner",
|
||||||
"lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.",
|
"laeufer-importieren": "Läufer importieren",
|
||||||
"license": "License",
|
"laptime": "Laptime",
|
||||||
"licenses-are-being-loaded": "Licenses are being loaded...",
|
"last-name": "Last name",
|
||||||
"loading-cards": "Loading cards",
|
"last-name-is-required": "Last Name is required",
|
||||||
"loading-contact-details": "Loading contact details...",
|
"lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.",
|
||||||
"loading-donation-details": "Loading donation details",
|
"license": "License",
|
||||||
"loading-donor-details": "Loading donor details",
|
"licenses-are-being-loaded": "Licenses are being loaded...",
|
||||||
"loading-group-detail": "Loading group detail...",
|
"loading-cards": "Loading cards",
|
||||||
"loading-profile-data": "Loading profile data",
|
"loading-contact-details": "Loading contact details...",
|
||||||
"loading-runners": "loading runners...",
|
"loading-donation-details": "Loading donation details",
|
||||||
"loading-station-details": "Loading station details",
|
"loading-donor-details": "Loading donor details",
|
||||||
"log_in": "Log in",
|
"loading-group-detail": "Loading group detail...",
|
||||||
"log_in_to_your_account": "Log in to your account",
|
"loading-profile-data": "Loading profile data",
|
||||||
"login_is_checked": "Login is being checked...",
|
"loading-runners": "loading runners...",
|
||||||
"logout": "Logout",
|
"loading-station-details": "Loading station details",
|
||||||
"mail-validation-in-progress": "mail validation in progress...",
|
"log_in": "Log in",
|
||||||
"manage-admin-users": "manage admin users",
|
"log_in_to_your_account": "Log in to your account",
|
||||||
"middle-name": "Middle name",
|
"login_is_checked": "Login is being checked...",
|
||||||
"minimum-lap-time-in-s": "minimum lap time in s",
|
"logout": "Logout",
|
||||||
"minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0",
|
"mail-validation-in-progress": "mail validation in progress...",
|
||||||
"name": "Name",
|
"manage-admin-users": "manage admin users",
|
||||||
"name-is-required": "Name is required",
|
"middle-name": "Middle name",
|
||||||
"new-password": "New password",
|
"minimum-lap-time-in-s": "minimum lap time in s",
|
||||||
"no-contact-found": "No contacts found",
|
"minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0",
|
||||||
"no-contact-selected": "No contact selected",
|
"must-be-at-least-10-characters-long": "Must be at least 10 characters long!",
|
||||||
"no-contact-specified": "no contact specified",
|
"must-contain-a-lowercase-letter": "Must contain a lowercase letter!",
|
||||||
"no-donors-found": "No donors found",
|
"must-contain-a-number": "Must contain a number!",
|
||||||
"no-license-text-could-be-found": "No license text could be found 😢",
|
"must-contain-a-uppercase-letter": "Must contain a uppercase letter!",
|
||||||
"no-organization-or-team-found": "No organization or team found",
|
"name": "Name",
|
||||||
"no-organization-specified": "no organization specified",
|
"name-is-required": "Name is required",
|
||||||
"no-organizations-found": "No organizations found",
|
"new-password": "New password",
|
||||||
"no-runners-found": "No runners found",
|
"no-contact-found": "No contacts found",
|
||||||
"no-tracks-added-yet": "there are no tracks added yet.",
|
"no-contact-selected": "No contact selected",
|
||||||
"non-blanko": "Non/Blanko",
|
"no-contact-specified": "no contact specified",
|
||||||
"organization": "Organization",
|
"no-donors-found": "No donors found",
|
||||||
"organization-added": "Organization added",
|
"no-license-text-could-be-found": "No license text could be found 😢",
|
||||||
"organization-deleted": "Organization deleted",
|
"no-organization-or-team-found": "No organization or team found",
|
||||||
"organization-detail-is-being-loaded": "organization detail is being loaded...",
|
"no-organization-specified": "no organization specified",
|
||||||
"organization-is-being-added": "Organization is being added...",
|
"no-organizations-found": "No organizations found",
|
||||||
"organization-name-is-required": "Organization name is required",
|
"no-runners-found": "No runners found",
|
||||||
"organizations": "Organizations",
|
"no-tracks-added-yet": "there are no tracks added yet.",
|
||||||
"organizations-are-being-loaded": "organizations are being loaded...",
|
"non-blanko": "Non/Blanko",
|
||||||
"orgs": "Organizations",
|
"organization": "Organization",
|
||||||
"oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!",
|
"organization-added": "Organization added",
|
||||||
"password": "Password",
|
"organization-deleted": "Organization deleted",
|
||||||
"password-changed": "Password changed!",
|
"organization-detail-is-being-loaded": "organization detail is being loaded...",
|
||||||
"password-is-required": "Password is required",
|
"organization-is-being-added": "Organization is being added...",
|
||||||
"password-reset-failed": "Password reset failed!",
|
"organization-name-is-required": "Organization name is required",
|
||||||
"password-reset-in-progress": "Password Reset in Progress...",
|
"organizations": "Organizations",
|
||||||
"password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".",
|
"organizations-are-being-loaded": "organizations are being loaded...",
|
||||||
"password-reset-successful": "Password Reset successful!",
|
"orgs": "Organizations",
|
||||||
"passwords-dont-match": "Passwords don't match",
|
"oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!",
|
||||||
"pdf-generation-failed": "PDF generation failed!",
|
"password": "Password",
|
||||||
"pdf-successfully-generated": "PDF successfully generated!",
|
"password-changed": "Password changed!",
|
||||||
"pdfs-successfully-generated": "PDFs successfully generated!",
|
"password-is-required": "Password is required",
|
||||||
"per-kilometer": "per Kilometer",
|
"password-reset-failed": "Password reset failed!",
|
||||||
"permissions": "Permissions",
|
"password-reset-in-progress": "Password Reset in Progress...",
|
||||||
"permissions-updated": "Permissions updated!",
|
"password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".",
|
||||||
"phone": "Phone",
|
"password-reset-successful": "Password Reset successful!",
|
||||||
"please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.",
|
"passwords-dont-match": "Passwords don't match!",
|
||||||
"please-provide-a-password": "Please provide a password...",
|
"pdf-generation-failed": "PDF generation failed!",
|
||||||
"please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor",
|
"pdf-successfully-generated": "PDF successfully generated!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation",
|
"pdfs-successfully-generated": "PDFs successfully generated!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.",
|
"per-kilometer": "per Kilometer",
|
||||||
"please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file",
|
"permissions": "Permissions",
|
||||||
"please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.",
|
"permissions-updated": "Permissions updated!",
|
||||||
"please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.",
|
"phone": "Phone",
|
||||||
"please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.",
|
"please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.",
|
||||||
"please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.",
|
"please-provide-a-password": "Please provide a password...",
|
||||||
"please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.",
|
"please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor",
|
||||||
"please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.",
|
"please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation",
|
||||||
"please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.",
|
"please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.",
|
||||||
"please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation",
|
"please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file",
|
||||||
"please-request-a-new-reset-mail": "Please request a new reset mail...",
|
"please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.",
|
||||||
"privacy": "Privacy",
|
"please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.",
|
||||||
"privacy-loading": "Privacy loading...",
|
"please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.",
|
||||||
"profile": "Profile",
|
"please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.",
|
||||||
"profile-picture": "Profile Picture",
|
"please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.",
|
||||||
"profile-updated": "Profile updated!",
|
"please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.",
|
||||||
"read-license": "Read License",
|
"please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.",
|
||||||
"receipt-needed": "Receipt needed",
|
"please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation",
|
||||||
"repo_link": "Link",
|
"please-request-a-new-reset-mail": "Please request a new reset mail...",
|
||||||
"request-a-new-reset-mail": "Request a new reset mail",
|
"privacy": "Privacy",
|
||||||
"reset-my-password": "Reset my password",
|
"privacy-loading": "Privacy loading...",
|
||||||
"reset-password": "Reset your password",
|
"profile": "Profile",
|
||||||
"runner": "Runner",
|
"profile-picture": "Profile Picture",
|
||||||
"runner-added": "Runner added",
|
"profile-updated": "Profile updated!",
|
||||||
"runner-import": "Runner Import",
|
"read-license": "Read License",
|
||||||
"runner-is-being-added": "Runner is being added...",
|
"receipt-needed": "Receipt needed",
|
||||||
"runner-updated": "Runner updated!",
|
"repo_link": "Link",
|
||||||
"runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"",
|
"request-a-new-reset-mail": "Request a new reset mail",
|
||||||
"runners": "Runners",
|
"reset-my-password": "Reset my password",
|
||||||
"runners-are-being-imported": "Runners are being imported...",
|
"reset-password": "Reset your password",
|
||||||
"runners-are-being-loaded": "runners are being loaded...",
|
"runner": "Runner",
|
||||||
"save": "Save",
|
"runner-added": "Runner added",
|
||||||
"save-changes": "Save Changes",
|
"runner-import": "Runner Import",
|
||||||
"scan-added": "Scan added",
|
"runner-is-being-added": "Runner is being added...",
|
||||||
"scan-is-being-updated": "Scan is being updated",
|
"runner-updated": "Runner updated!",
|
||||||
"scan-with-fixed-distance": "Scan with fixed distance",
|
"runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"",
|
||||||
"scans": "Scans",
|
"runners": "Runners",
|
||||||
"scans-are-being-loaded": "Scans are being loaded",
|
"runners-are-being-imported": "Runners are being imported...",
|
||||||
"scanstation": "Scanstation",
|
"runners-are-being-loaded": "runners are being loaded...",
|
||||||
"scanstation-added": "Scanstation added",
|
"save": "Save",
|
||||||
"scanstation-is-being-added": "Adding scanstation...",
|
"save-changes": "Save Changes",
|
||||||
"scanstations": "Scanstations",
|
"scan-added": "Scan added",
|
||||||
"scanstations-are-being-loaded": "Loading scanstations...",
|
"scan-is-being-updated": "Scan is being updated",
|
||||||
"search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)",
|
"scan-with-fixed-distance": "Scan with fixed distance",
|
||||||
"search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)",
|
"scans": "Scans",
|
||||||
"search-for-donor-name-or-id": "Search for donor (by name or id)",
|
"scans-are-being-loaded": "Scans are being loaded",
|
||||||
"search-for-permission": "Search for permission",
|
"scanstation": "Scanstation",
|
||||||
"search-for-runner-by-name-or-id": "Search for runner (by name or id)",
|
"scanstation-added": "Scanstation added",
|
||||||
"select-all": "select all",
|
"scanstation-is-being-added": "Adding scanstation...",
|
||||||
"select-language": "Select language",
|
"scanstations": "Scanstations",
|
||||||
"send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services",
|
"scanstations-are-being-loaded": "Loading scanstations...",
|
||||||
"set-the-user-active-inactive": "set the user active/ inactive",
|
"search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)",
|
||||||
"settings": "Settings",
|
"search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)",
|
||||||
"settings-for-your-profile": "Settings for your profile",
|
"search-for-donor-name-or-id": "Search for donor (by name or id)",
|
||||||
"something-about-the-group": "Something about the group...",
|
"search-for-permission": "Search for permission",
|
||||||
"stats-are-being-loaded": "stats are being loaded...",
|
"search-for-runner-by-name-or-id": "Search for runner (by name or id)",
|
||||||
"status": "Status",
|
"select-all": "select all",
|
||||||
"stuff-that-could-harm-your-profile": "Stuff that could harm your profile",
|
"select-language": "Select language",
|
||||||
"successful-password-reset": "Successful password reset!",
|
"selfservice-registration": "Selfservice registration",
|
||||||
"team": "Team",
|
"send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services",
|
||||||
"team-detail-is-being-loaded": "team detail is being loaded...",
|
"set-the-user-active-inactive": "set the user active/ inactive",
|
||||||
"team-name": "Team name",
|
"settings": "Settings",
|
||||||
"team-name-is-required": "team name is required",
|
"settings-for-your-profile": "Settings for your profile",
|
||||||
"teams": "Teams",
|
"something-about-the-group": "Something about the group...",
|
||||||
"teams-are-being-loaded": "teams are being loaded...",
|
"stats-are-being-loaded": "stats are being loaded...",
|
||||||
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...",
|
"status": "Status",
|
||||||
"the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m",
|
"stuff-that-could-harm-your-profile": "Stuff that could harm your profile",
|
||||||
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!",
|
"successful-password-reset": "Successful password reset!",
|
||||||
"there-are-no-cards-yet": "There are no cards yet.",
|
"team": "Team",
|
||||||
"there-are-no-contacts-added-yet": "There are no contacts added yet.",
|
"team-detail-is-being-loaded": "team detail is being loaded...",
|
||||||
"there-are-no-donations-yet": "There are no donations yet",
|
"team-name": "Team name",
|
||||||
"there-are-no-donors-yet": "There are no donors yet",
|
"team-name-is-required": "team name is required",
|
||||||
"there-are-no-groups-yet": "There are no groups yet",
|
"teams": "Teams",
|
||||||
"there-are-no-organizations-added-yet": "There are no organizations added yet.",
|
"teams-are-being-loaded": "teams are being loaded...",
|
||||||
"there-are-no-runners-added-yet": "There are no runners added yet.",
|
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...",
|
||||||
"there-are-no-scans-yet": "There are no scans yet",
|
"the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m",
|
||||||
"there-are-no-teams-added-yet": "There are no teams added yet.",
|
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!",
|
||||||
"there-are-no-users-added-yet": "There are no users added yet.",
|
"there-are-no-cards-yet": "There are no cards yet.",
|
||||||
"this-card-is": "This card is",
|
"there-are-no-contacts-added-yet": "There are no contacts added yet.",
|
||||||
"this-might-take-a-moment": "This might take a moment 👀",
|
"there-are-no-donations-yet": "There are no donations yet",
|
||||||
"this-scanstation-is": "This scanstation is",
|
"there-are-no-donors-yet": "There are no donors yet",
|
||||||
"token": "Token",
|
"there-are-no-groups-yet": "There are no groups yet",
|
||||||
"total-distance": "total distance",
|
"there-are-no-organizations-added-yet": "There are no organizations added yet.",
|
||||||
"total-donation-amount": "total donation amount",
|
"there-are-no-runners-added-yet": "There are no runners added yet.",
|
||||||
"total-donations": "total donations",
|
"there-are-no-scans-yet": "There are no scans yet",
|
||||||
"total-scans": "total scans",
|
"there-are-no-teams-added-yet": "There are no teams added yet.",
|
||||||
"track": "Track",
|
"there-are-no-users-added-yet": "There are no users added yet.",
|
||||||
"track-added": "Track added",
|
"this-card-is": "This card is",
|
||||||
"track-data-is-being-loaded": "Track data is being loaded",
|
"this-might-take-a-moment": "This might take a moment 👀",
|
||||||
"track-is-being-added": "Track is being added...",
|
"this-scanstation-is": "This scanstation is",
|
||||||
"track-length-in-m": "Track Length in m",
|
"token": "Token",
|
||||||
"track-length-must-be-greater-than-0": "Track length must be greater than 0",
|
"total-distance": "total distance",
|
||||||
"track-name": "Track name",
|
"total-donation-amount": "total donation amount",
|
||||||
"track-name-must-not-be-empty": "Track name must not be empty",
|
"total-donations": "total donations",
|
||||||
"tracks": "Tracks",
|
"total-scans": "total scans",
|
||||||
"update-card": "Update Card",
|
"track": "Track",
|
||||||
"update-password": "Update password",
|
"track-added": "Track added",
|
||||||
"updated-contact": "Updated contact!",
|
"track-data-is-being-loaded": "Track data is being loaded",
|
||||||
"updated-donor": "updated donor",
|
"track-is-being-added": "Track is being added...",
|
||||||
"updated-organization": "updated organization",
|
"track-length-in-m": "Track Length in m",
|
||||||
"updated-scan": "updated scan",
|
"track-length-must-be-greater-than-0": "Track length must be greater than 0",
|
||||||
"updateing-group": "updateing group...",
|
"track-name": "Track name",
|
||||||
"updating-card": "Updating card",
|
"track-name-must-not-be-empty": "Track name must not be empty",
|
||||||
"updating-organization": "updating organization",
|
"tracks": "Tracks",
|
||||||
"updating-permissions": "updating permissions...",
|
"update-card": "Update Card",
|
||||||
"updating-runner": "Updating runner...",
|
"update-password": "Update password",
|
||||||
"updating-user": "updating user...",
|
"updated-contact": "Updated contact!",
|
||||||
"updating-your-profile": "Updating your profile...",
|
"updated-donor": "updated donor",
|
||||||
"user-added": "User added",
|
"updated-organization": "updated organization",
|
||||||
"user-groups": "User Groups",
|
"updated-scan": "updated scan",
|
||||||
"user-is-being-added": "User is being added...",
|
"updateing-group": "updateing group...",
|
||||||
"user-updated": "User updated",
|
"updating-card": "Updating card",
|
||||||
"username": "Username",
|
"updating-organization": "updating organization",
|
||||||
"users": "Users",
|
"updating-permissions": "updating permissions...",
|
||||||
"valid": "Valid",
|
"updating-runner": "Updating runner...",
|
||||||
"valid-city-is-required": "Valid city is required",
|
"updating-user": "updating user...",
|
||||||
"valid-email-is-required": "valid email is required",
|
"updating-your-profile": "Updating your profile...",
|
||||||
"valid-international-phone-number-is-required": "valid international phone number is required...",
|
"user-added": "User added",
|
||||||
"valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required",
|
"user-groups": "User Groups",
|
||||||
"verfuegbare": "availdable",
|
"user-is-being-added": "User is being added...",
|
||||||
"welcome_wavinghand": "Welcome 👋",
|
"user-updated": "User updated",
|
||||||
"yes-i-copied-the-token": "Yes, I copied the token",
|
"username": "Username",
|
||||||
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!",
|
"users": "Users",
|
||||||
"you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉",
|
"valid": "Valid",
|
||||||
"you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.",
|
"valid-city-is-required": "Valid city is required",
|
||||||
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
|
"valid-email-is-required": "valid email is required",
|
||||||
"you-have-to-provide-an-organization": "You have to provide an organization",
|
"valid-international-phone-number-is-required": "valid international phone number is required...",
|
||||||
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
|
"valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required",
|
||||||
"zip-postal-code": "ZIP/ postal code"
|
"verfuegbare": "availdable",
|
||||||
}
|
"welcome_wavinghand": "Welcome 👋",
|
||||||
|
"yes-i-copied-the-token": "Yes, I copied the token",
|
||||||
|
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!",
|
||||||
|
"you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉",
|
||||||
|
"you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.",
|
||||||
|
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
|
||||||
|
"you-have-to-provide-an-organization": "You have to provide an organization",
|
||||||
|
"you-have-to-save-your-changes-to-generate-a-link": "You have to save your changes to generate a link.",
|
||||||
|
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
|
||||||
|
"zip-postal-code": "ZIP/ postal code",
|
||||||
|
"generate-runner-certificates": "Generate runner certificates"
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import 'windi.css';
|
||||||
|
import "toastify-js/src/toastify.css";
|
||||||
|
import "gridjs/dist/theme/mermaid.css";
|
||||||
|
import App from './App.svelte';
|
||||||
|
|
||||||
|
const app = new App({
|
||||||
|
target: document.body
|
||||||
|
});
|
||||||
|
export default app;
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
export const register = () => {
|
|
||||||
if ('serviceWorker' in navigator) {
|
|
||||||
window.addEventListener('load', () => {
|
|
||||||
navigator.serviceWorker.register('/sw.js').then(
|
|
||||||
(registration) => {
|
|
||||||
// console.log(`sw successful with scope: ${registration.scope}`);
|
|
||||||
},
|
|
||||||
(err) => {
|
|
||||||
// console.log(`sw failed: ${err}`);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
+8
-9
@@ -1,14 +1,13 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
purge: {
|
|
||||||
content: [ './src/**/*.svelte' ]
|
|
||||||
},
|
|
||||||
// darkMode: 'media',
|
|
||||||
variants: {},
|
|
||||||
plugins: [],
|
|
||||||
theme: {
|
theme: {
|
||||||
container: {
|
extend: {
|
||||||
center: true,
|
colors: {
|
||||||
padding: '1.5rem'
|
reepolee: {
|
||||||
|
500: '#b40000',
|
||||||
|
600: '#9c0000',
|
||||||
|
700: '#750000'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
const fs = require('fs');
|
|
||||||
let content_svelteconfig = fs.readFileSync('./s-config.template.js', { encoding: 'utf8' });
|
|
||||||
let content_html = fs.readFileSync('./index.template.html', { encoding: 'utf8' });
|
|
||||||
if (process.env.NODE_ENV_ODIT == 'development_fast') {
|
|
||||||
content_html = content_html.replace(
|
|
||||||
'__TAILWIND_INSERT__',
|
|
||||||
'<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tailwindcss@2.0.2/dist/tailwind.min.css">'
|
|
||||||
);
|
|
||||||
content_svelteconfig = content_svelteconfig.replace('__insert__', '{postcss:{}}');
|
|
||||||
} else {
|
|
||||||
content_html = content_html.replace('__TAILWIND_INSERT__', '');
|
|
||||||
content_svelteconfig = content_svelteconfig.replace(
|
|
||||||
'__insert__',
|
|
||||||
"{postcss:{plugins:[require('tailwindcss'),require('autoprefixer')]}}"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
fs.writeFileSync('./public/index.html', content_html);
|
|
||||||
fs.writeFileSync('./svelte.config.js', content_svelteconfig);
|
|
||||||
console.info('dev setup script done');
|
|
||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const package = JSON.parse(fs.readFileSync(`./package.json`, { encoding: 'utf-8' }));
|
const package = JSON.parse(fs.readFileSync(`./package.json`, { encoding: 'utf-8' }));
|
||||||
const original = fs.readFileSync(`./index.template.html`, { encoding: 'utf-8' });
|
const original = fs.readFileSync(`./index.html`, { encoding: 'utf-8' });
|
||||||
let out = original.replace(/RELEASE_INFO-(\S)+-RELEASE_INFO/gi, 'RELEASE_INFO-' + package.version + '-RELEASE_INFO');
|
let out = original.replace(/RELEASE_INFO-(\S)+-RELEASE_INFO/gi, 'RELEASE_INFO-' + package.version + '-RELEASE_INFO');
|
||||||
fs.writeFileSync(`./index.template.html`, out);
|
fs.writeFileSync(`./index.html`, out);
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import svelte from '@sveltejs/vite-plugin-svelte';
|
||||||
|
import windiCSS from 'vite-plugin-windicss';
|
||||||
|
import { minify } from 'html-minifier';
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
//
|
||||||
|
const indexReplace = () => {
|
||||||
|
return {
|
||||||
|
name: 'html-transform',
|
||||||
|
transformIndexHtml(html) {
|
||||||
|
return minify(html, {
|
||||||
|
collapseWhitespace: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default defineConfig(({ command, mode }) => {
|
||||||
|
const isProduction = mode === 'production';
|
||||||
|
return {
|
||||||
|
// base: './',
|
||||||
|
build: {
|
||||||
|
polyfillDynamicImport: false,
|
||||||
|
cssCodeSplit: false,
|
||||||
|
minify: isProduction
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
windiCSS({
|
||||||
|
//@ts-ignore
|
||||||
|
verbose: true,
|
||||||
|
silent: false,
|
||||||
|
debug: true,
|
||||||
|
config: 'tailwind.config.js', // tailwind config file path (optional)
|
||||||
|
compile: false, // false: interpretation mode; true: compilation mode
|
||||||
|
prefix: 'windi-', // set compilation mode style prefix
|
||||||
|
globalPreflight: true, // set preflight style is global or scoped
|
||||||
|
globalUtility: true // set utility style is global or scoped
|
||||||
|
}),
|
||||||
|
svelte({
|
||||||
|
//@ts-ignore
|
||||||
|
hot: !isProduction,
|
||||||
|
emitCss: true,
|
||||||
|
extensions: [ '.md', '.svx', '.svelte' ],
|
||||||
|
preprocess: [
|
||||||
|
//
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
indexReplace()
|
||||||
|
]
|
||||||
|
};
|
||||||
|
});
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
globDirectory: 'public',
|
|
||||||
globPatterns: [ '**/*.{js,ico,png,svg,html,webmanifest,txt,json}' ],
|
|
||||||
globIgnores: [ 'env.js', 'env.sample.js' ],
|
|
||||||
swDest: 'public/sw.js',
|
|
||||||
cleanupOutdatedCaches: true,
|
|
||||||
mode: 'production',
|
|
||||||
sourcemap: false
|
|
||||||
};
|
|
||||||
Reference in new issue
Block a user