Compare commits
9 Commits
0.16.5
...
0625937068
| Author | SHA1 | Date | |
|---|---|---|---|
|
0625937068
|
|||
|
32a9074963
|
|||
|
b869b5fd2a
|
|||
| 3a3e2f7157 | |||
| bea57aa03a | |||
| 30991d5364 | |||
| 5cc8b0811c | |||
| 2c73b9862d | |||
| 732b2f061e |
8
.gitignore
vendored
8
.gitignore
vendored
@@ -1,11 +1,5 @@
|
|||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
|
||||||
yarn.lock
|
|
||||||
*.map
|
*.map
|
||||||
public/env.js
|
public/env.js
|
||||||
public/index.html
|
public/index.html
|
||||||
/dist
|
/dist
|
||||||
.yarn
|
|
||||||
.pnp.js
|
|
||||||
.yarnrc.yml
|
|
||||||
pnpm-lock.yaml
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
FROM registry.odit.services/hub/library/node:19.5.0-alpine3.16 as build
|
FROM registry.odit.services/hub/library/node:19.7.0-alpine3.16 as build
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY package.json ./
|
COPY package.json ./
|
||||||
RUN npx pnpm i
|
RUN npx pnpm i
|
||||||
COPY package.json *.config.js postcss.config.cjs tailwind.config.js vite.config.js index.html ./
|
COPY package.json pnpm-lock.yaml *.config.js postcss.config.cjs tailwind.config.js vite.config.js index.html ./
|
||||||
COPY src ./src
|
COPY src ./src
|
||||||
COPY public ./public
|
COPY public ./public
|
||||||
RUN yarn build
|
RUN pnpm build
|
||||||
# final image
|
# final image
|
||||||
FROM registry.odit.services/library/nginx-brotli:3.15 as final
|
FROM registry.odit.services/library/nginx-brotli:3.15 as final
|
||||||
COPY --from=build /app/dist /usr/share/nginx/html
|
COPY --from=build /app/dist /usr/share/nginx/html
|
||||||
|
|||||||
51
package.json
51
package.json
@@ -10,32 +10,19 @@
|
|||||||
},
|
},
|
||||||
"license": "CC-BY-NC-SA-4.0",
|
"license": "CC-BY-NC-SA-4.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@odit/lfk-client-js": "0.13.1",
|
"@odit/lfk-client-js": "0.13.3",
|
||||||
"@odit/license-exporter": "0.0.11",
|
"@odit/license-exporter": "0.0.12",
|
||||||
"@sveltejs/vite-plugin-svelte": "1.0.0-next.6",
|
"@sveltejs/vite-plugin-svelte": "1.0.0-next.6",
|
||||||
"@types/html-minifier": "4.0.0",
|
"@types/html-minifier": "4.0.2",
|
||||||
"@vincjo/datatables": "^1.1.0",
|
"auto-changelog": "2.4.0",
|
||||||
"auto-changelog": "2.2.1",
|
"autoprefixer": "10.4.14",
|
||||||
"autoprefixer": "10.2.5",
|
|
||||||
"check-password-strength": "2.0.2",
|
|
||||||
"csvtojson": "2.0.10",
|
|
||||||
"gridjs": "3.4.0",
|
|
||||||
"html-minifier": "4.0.0",
|
"html-minifier": "4.0.0",
|
||||||
"localforage": "1.9.0",
|
"postcss": "8.4.21",
|
||||||
"marked": "2.0.3",
|
"release-it": "15.8.0",
|
||||||
"postcss": "8.2.10",
|
"svelte": "3.56.0",
|
||||||
"release-it": "14.6.1",
|
|
||||||
"svelte": "3.37.0",
|
|
||||||
"svelte-focus-trap": "1.2.0",
|
|
||||||
"svelte-i18n": "3.3.9",
|
|
||||||
"svelte-preprocess": "4.7.0",
|
"svelte-preprocess": "4.7.0",
|
||||||
"svelte-select": "3.17.0",
|
|
||||||
"tailwindcss": "3.2.7",
|
"tailwindcss": "3.2.7",
|
||||||
"tinro": "0.6.1",
|
"vite": "2.1.5"
|
||||||
"toastify-js": "1.10.0",
|
|
||||||
"validator": "13.5.2",
|
|
||||||
"vite": "2.1.5",
|
|
||||||
"xlsx": "0.16.9"
|
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
@@ -55,6 +42,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@paralleldrive/cuid2": "^2.2.0"
|
"@paralleldrive/cuid2": "^2.2.0",
|
||||||
|
"localforage": "1.10.0",
|
||||||
|
"tinro": "0.6.12",
|
||||||
|
"toastify-js": "1.12.0",
|
||||||
|
"svelte-focus-trap": "1.2.0",
|
||||||
|
"svelte-i18n": "3.6.0",
|
||||||
|
"svelte-select": "3.17.0",
|
||||||
|
"xlsx": "0.18.5",
|
||||||
|
"validator": "13.9.0",
|
||||||
|
"marked": "2.0.3",
|
||||||
|
"check-password-strength": "2.0.2",
|
||||||
|
"csvtojson": "2.0.10",
|
||||||
|
"gridjs": "3.4.0",
|
||||||
|
"@vincjo/datatables": "^1.4.0"
|
||||||
|
},
|
||||||
|
"volta": {
|
||||||
|
"node": "19.7.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
3692
pnpm-lock.yaml
generated
Normal file
3692
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@
|
|||||||
import CardDetailModal from "./CardDetailModal.svelte";
|
import CardDetailModal from "./CardDetailModal.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
import ThFilterStatus from "./ThFilterStatus.svelte";
|
import ThFilterStatus from "./ThFilterStatus.svelte";
|
||||||
|
import ThFilterRunner from "./ThFilterRunner.svelte";
|
||||||
export let edit_modal_open = false;
|
export let edit_modal_open = false;
|
||||||
export let runner = {};
|
export let runner = {};
|
||||||
export let editable = {};
|
export let editable = {};
|
||||||
@@ -54,7 +55,7 @@
|
|||||||
bind:runner
|
bind:runner
|
||||||
bind:editable
|
bind:editable
|
||||||
bind:original_data
|
bind:original_data
|
||||||
on:dataUpdated={(handler.setRows(current_cards))}
|
on:dataUpdated={handler.setRows(current_cards)}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
@@ -78,7 +79,7 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th style="border-bottom: 1px solid #ddd;">
|
||||||
<input
|
<input
|
||||||
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"
|
||||||
@@ -95,14 +96,14 @@
|
|||||||
<Th {handler} orderBy="code">{$_("code")}</Th>
|
<Th {handler} orderBy="code">{$_("code")}</Th>
|
||||||
<Th {handler} orderBy="runner">{$_("runner")}</Th>
|
<Th {handler} orderBy="runner">{$_("runner")}</Th>
|
||||||
<Th {handler} orderBy="status">{$_("status")}</Th>
|
<Th {handler} orderBy="status">{$_("status")}</Th>
|
||||||
<th>{$_("action")}</th>
|
<th style="border-bottom: 1px solid #ddd;">{$_("action")}</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th />
|
<th style="border-bottom: 1px solid #ddd;" />
|
||||||
<ThFilter {handler} filterBy="code" />
|
<ThFilter {handler} filterBy="code" />
|
||||||
<ThFilter {handler} filterBy="runner" />
|
<ThFilterRunner {handler} />
|
||||||
<ThFilterStatus {handler} />
|
<ThFilterStatus {handler} />
|
||||||
<th />
|
<th style="border-bottom: 1px solid #ddd;" />
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
57
src/components/cards/ThFilterRunner.svelte
Normal file
57
src/components/cards/ThFilterRunner.svelte
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<script>
|
||||||
|
export let handler;
|
||||||
|
let filterValue = "";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<th>
|
||||||
|
<input
|
||||||
|
on:input={() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const v = filterValue.toLowerCase();
|
||||||
|
handler.filter(v, (c) => {
|
||||||
|
// if (v === "") {
|
||||||
|
// return c;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (!c.runner && v === "blanko") {
|
||||||
|
return "blanko";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v.startsWith("#")) {
|
||||||
|
return `#${c.runner?.id}`;
|
||||||
|
}
|
||||||
|
if (c.runner) {
|
||||||
|
let runnerName = `${c.runner.firstname} ${c.runner.lastname}`;
|
||||||
|
if (c.runner.middlename) {
|
||||||
|
runnerName = `${c.runner.firstname} ${c.runner.middlename} ${c.runner.lastname}`;
|
||||||
|
}
|
||||||
|
runnerName = runnerName.toLowerCase();
|
||||||
|
return runnerName;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
}, 150);
|
||||||
|
}}
|
||||||
|
bind:value={filterValue}
|
||||||
|
type="text"
|
||||||
|
name="runnerfilter"
|
||||||
|
id="runnerfilter"
|
||||||
|
/>
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
th {
|
||||||
|
border-bottom: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
margin: -1px 0 0 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 24px;
|
||||||
|
border: none;
|
||||||
|
text-align: center;
|
||||||
|
background: inherit;
|
||||||
|
outline: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -9,11 +9,10 @@
|
|||||||
on:input={() => {
|
on:input={() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (`${selected}`.trim()) {
|
if (`${selected}`.trim()) {
|
||||||
if(selected==="all"){
|
if (selected === "all") {
|
||||||
handler.filter('', 'enabled')
|
handler.filter("", "enabled");
|
||||||
}
|
} else {
|
||||||
else{
|
handler.filter(selected, "enabled");
|
||||||
handler.filter(selected, 'enabled')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 50);
|
}, 50);
|
||||||
@@ -22,8 +21,25 @@
|
|||||||
name="statusfilter"
|
name="statusfilter"
|
||||||
id="statusfilter"
|
id="statusfilter"
|
||||||
>
|
>
|
||||||
<option value="all">{$_('all')}</option>
|
<option value="all">{$_("all")}</option>
|
||||||
<option value="true">{$_("enabled")}</option>
|
<option value="true">{$_("enabled")}</option>
|
||||||
<option value="false">{$_("disabled")}</option>
|
<option value="false">{$_("disabled")}</option>
|
||||||
</select>
|
</select>
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
th {
|
||||||
|
border-bottom: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
margin: -1px 0 0 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 24px;
|
||||||
|
border: none;
|
||||||
|
text-align: center;
|
||||||
|
background: inherit;
|
||||||
|
outline: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th style="border-bottom: 1px solid #ddd;">
|
||||||
<input
|
<input
|
||||||
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"
|
||||||
@@ -91,19 +91,19 @@
|
|||||||
<Th {handler} orderBy="firstname">First Name</Th>
|
<Th {handler} orderBy="firstname">First Name</Th>
|
||||||
<Th {handler} orderBy="middlename">Middle Name</Th>
|
<Th {handler} orderBy="middlename">Middle Name</Th>
|
||||||
<Th {handler} orderBy="lastname">Last Name</Th>
|
<Th {handler} orderBy="lastname">Last Name</Th>
|
||||||
<th>Gruppe</th>
|
<th style="border-bottom: 1px solid #ddd;">Gruppe</th>
|
||||||
<Th {handler} orderBy="distance">Distanz</Th>
|
<Th {handler} orderBy="distance">Distanz</Th>
|
||||||
<th>{$_("action")}</th>
|
<th style="border-bottom: 1px solid #ddd;">{$_("action")}</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th />
|
<th style="border-bottom: 1px solid #ddd;" />
|
||||||
<ThFilter {handler} filterBy="id" />
|
<ThFilter {handler} filterBy="id" />
|
||||||
<ThFilter {handler} filterBy="firstname" />
|
<ThFilter {handler} filterBy="firstname" />
|
||||||
<ThFilter {handler} filterBy="middlename" />
|
<ThFilter {handler} filterBy="middlename" />
|
||||||
<ThFilter {handler} filterBy="lastname" />
|
<ThFilter {handler} filterBy="lastname" />
|
||||||
<ThFilterGroup groups={selectgroups} {handler} />
|
<ThFilterGroup groups={selectgroups} {handler} />
|
||||||
<th />
|
<th style="border-bottom: 1px solid #ddd;" />
|
||||||
<th />
|
<th style="border-bottom: 1px solid #ddd;" />
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
@@ -82,14 +82,6 @@
|
|||||||
<tr data-rowid="user_{u.id}">
|
<tr data-rowid="user_{u.id}">
|
||||||
<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">
|
||||||
{#if u.profilePic}
|
|
||||||
<div class="flex-shrink-0 h-10 w-10">
|
|
||||||
<img
|
|
||||||
class="h-10 w-10 rounded-full"
|
|
||||||
src={u.profilePic}
|
|
||||||
alt="" />
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
<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">
|
||||||
{u.firstname}
|
{u.firstname}
|
||||||
|
|||||||
Reference in New Issue
Block a user