From 3e131c49ae4148942fdf1e8b7d8c25d5b6c54028 Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Tue, 18 Jun 2024 15:09:40 +0200 Subject: [PATCH 01/15] minor changes --- src/main/resources/static/main.css | 21 ++++++++++++---- src/main/resources/templates/index.html | 32 ++++++++++++------------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/resources/static/main.css b/src/main/resources/static/main.css index 0711eca..ece21e9 100644 --- a/src/main/resources/static/main.css +++ b/src/main/resources/static/main.css @@ -4,7 +4,7 @@ --text-color: #dbdbdb; --pad-datasets: 1rem; --pad-main: 2rem; - --min-card-size: 60ch; + --min-card-size: min(60ch, 33vw); --corner-radius: 1rem; font-size: 12pt; font-family: sans-serif; @@ -49,6 +49,9 @@ header { gap: .5rem; background-color: var(--fg-color, darkgrey); padding: .5rem 1rem; + margin-bottom: var(--pad-datasets); + margin-left: var(--pad-datasets); + margin-right: var(--pad-datasets); border-radius: 1.5rem; } @@ -69,14 +72,14 @@ header { gap: 1rem; } -@container (width < 80ch) { +@container (width < 60ch) { .datasets { grid-template-columns: 1fr; } } .dataset { - padding: 1rem 2rem; + padding: var(--pad-datasets) 2rem; background-color: var(--fg-color, darkgrey); border-radius: var(--corner-radius); list-style: none; @@ -136,10 +139,18 @@ header { background-color: var(--bg-color); } -:is(.upvote-btn, .downvote-btn, #search-btn, #filter-btn, #sort-btn, #add-btn):is(:hover, :focus-visible) { +#add-btn:is(:hover, :focus-visible) { + filter: brightness(1.2); +} + +#add-btn:active { + filter: brightness(1.3); +} + +.btn:is(:hover, :focus-visible) { filter: brightness(1.5); } -:is(.upvote-btn, .downvote-btn, #search-btn, #filter-btn, #sort-btn, #add-btn):active { +.btn:active { filter: brightness(1.75); } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 172c714..2ac398e 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -7,7 +7,7 @@ -
+

Welcome to DataDash

