Compare commits
42
Commits
0.10.0
...
c8cfe669b8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
008027db0e | ||
|
|
aec5e3473e | ||
|
|
95c8fde72f | ||
|
|
0f32968fae | ||
|
|
ae79e9fea1 |
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,12 +2,28 @@
|
|||||||
|
|
||||||
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)
|
#### [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)
|
- Added translations [`79c447b`](https://git.odit.services/lfk/frontend/commit/79c447b4c65e55ebb5af71fb0b09174c36e2cecf)
|
||||||
- Sorted translations 🌍 [`5bd3a46`](https://git.odit.services/lfk/frontend/commit/5bd3a463f00abaf2c98ab554f88e5542d01f364a)
|
- 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)
|
- 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)
|
- 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)
|
- 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)
|
- 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)
|
- Added a password strength verification [`ad3bd31`](https://git.odit.services/lfk/frontend/commit/ad3bd312e9a5785f81029ea2b7e302ea1addd988)
|
||||||
|
|||||||
+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.10.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
-34
@@ -1,46 +1,40 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/lfk-frontend",
|
"name": "@odit/lfk-frontend",
|
||||||
"version": "0.10.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.8.0",
|
|
||||||
"check-password-strength": "^2.0.2",
|
|
||||||
"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": {
|
||||||
@@ -56,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.8.0","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":"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.9.2","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
|
||||||
@@ -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>
|
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,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
|
||||||
@@ -92,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
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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}
|
||||||
@@ -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();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -92,12 +92,14 @@
|
|||||||
"create-a-new-track": "Neuen Track erstellen",
|
"create-a-new-track": "Neuen Track erstellen",
|
||||||
"create-a-new-user": "Neue Benutzer:in anlegen",
|
"create-a-new-user": "Neue Benutzer:in anlegen",
|
||||||
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
||||||
|
"create-and-generate-pdf": "Erstellen und PDF herunterladen",
|
||||||
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
||||||
"create-bulk-cards": "Blankokarten erstellen",
|
"create-bulk-cards": "Blankokarten erstellen",
|
||||||
"create-organization": "Organisation erstellen",
|
"create-organization": "Organisation erstellen",
|
||||||
"create-team": "Team erstellen",
|
"create-team": "Team erstellen",
|
||||||
"create-track": "Track erstellen",
|
"create-track": "Track erstellen",
|
||||||
"create-user": "Benutzer anlegen",
|
"create-user": "Benutzer anlegen",
|
||||||
|
"create-without-pdf": "Ohne PDF erstellen",
|
||||||
"created-blanco-cards": "Blankokarten wurden erstellt",
|
"created-blanco-cards": "Blankokarten wurden erstellt",
|
||||||
"creating-blanco-cards": "Erstelle Blankokarten",
|
"creating-blanco-cards": "Erstelle Blankokarten",
|
||||||
"credits": "Credits",
|
"credits": "Credits",
|
||||||
|
|||||||
@@ -92,12 +92,14 @@
|
|||||||
"create-a-new-track": "Create a new Track",
|
"create-a-new-track": "Create a new Track",
|
||||||
"create-a-new-user": "Create a new User",
|
"create-a-new-user": "Create a new User",
|
||||||
"create-a-new-user-group": "Create a new user group",
|
"create-a-new-user-group": "Create a new user group",
|
||||||
|
"create-and-generate-pdf": "Create and generate PDF",
|
||||||
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
||||||
"create-bulk-cards": "Add blanco cards",
|
"create-bulk-cards": "Add blanco cards",
|
||||||
"create-organization": "Create Organization",
|
"create-organization": "Create Organization",
|
||||||
"create-team": "Create Team",
|
"create-team": "Create Team",
|
||||||
"create-track": "Create Track",
|
"create-track": "Create Track",
|
||||||
"create-user": "Create User",
|
"create-user": "Create User",
|
||||||
|
"create-without-pdf": "Create without PDF",
|
||||||
"created-blanco-cards": "Created blanco cards",
|
"created-blanco-cards": "Created blanco cards",
|
||||||
"creating-blanco-cards": "Creating blanco cards",
|
"creating-blanco-cards": "Creating blanco cards",
|
||||||
"credits": "Credits",
|
"credits": "Credits",
|
||||||
|
|||||||
@@ -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