From 5a918b0350eafd6ac806db58a1476c150573b032 Mon Sep 17 00:00:00 2001 From: Linux User Date: Tue, 26 Dec 2023 21:42:52 +0000 Subject: [PATCH] +setup --- backend/http.go | 2 +- frontend/package.json | 14 +- frontend/pnpm-lock.yaml | 20 +- frontend/src/lib/icons/login.svelte | 24 ++ frontend/src/lib/icons/priority.svelte | 43 ++ frontend/src/lib/icons/score.svelte | 32 ++ frontend/src/lib/img/topscorer_logo_alpha.png | Bin 0 -> 9868 bytes frontend/src/lib/img/topscorer_logo_icon.png | Bin 0 -> 20481 bytes frontend/src/lib/img/topscorer_logo_web.png | Bin 0 -> 3268 bytes frontend/src/routes/priority/+page.svelte | 15 +- frontend/src/routes/setup/+page.svelte | 376 ++++++++++++++++++ 11 files changed, 502 insertions(+), 24 deletions(-) create mode 100644 frontend/src/lib/icons/login.svelte create mode 100644 frontend/src/lib/icons/priority.svelte create mode 100644 frontend/src/lib/icons/score.svelte create mode 100755 frontend/src/lib/img/topscorer_logo_alpha.png create mode 100644 frontend/src/lib/img/topscorer_logo_icon.png create mode 100755 frontend/src/lib/img/topscorer_logo_web.png create mode 100644 frontend/src/routes/setup/+page.svelte diff --git a/backend/http.go b/backend/http.go index a751878..515a67c 100644 --- a/backend/http.go +++ b/backend/http.go @@ -84,7 +84,7 @@ func (app *App) RegisterApiRoutes() { api.GET("/sse", app.Stream.SseHeadersMiddleware(), app.Stream.Stream) // api.POST("/startheat", app.StartHeatTimer) // api.GET("/stopheat", app.StopHeatTimer) - // api.POST("/saveheat", app.SaveHeat) + api.POST("/saveheat", app.SaveHeat) // api.POST("/deleteheat", app.DeleteHeat) api.GET("/loadheats", app.LoadHeats) // api.GET("/runningheat", app.LoadRunning) diff --git a/frontend/package.json b/frontend/package.json index b873e3c..3483a1d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,17 +10,17 @@ "format": "prettier --write ." }, "devDependencies": { - "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/adapter-auto": "^3.0.1", "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "eslint": "^8.28.0", + "@sveltejs/kit": "^2.0.6", + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.30.0", + "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.2.7", - "vite": "^5.0.3" + "svelte": "^4.2.8", + "vite": "^5.0.10" }, "type": "module" } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 838ebb8..73214ba 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -6,25 +6,25 @@ settings: devDependencies: '@sveltejs/adapter-auto': - specifier: ^3.0.0 + specifier: ^3.0.1 version: 3.0.1(@sveltejs/kit@2.0.6) '@sveltejs/adapter-static': specifier: ^3.0.1 version: 3.0.1(@sveltejs/kit@2.0.6) '@sveltejs/kit': - specifier: ^2.0.0 + specifier: ^2.0.6 version: 2.0.6(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10) '@sveltejs/vite-plugin-svelte': - specifier: ^3.0.0 + specifier: ^3.0.1 version: 3.0.1(svelte@4.2.8)(vite@5.0.10) eslint: - specifier: ^8.28.0 + specifier: ^8.56.0 version: 8.56.0 eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.56.0) eslint-plugin-svelte: - specifier: ^2.30.0 + specifier: ^2.35.1 version: 2.35.1(eslint@8.56.0)(svelte@4.2.8) prettier: specifier: ^3.1.1 @@ -33,10 +33,10 @@ devDependencies: specifier: ^3.1.2 version: 3.1.2(prettier@3.1.1)(svelte@4.2.8) svelte: - specifier: ^4.2.7 + specifier: ^4.2.8 version: 4.2.8 vite: - specifier: ^5.0.3 + specifier: ^5.0.10 version: 5.0.10 packages: @@ -807,7 +807,7 @@ packages: postcss: 8.4.32 postcss-load-config: 3.1.4(postcss@8.4.32) postcss-safe-parser: 6.0.0(postcss@8.4.32) - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.14 semver: 7.5.4 svelte: 4.2.8 svelte-eslint-parser: 0.33.1(svelte@4.2.8) @@ -1290,8 +1290,8 @@ packages: postcss: 8.4.32 dev: true - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + /postcss-selector-parser@6.0.14: + resolution: {integrity: sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 diff --git a/frontend/src/lib/icons/login.svelte b/frontend/src/lib/icons/login.svelte new file mode 100644 index 0000000..1b0b5f4 --- /dev/null +++ b/frontend/src/lib/icons/login.svelte @@ -0,0 +1,24 @@ + + + + diff --git a/frontend/src/lib/icons/priority.svelte b/frontend/src/lib/icons/priority.svelte new file mode 100644 index 0000000..7423c56 --- /dev/null +++ b/frontend/src/lib/icons/priority.svelte @@ -0,0 +1,43 @@ + + + + diff --git a/frontend/src/lib/icons/score.svelte b/frontend/src/lib/icons/score.svelte new file mode 100644 index 0000000..ddf6f62 --- /dev/null +++ b/frontend/src/lib/icons/score.svelte @@ -0,0 +1,32 @@ + + + + diff --git a/frontend/src/lib/img/topscorer_logo_alpha.png b/frontend/src/lib/img/topscorer_logo_alpha.png new file mode 100755 index 0000000000000000000000000000000000000000..b05ca7ff664091ad57017de1721e1b2eb2ca911f GIT binary patch literal 9868 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 a!9ic6;4mnsIe5M01dx|jlB$3j2mKG#1p|!$ literal 0 HcmV?d00001 diff --git a/frontend/src/lib/img/topscorer_logo_icon.png b/frontend/src/lib/img/topscorer_logo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8dacedae7fa8598431cc10823896978bf9a540c5 GIT binary patch literal 20481 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 + import { onMount } from 'svelte'; + import Logo from "$lib/img/topscorer_logo_web.png" + + let colors = [ + "black", + "blue", + "red", + "green", + "yellow", + "pink", + "white", + ]; + + let rounds = [ + "Qualifying", + "Opening", + "Elimination", + "Round of 48", + "Round of 32", + "Round of 16", + "Quarterfinal", + "Semifinal", + "Final", + ]; + + let categories = [ + "Under 12 Women", + "Under 12 Men", + "Under 14 Women", + "Under 14 Men", + "Under 16 Women", + "Under 16 Men", + "Under 18 Women", + "Under 18 Men", + ]; + + $: surfers = 2; + + $: heats = []; + let surfer_list = []; + $: heat = {}; + + resetHeat(); + loadHeats(); + + function resetHeat() { + surfers = 2; + surfer_list = new Array(); + surfer_list.push({ + name: '', + color: '', + score: '', + priority: '' + }); + surfer_list.push({ + name: '', + color: '', + score: '', + priority: '' + }); + + heat = { + number: 1, + name: '', + category: '', + timer: 20, + surfers: surfer_list + } + } + + async function loadHeats() { + const res = await fetch(`/api/loadheats`); + const data = await res.json(); + for (let i in data) { + heats[i] = data[i]; + console.log(`${i} retval: ${JSON.stringify(data[i])}`); + } + } + + async function deleteHeat(id) { + const res = await fetch(`/api/deleteheat`, { + method: 'POST', + body: JSON.stringify(heats[id]), + headers: { + 'Content-Type': 'application/json' + } + }); + console.log(`retval: ${JSON.stringify(res)}`); + + console.log(JSON.stringify(heats[id])); + resetHeat(); + loadHeats(); + } + + function setHeat(id) { + resetHeat(); + console.log(`setHeat: ${id}`); + console.log(heats[id]); + heat.number = heats[id].number; + heat.name = heats[id].name; + heat.category = heats[id].category; + heat.timer = heats[id].timer; + surfer_list = heats[id].surfers; + surfers = surfer_list.length; + } + + function addSurfers() { + surfers++; + surfer_list.push({ + name: '', + color: '', + score: '', + priority: '' + }); + } + + function removeSurfers() { + surfers--; + if (surfers < 2) surfers = 2; + surfer_list.pop(); + } + + async function save() { + if(hasDuplicateColors(surfer_list)) { + alert('Colors must be unique'); + return; + } + + if(surfer_list.length < 2) { + alert('Must have at least 2 surfers'); + return; + } + + if(heat.name === '') { + alert('Must have a name'); + return; + } + + if(heat.category === '') { + alert('Must have a category'); + return; + } + + if(heat.number === '') { + alert('Must have a number'); + return; + } + + if(heat.timer === '') { + alert('Must have a timer'); + return; + } + + heat.surfers = surfer_list; + + const res = await fetch(`/api/saveheat`, { + method: 'POST', + body: JSON.stringify(heat), + headers: { + 'Content-Type': 'application/json' + } + }); + console.log(`retval: ${JSON.stringify(res)}`); + + console.log(JSON.stringify(heat)); + + resetHeat(); + loadHeats(); + } + + function hasDuplicateColors(arr) { + const colors = []; + + console.log(JSON.stringify(arr)); + + for(let i = 0; i < arr.length; i++) { + const color = arr[i].color; + + if(colors.includes(color)) { + console.log(`duplicate color: ${color}`); + return true; + } + + colors.push(color); + } + + return false; + } + + function capitalize(element, elementName) { + element[elementName] = element[elementName].charAt(0).toUpperCase() + element[elementName].slice(1); + console.log(`element: ${element[elementName]}`); + } + + onMount(() => { + resetHeat(); + loadHeats(); + }); + + + +
+ logo + Heat setup +
+ +
+
+ + + + + + + + + + +
+ +
+
+ + {surfers} + +
+ + + {#each Array(surfers) as _, surfer} +
+ + + + + +
+ {/each} + +
+ + + +
+{#each heats as h, id} +
+ + +
+{/each} + + + + + + \ No newline at end of file