@@ -15,12 +15,12 @@
- Sort by
- Filter @@ -30,7 +30,7 @@ - +
@@ -46,9 +46,9 @@
  • @@ -60,9 +60,9 @@
  • @@ -74,9 +74,9 @@
  • @@ -88,9 +88,9 @@
  • @@ -102,9 +102,9 @@
  • @@ -121,9 +121,9 @@ From 00a1f4f12c5eebccebcea1285662e68de67b66fb Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Tue, 18 Jun 2024 15:40:39 +0200 Subject: [PATCH 02/15] Fix button styling for 'add' page --- src/main/resources/static/add.css | 1 + src/main/resources/static/main.css | 8 +++++-- src/main/resources/templates/index.html | 30 ++++++++++++------------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/resources/static/add.css b/src/main/resources/static/add.css index 4361843..a4b4b92 100644 --- a/src/main/resources/static/add.css +++ b/src/main/resources/static/add.css @@ -66,6 +66,7 @@ label:has(#is-dataset) { box-sizing: border-box; background-color: var(--text-color); transition: inset-inline ease-out 50ms; + filter: drop-shadow(rgba(0, 0, 0, .8) 0 0 .25rem); } #is-dataset:not(:checked) + #is-dataset-toggle::before { diff --git a/src/main/resources/static/main.css b/src/main/resources/static/main.css index ece21e9..3c2d591 100644 --- a/src/main/resources/static/main.css +++ b/src/main/resources/static/main.css @@ -147,10 +147,14 @@ header { filter: brightness(1.3); } -.btn:is(:hover, :focus-visible) { +.btn.flat { + transition: filter ease-out 50ms; +} + +.btn.flat:is(:hover, :focus-visible) { filter: brightness(1.5); } -.btn:active { +.btn.flat:active { filter: brightness(1.75); } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 2ac398e..0a7587d 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -15,12 +15,12 @@
    - Sort by
    - Filter @@ -30,7 +30,7 @@ - +
    @@ -46,9 +46,9 @@
  • @@ -60,9 +60,9 @@
  • @@ -74,9 +74,9 @@
  • @@ -88,9 +88,9 @@
  • @@ -102,9 +102,9 @@
  • @@ -121,9 +121,9 @@ From cddfdf546a4d77bd2fbe3f0d9f860c256fc9cab5 Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Tue, 18 Jun 2024 15:57:08 +0200 Subject: [PATCH 03/15] js skeleton implemented --- src/main/resources/static/main.js | 61 +++++++++++++++++++++++++ src/main/resources/templates/index.html | 3 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/static/main.js diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js new file mode 100644 index 0000000..cb3f480 --- /dev/null +++ b/src/main/resources/static/main.js @@ -0,0 +1,61 @@ + +const addButton = document.getElementById("add-btn"); +addButton.addEventListener("click", () => { + navigateToAdd(); +}); + +const filterButton = document.getElementById("filter-btn"); +filterButton.addEventListener("change", () => { + const filterString = filterButton.value; + filter(filterString); +}); + +const searchButton = document.getElementById("search-btn"); +searchButton.addEventListener("click", () => { + const searchString = searchBar.value; + search(searchString); +}); +const searchBar = document.getElementById("search-entry"); +searchBar.addEventListener("change", () => { + const searchString = searchBar.value; + search(searchString); +}); + +const sortButton = document.getElementById("sort-btn"); +sortButton.addEventListener("change", () => { + const sortString = sortButton.value; + sort(sortString); +}); + +const upvoteButton = document.getElementsByClassName("upvote-btn"); +upvoteButton.addEventListener("click", () => { + //const entryID = ; + vote(entryID, true); +}); + +const downvoteButton = document.getElementsByClassName("downvote-btn"); +downvoteButton.addEventListener("click", () => { + //const entryID; + vote(entryID, false); +}); + +function navigateToAdd() { + +} + +function filter(filterString) { + +} + +function search(searchString) { + +} + +function sort(sortString) { + +} + +function vote(entryID, up) { + fetch() + +} \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 2ac398e..15c2664 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -4,7 +4,8 @@ DataDash - + +
    From d5fd98a0666b025ee901c4f70719cc67391a152a Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Tue, 18 Jun 2024 16:38:09 +0200 Subject: [PATCH 04/15] main.js further implemented --- src/main/resources/static/main.js | 27 +++++++++++++++---------- src/main/resources/templates/index.html | 6 +++--- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index cb3f480..c7ab0aa 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -16,7 +16,7 @@ searchButton.addEventListener("click", () => { search(searchString); }); const searchBar = document.getElementById("search-entry"); -searchBar.addEventListener("change", () => { +searchBar.addEventListener("input", () => { const searchString = searchBar.value; search(searchString); }); @@ -27,17 +27,23 @@ sortButton.addEventListener("change", () => { sort(sortString); }); -const upvoteButton = document.getElementsByClassName("upvote-btn"); -upvoteButton.addEventListener("click", () => { - //const entryID = ; +const upvoteButtons = document.getElementsByClassName("upvote-btn"); +const upvoteButtonClickListener = () => { + const entryID = upvoteButton.parent.dataset.id; vote(entryID, true); -}); +}; +for (const upvoteButton of upvoteButtons) { + upvoteButton.addEventListener("click", upvoteButtonClickListener); +} -const downvoteButton = document.getElementsByClassName("downvote-btn"); -downvoteButton.addEventListener("click", () => { - //const entryID; +const downvoteButtons = document.getElementsByClassName("downvote-btn"); +const downvoteButtonClickListener = () => { + const entryID = downvoteButton.parent.dataset.id; vote(entryID, false); -}); +}; +for (const downvoteButton of downvoteButtons) { + downvoteButton.addEventListener("click", downvoteButtonClickListener); +} function navigateToAdd() { @@ -48,7 +54,7 @@ function filter(filterString) { } function search(searchString) { - + console.log(searchString); } function sort(sortString) { @@ -57,5 +63,4 @@ function sort(sortString) { function vote(entryID, up) { fetch() - } \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 15c2664..d345799 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -4,8 +4,8 @@ DataDash - - + +
    @@ -38,7 +38,7 @@

    Recently added:

      -
    • +
    • From 65d9e8ea1f440e533808b239833ba350a9fcc6f0 Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Thu, 20 Jun 2024 15:07:00 +0200 Subject: [PATCH 05/15] main.js mostly done, started implmenting contentUtility.js added sort options to index.html --- src/main/resources/static/contentUtility.js | 11 +++++ src/main/resources/static/main.js | 46 +++++++++++++++++---- src/main/resources/templates/index.html | 10 ++++- 3 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/static/contentUtility.js diff --git a/src/main/resources/static/contentUtility.js b/src/main/resources/static/contentUtility.js new file mode 100644 index 0000000..eb2c2ce --- /dev/null +++ b/src/main/resources/static/contentUtility.js @@ -0,0 +1,11 @@ +function fetchQuery(fetchString) { + fetch(fetchString) + .then(resp => resp.json()) + .then((data) => { + parseContent(data.content); + }); +} + +function parseContent(content) { + +} diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index c7ab0aa..9b74cd2 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,3 +1,10 @@ +const baseURL = "http://" + window.location.host + "/api/v1/datasets"; +const defaultPagingValue = 20; +const lastQuery = { + url: "", + totalPages: 0, + currentPage: 0 +}; const addButton = document.getElementById("add-btn"); addButton.addEventListener("click", () => { @@ -28,8 +35,8 @@ sortButton.addEventListener("change", () => { }); const upvoteButtons = document.getElementsByClassName("upvote-btn"); -const upvoteButtonClickListener = () => { - const entryID = upvoteButton.parent.dataset.id; +const upvoteButtonClickListener = e => { + const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, true); }; for (const upvoteButton of upvoteButtons) { @@ -37,8 +44,8 @@ for (const upvoteButton of upvoteButtons) { } const downvoteButtons = document.getElementsByClassName("downvote-btn"); -const downvoteButtonClickListener = () => { - const entryID = downvoteButton.parent.dataset.id; +const downvoteButtonClickListener = e => { + const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, false); }; for (const downvoteButton of downvoteButtons) { @@ -50,17 +57,38 @@ function navigateToAdd() { } function filter(filterString) { - + filterString = filterString.toUpperCase(); + const fetchURL = baseURL + "?type=" + filterString + "&size=" + defaultPagingValue; + fetchQuery(fetchURL); } function search(searchString) { - console.log(searchString); + const fetchURL = baseURL + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + console.log(fetchURL); + fetchQuery(fetchURL); } function sort(sortString) { - + let query = sortString.toLowerCase().split(" "); + if (query[1] === "A-Z" || query[1] === "↑") { + query[1] = "asc"; + } else { + query[1] = "desc"; + } + const fetchURL = baseURL + "?sort=" + query[0] + "&direction=" + query[1]; + console.log(fetchURL); + fetchQuery(fetchURL); } function vote(entryID, up) { - fetch() -} \ No newline at end of file + console.log(baseURL + "/id/" + entryID + "/" + (up?"upvote":"downvote")); + fetch(baseURL + "/id/" + entryID + "/" + up?"upvote":"downvote"); +} + +function incrementPageCount() { + lastQuery.currentPage++; +} + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index d345799..f80de12 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -17,8 +17,14 @@
      Sort by + Filter - - + + - - + + From efd3c7ddb7dfd2a0baafea2d4b9b896b7e06499c Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 21 Jun 2024 11:34:40 +0200 Subject: [PATCH 11/15] fix: add url field --- .../fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java index 8b1ff2d..50ef8d2 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java @@ -21,8 +21,8 @@ public class LoadDummyDatabase { return args -> { - for (int i = 0; i < 100; i++) { - Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i, new Date(0), new String[]{"Category" + i}, Type.API); + for (int i = 0; i < 1000; i++) { + Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i, new String[]{"Category" + i}, Type.API); repository.save(dataset); log.info("Preloading" + repository.save(dataset)); } From c19459ad01db096bd3c51495ed80edf8e1dc487d Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:03:10 +0200 Subject: [PATCH 12/15] Little fixes --- src/main/resources/static/contentUtility.js | 2 +- src/main/resources/static/main.js | 31 +++++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/resources/static/contentUtility.js b/src/main/resources/static/contentUtility.js index e3adfe5..61c9f36 100644 --- a/src/main/resources/static/contentUtility.js +++ b/src/main/resources/static/contentUtility.js @@ -1,4 +1,4 @@ -import {searchBarTimeout} from "./main.js" +import { searchBarTimeout } from "./main.js" export function fetchQuery(fetchString) { clearTimeout(searchBarTimeout); diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index 08adb7c..2f1d526 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,6 +1,6 @@ import { fetchQuery } from "./contentUtility.js"; -const baseURL = "http://" + window.location.host + "/api/v1/datasets"; +const apiEndpoint = "/api/v1/datasets"; const defaultPagingValue = 20; const lastQuery = { url: "", @@ -10,24 +10,31 @@ const lastQuery = { // definition of all buttons const addButton = document.getElementById("add-btn"); +const filterButton = document.getElementById("filter-btn"); +const searchButton = document.getElementById("search-btn"); +const searchBar = document.getElementById("search-entry"); +const sortButton = document.getElementById("sort-btn"); +const upvoteButtons = document.getElementsByClassName("upvote-btn"); +const downvoteButtons = document.getElementsByClassName("downvote-btn"); + +// ID of the timeout, because we need to cancel it at some point +export let searchBarTimeout; + +// Event listeners addButton.addEventListener("click", () => { navigateToAdd(); }); -const filterButton = document.getElementById("filter-btn"); filterButton.addEventListener("change", () => { const filterString = filterButton.value; filter(filterString); }); -const searchButton = document.getElementById("search-btn"); searchButton.addEventListener("click", () => { const searchString = searchBar.value; search(searchString); }); -const searchBar = document.getElementById("search-entry"); -export let searchBarTimeout; searchBar.addEventListener("input", () => { clearTimeout(searchBarTimeout); searchBarTimeout = setTimeout(() => { @@ -35,6 +42,7 @@ searchBar.addEventListener("input", () => { search(searchString); }, 1000); }); + searchBar.addEventListener('keypress', function (e) { if (e.key === 'Enter') { const searchString = searchBar.value; @@ -42,13 +50,11 @@ searchBar.addEventListener('keypress', function (e) { } }) -const sortButton = document.getElementById("sort-btn"); sortButton.addEventListener("change", () => { const sortString = sortButton.value; sort(sortString); }); -const upvoteButtons = document.getElementsByClassName("upvote-btn"); const upvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, true); @@ -57,7 +63,6 @@ for (const upvoteButton of upvoteButtons) { upvoteButton.addEventListener("click", upvoteButtonClickListener); } -const downvoteButtons = document.getElementsByClassName("downvote-btn"); const downvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, false); @@ -91,20 +96,16 @@ function sort(sortString) { } else { query[1] = "desc"; } - const fetchURL = baseURL + "?sort=" + query[0] + "&direction=" + query[1]; + const fetchURL = apiEndpoint + "?sort=" + query[0] + "&direction=" + query[1]; console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function vote(entryID, up) { - console.log(baseURL + "/id/" + entryID + "/" + (up?"upvote":"downvote")); // TODO: remove - fetch(baseURL + "/id/" + entryID + "/" + up?"upvote":"downvote"); + console.log(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); // TODO: remove + fetch(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); } function incrementPageCount() { lastQuery.currentPage++; } - - - - From 5fda42856dfb86ec2085321342a821793558e44c Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:06:02 +0200 Subject: [PATCH 13/15] Fix filter + search urls --- src/main/resources/static/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index 2f1d526..cf8b852 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -78,13 +78,13 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - const fetchURL = baseURL + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; + const fetchURL = apiEndpoint + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function search(searchString) { - const fetchURL = baseURL + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + const fetchURL = apiEndpoint + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } From 5168ccaf62bdf5efcac7f7b1e2e56b063e4278d9 Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:17:16 +0200 Subject: [PATCH 14/15] Rework URL construction --- src/main/resources/static/main.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index cf8b852..be8bdc6 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -78,13 +78,19 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - const fetchURL = apiEndpoint + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; + + let fetchURL = new URL(apiEndpoint); + fetchURL.searchParams.append("type", filterString); + fetchURL.searchParams.append("size", defaultPagingValue); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function search(searchString) { - const fetchURL = apiEndpoint + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + let fetchURL = new URL(apiEndpoint + "/search"); + fetchURL.searchParams.append("search", searchString.length == 0 ? "%" : searchString); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } @@ -96,14 +102,22 @@ function sort(sortString) { } else { query[1] = "desc"; } - const fetchURL = apiEndpoint + "?sort=" + query[0] + "&direction=" + query[1]; + + let fetchURL = new URL(apiEndpoint); + fetchURL.searchParams.append("sort", query[0]); + fetchURL.searchParams.append("direction", query[1]); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function vote(entryID, up) { - console.log(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); // TODO: remove - fetch(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); + const fetchURL = new URL( + `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote` + ); + + console.log(fetchURL); // TODO: remove + fetch(fetchURL); } function incrementPageCount() { From 8dcd311b98bb3ffbf7c1d2d9193f0522fe330410 Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:21:17 +0200 Subject: [PATCH 15/15] Add base URL to URL construction --- src/main/resources/static/main.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index be8bdc6..91dd9e0 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,6 +1,7 @@ import { fetchQuery } from "./contentUtility.js"; const apiEndpoint = "/api/v1/datasets"; +const baseURL = location.origin; const defaultPagingValue = 20; const lastQuery = { url: "", @@ -79,7 +80,7 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - let fetchURL = new URL(apiEndpoint); + let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("type", filterString); fetchURL.searchParams.append("size", defaultPagingValue); @@ -88,7 +89,7 @@ function filter(filterString) { } function search(searchString) { - let fetchURL = new URL(apiEndpoint + "/search"); + let fetchURL = new URL(apiEndpoint + "/search", baseURL); fetchURL.searchParams.append("search", searchString.length == 0 ? "%" : searchString); console.log(fetchURL); // TODO: remove @@ -103,7 +104,7 @@ function sort(sortString) { query[1] = "desc"; } - let fetchURL = new URL(apiEndpoint); + let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("sort", query[0]); fetchURL.searchParams.append("direction", query[1]); @@ -113,7 +114,8 @@ function sort(sortString) { function vote(entryID, up) { const fetchURL = new URL( - `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote` + `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote`, + baseURL, ); console.log(fetchURL); // TODO: remove