import Dataset from "./dataset.js"; const mainPage = document.getElementById("details"); const notFoundPage = document.getElementById("not-found"); const title = document.getElementById("title"); const rating = document.getElementById("rating"); const ratingText = document.getElementById("rating-text"); const shortDescription = document.getElementById("short-description"); const url = document.getElementById("url"); const date = document.getElementById("date"); const category = document.getElementById("category"); const license = document.getElementById("license"); const termsOfUse = document.getElementById("terms-of-use"); const fullDescription = document.getElementById("full-description"); const backButton = document.getElementById("back-btn"); const deleteButton = document.getElementById("delete-btn"); let dataset = null; let currentRating = 0; let isRated = false; const currentLocation = new URL(location.href); if (currentLocation.searchParams.has("id")) { const id = currentLocation.searchParams.get("id"); const response = await fetch(`${currentLocation.origin}/api/v1/datasets/id/${id}`); if (response.ok) { const data = await response.json(); dataset = new Dataset(data); const upvoteComponent = dataset.createUpvoteComponent(); console.log(dataset.storageGet()); debugger if (dataset.storageGetKey("created-locally", false)) { deleteButton.classList.remove("hidden"); } isRated = dataset.storageGetKey("is-rated", false) title.innerText = dataset.title; title.dataset.type = dataset.type.toLowerCase(); rating.value = dataset.rating; ratingText.innerText = parseFloat(dataset.rating).toFixed(1); shortDescription.innerText = dataset.shortDescription; url.href = dataset.url; url.innerText = dataset.url; mainPage.querySelector(".upvote").replaceWith(upvoteComponent); date.datetime = dataset.date; date.innerText = dataset.parseDate().toLocaleDateString(undefined, { day: "numeric", month: "long", year: "numeric", }); category.innerText = dataset.category.name; category.dataset.id = dataset.category.id; license.innerText = dataset.license; termsOfUse.href = dataset.termsOfUse; fullDescription.innerText = dataset.fullDescription; mainPage.classList.remove("skeleton"); } else { mainPage.classList.add("hidden"); notFoundPage.classList.remove("hidden"); } } else { mainPage.classList.add("hidden"); notFoundPage.classList.remove("hidden"); } backButton.addEventListener("click", () => { window.location.href = location.origin; }) deleteButton.addEventListener("click", () => { if (dataset != null) { fetch(`${currentLocation.origin}/api/v1/datasets/id/` + dataset.id, { method: 'DELETE' }).then(resp => { if (resp.ok) { window.location.href = location.origin; } }); } }); rating.addEventListener("mousemove", (event) => { if (!isRated) { let bounds = rating.getBoundingClientRect(); currentRating = Math.round(((event.clientX - bounds.left) / bounds.width) * 5); console.log(currentRating); rating.value = currentRating; } }); rating.addEventListener("mouseleave", () => { rating.value = dataset.rating; }); rating.addEventListener("click", () => { if (!isRated) { fetch(`${currentLocation.origin}/api/v1/datasets/id/` + dataset.id + "/stars?stars=" + currentRating, { method: 'PUT' }).then(resp => { if (resp.ok) { dataset.storageSetKey("is-rated", true); isRated = true; fetch(`${currentLocation.origin}/api/v1/datasets/id/` + dataset.id) .then(resp => resp.json()) .then((data) => { dataset = new Dataset(data); ratingText.innerText = parseFloat(dataset.rating).toFixed(1); rating.value = dataset.rating; }); } }); } })