diff --git a/src/main/resources/static/details.css b/src/main/resources/static/details.css index 0290013..86bb412 100644 --- a/src/main/resources/static/details.css +++ b/src/main/resources/static/details.css @@ -14,12 +14,14 @@ main { } & > :first-child { - border-radius: var(--corner-radius) var(--corner-radius) 0 0; + border-top-left-radius: var(--corner-radius); + border-top-right-radius: var(--corner-radius); margin-top: var(--pad-main); } & > :last-child { - border-radius: 0 0 var(--corner-radius) var(--corner-radius); + border-bottom-left-radius: var(--corner-radius); + border-bottom-right-radius: var(--corner-radius); margin-bottom: var(--pad-main); } @@ -43,10 +45,13 @@ header { grid-gap: var(--gap-medium); } -#title { - grid-column: 1 / 3; +h1 { margin-block: var(--gap-medium) 0; text-align: center; +} + +#title { + grid-column: 1 / 3; &::after { content: attr(data-type); @@ -69,28 +74,41 @@ header { } } -:has(#rating), #url { +#details summary, #url { text-align: start; grid-column: 1 / 3; } #rating { color: color-mix(in oklab, var(--text-color) 80%, black); -} - -#rating::after { - content: ""; - display: inline-block; - width: 5em; + color: transparent; + width: 5lh; height: 1lh; - vertical-align: bottom; margin-inline: .5ch; mask-image: url("stars.svg"); -webkit-mask-image: url("stars.svg"); - mask-size: 100% 100%; + mask-size: contain; mask-mode: alpha; --rating-percent: calc((var(--rating, 0) / 5) * 100%); - background: linear-gradient(to right, var(--rating-color) var(--rating-percent), var(--bg-color) var(--rating-percent)); + background: var(--bg-color); + vertical-align: bottom; +} + +#rating::-webkit-meter-bar { + background: var(--bg-color); + border: none; + border-radius: 0; + grid-row: 1 / -1; +} + +#rating::-webkit-meter-optimum-value, +#rating::-webkit-meter-suboptimum-value, +#rating::-webkit-meter-even-less-good-value { + background-color: var(--rating-color); +} + +#rating::-moz-meter-bar { + background: var(--rating-color); } a { @@ -103,10 +121,6 @@ a { color: var(--text-color); } -#terms-of-use { - /* text-align: end; */ -} - .upvote { margin: var(--gap-medium) 0; align-self: self-start; @@ -125,10 +139,10 @@ a { text-wrap: balance; text-wrap: pretty; margin-top: 0; +} - br { - margin-bottom: .5lh; - } +:is(#full-description, #not-found) br { + margin-bottom: .5lh; } .skeleton { @@ -178,3 +192,22 @@ a { background-position-x: calc(1.4 * var(--min-card-size)), 0; } } + +#not-found:not(.hidden) { + min-height: calc(100vh - 2 * var(--pad-main)); + display: flex; + flex-direction: column; + gap: var(--gap-large); + justify-content: space-evenly; + container: nothing-found / inline-size; + + p, h1 { + text-align: center; + text-wrap: balance; + text-wrap: pretty; + } +} + +#nothing-found-bg { + background-position-x: calc(50% + 3cqh); +} diff --git a/src/main/resources/static/details.html b/src/main/resources/static/details.html index ab97874..e91405e 100644 --- a/src/main/resources/static/details.html +++ b/src/main/resources/static/details.html @@ -19,13 +19,13 @@ -
+

Title

- - 4 + + 4 Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis recusandae laborum odio corrupti voluptas quisquam dicta, quibusdam ipsum qui exercitationem. - + https://example.com/dataset
- Added on: 1. January 1970 + Added on: Category: Something License: MIT Terms of Use
-
+

Full description
Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae nihil saepe et numquam quo id voluptatum recusandae assumenda @@ -59,5 +59,18 @@

+ +
+

This is not the page you're looking for.

+
+

+ The dataset or API you were sent to is not in our database. + Either it has been deleted by its author or we didn't know of it + to begin with. +
+ You can try browsing for other datasets and APIs on our + homepage. +

+
\ No newline at end of file diff --git a/src/main/resources/static/details.js b/src/main/resources/static/details.js index 26991c6..e770a5c 100644 --- a/src/main/resources/static/details.js +++ b/src/main/resources/static/details.js @@ -1,9 +1,11 @@ import Dataset from "./dataset.js"; -const mainElement = document.getElementsByTagName("main")[0]; +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"); @@ -26,19 +28,19 @@ if (currentLocation.searchParams.has("id")) { title.innerText = dataset.title; title.dataset.type = dataset.type.toLowerCase(); - rating.innerText = dataset.rating; - rating.style.setProperty("--rating", `${dataset.rating}`); + rating.value = dataset.rating; + ratingText.innerText = dataset.rating; shortDescription.innerText = dataset.shortDescription; url.href = dataset.url; url.innerText = dataset.url; - mainElement.querySelector(".upvote").replaceWith(upvoteComponent); + mainPage.querySelector(".upvote").replaceWith(upvoteComponent); + date.datetime = dataset.date; date.innerText = dataset.parseDate().toLocaleDateString(undefined, { day: "numeric", month: "long", year: "numeric", }); - date.dataset.date = dataset.parseDate().getTime(); category.innerText = dataset.category.name; category.dataset.id = dataset.category.id; license.innerText = dataset.license; @@ -46,6 +48,12 @@ if (currentLocation.searchParams.has("id")) { fullDescription.innerText = dataset.fullDescription; - mainElement.classList.remove("skeleton"); + mainPage.classList.remove("skeleton"); + } else { + mainPage.classList.add("hidden"); + notFoundPage.classList.remove("hidden"); } +} else { + mainPage.classList.add("hidden"); + notFoundPage.classList.remove("hidden"); } diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 7f58693..46da537 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -8,6 +8,8 @@ + +