Merge branch '7-add-page-to-view-dataset-api' into '22-integrate-api-and-frontend'
Resolve "Add page to view dataset/API" See merge request padas/24ss-5430-web-and-data-eng/gruppe-3/datadash!21
This commit is contained in:
commit
474da3091e
@ -14,12 +14,14 @@ main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
& > :first-child {
|
& > :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);
|
margin-top: var(--pad-main);
|
||||||
}
|
}
|
||||||
|
|
||||||
& > :last-child {
|
& > :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);
|
margin-bottom: var(--pad-main);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,10 +45,13 @@ header {
|
|||||||
grid-gap: var(--gap-medium);
|
grid-gap: var(--gap-medium);
|
||||||
}
|
}
|
||||||
|
|
||||||
#title {
|
h1 {
|
||||||
grid-column: 1 / 3;
|
|
||||||
margin-block: var(--gap-medium) 0;
|
margin-block: var(--gap-medium) 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
grid-column: 1 / 3;
|
||||||
|
|
||||||
&::after {
|
&::after {
|
||||||
content: attr(data-type);
|
content: attr(data-type);
|
||||||
@ -69,28 +74,41 @@ header {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:has(#rating), #url {
|
#details summary, #url {
|
||||||
text-align: start;
|
text-align: start;
|
||||||
grid-column: 1 / 3;
|
grid-column: 1 / 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
#rating {
|
#rating {
|
||||||
color: color-mix(in oklab, var(--text-color) 80%, black);
|
color: color-mix(in oklab, var(--text-color) 80%, black);
|
||||||
}
|
color: transparent;
|
||||||
|
width: 5lh;
|
||||||
#rating::after {
|
|
||||||
content: "";
|
|
||||||
display: inline-block;
|
|
||||||
width: 5em;
|
|
||||||
height: 1lh;
|
height: 1lh;
|
||||||
vertical-align: bottom;
|
|
||||||
margin-inline: .5ch;
|
margin-inline: .5ch;
|
||||||
mask-image: url("stars.svg");
|
mask-image: url("stars.svg");
|
||||||
-webkit-mask-image: url("stars.svg");
|
-webkit-mask-image: url("stars.svg");
|
||||||
mask-size: 100% 100%;
|
mask-size: contain;
|
||||||
mask-mode: alpha;
|
mask-mode: alpha;
|
||||||
--rating-percent: calc((var(--rating, 0) / 5) * 100%);
|
--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 {
|
a {
|
||||||
@ -103,10 +121,6 @@ a {
|
|||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#terms-of-use {
|
|
||||||
/* text-align: end; */
|
|
||||||
}
|
|
||||||
|
|
||||||
.upvote {
|
.upvote {
|
||||||
margin: var(--gap-medium) 0;
|
margin: var(--gap-medium) 0;
|
||||||
align-self: self-start;
|
align-self: self-start;
|
||||||
@ -125,10 +139,10 @@ a {
|
|||||||
text-wrap: balance;
|
text-wrap: balance;
|
||||||
text-wrap: pretty;
|
text-wrap: pretty;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
|
||||||
br {
|
|
||||||
margin-bottom: .5lh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:is(#full-description, #not-found) br {
|
||||||
|
margin-bottom: .5lh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.skeleton {
|
.skeleton {
|
||||||
@ -178,3 +192,22 @@ a {
|
|||||||
background-position-x: calc(1.4 * var(--min-card-size)), 0;
|
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);
|
||||||
|
}
|
||||||
|
@ -19,13 +19,13 @@
|
|||||||
</aside>
|
</aside>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<main class="skeleton">
|
<main id="details" class="skeleton">
|
||||||
<header data-id="dataset-id">
|
<header data-id="dataset-id">
|
||||||
<h1 id="title" data-type="api">Title</h1>
|
<h1 id="title" data-type="api">Title</h1>
|
||||||
<span>
|
<summary>
|
||||||
<span id="rating" style="--rating: 4">4</span>
|
<span id="rating-text">4</span><meter id="rating" value="4" max="5"></meter>
|
||||||
<span id="short-description">Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis recusandae laborum odio corrupti voluptas quisquam dicta, quibusdam ipsum qui exercitationem.</span>
|
<span id="short-description">Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis recusandae laborum odio corrupti voluptas quisquam dicta, quibusdam ipsum qui exercitationem.</span>
|
||||||
</span>
|
</summary>
|
||||||
<a id="url">https://example.com/dataset</a>
|
<a id="url">https://example.com/dataset</a>
|
||||||
<aside class="upvote">
|
<aside class="upvote">
|
||||||
<button disabled class="upvote-btn btn flat">Upvote</button>
|
<button disabled class="upvote-btn btn flat">Upvote</button>
|
||||||
@ -35,13 +35,13 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section id="metadata">
|
<section id="metadata">
|
||||||
<span>Added on: <span id="date" data-date="0">1. January 1970</span></span>
|
<span>Added on: <time id="date" datetime="0">1. January 1970</time></span>
|
||||||
<span>Category: <span id="category">Something</span></span>
|
<span>Category: <span id="category">Something</span></span>
|
||||||
<span>License: <span id="license">MIT</span></span>
|
<span>License: <span id="license">MIT</span></span>
|
||||||
<a id="terms-of-use">Terms of Use</a>
|
<a id="terms-of-use">Terms of Use</a>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="details">
|
<section>
|
||||||
<p id="full-description">Full description<br>
|
<p id="full-description">Full description<br>
|
||||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
|
Lorem ipsum dolor sit amet consectetur adipisicing elit. Beatae
|
||||||
nihil saepe et numquam quo id voluptatum recusandae assumenda
|
nihil saepe et numquam quo id voluptatum recusandae assumenda
|
||||||
@ -59,5 +59,18 @@
|
|||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<main id="not-found" class="hidden">
|
||||||
|
<h1>This is not the page you're looking for.</h1>
|
||||||
|
<div id="nothing-found-bg"></div>
|
||||||
|
<p>
|
||||||
|
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.
|
||||||
|
<br>
|
||||||
|
You can try browsing for other datasets and APIs on our
|
||||||
|
<a href="/">homepage</a>.
|
||||||
|
</p>
|
||||||
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,9 +1,11 @@
|
|||||||
import Dataset from "./dataset.js";
|
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 title = document.getElementById("title");
|
||||||
const rating = document.getElementById("rating");
|
const rating = document.getElementById("rating");
|
||||||
|
const ratingText = document.getElementById("rating-text");
|
||||||
const shortDescription = document.getElementById("short-description");
|
const shortDescription = document.getElementById("short-description");
|
||||||
const url = document.getElementById("url");
|
const url = document.getElementById("url");
|
||||||
const date = document.getElementById("date");
|
const date = document.getElementById("date");
|
||||||
@ -26,19 +28,19 @@ if (currentLocation.searchParams.has("id")) {
|
|||||||
|
|
||||||
title.innerText = dataset.title;
|
title.innerText = dataset.title;
|
||||||
title.dataset.type = dataset.type.toLowerCase();
|
title.dataset.type = dataset.type.toLowerCase();
|
||||||
rating.innerText = dataset.rating;
|
rating.value = dataset.rating;
|
||||||
rating.style.setProperty("--rating", `${dataset.rating}`);
|
ratingText.innerText = dataset.rating;
|
||||||
shortDescription.innerText = dataset.shortDescription;
|
shortDescription.innerText = dataset.shortDescription;
|
||||||
url.href = dataset.url;
|
url.href = dataset.url;
|
||||||
url.innerText = 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, {
|
date.innerText = dataset.parseDate().toLocaleDateString(undefined, {
|
||||||
day: "numeric",
|
day: "numeric",
|
||||||
month: "long",
|
month: "long",
|
||||||
year: "numeric",
|
year: "numeric",
|
||||||
});
|
});
|
||||||
date.dataset.date = dataset.parseDate().getTime();
|
|
||||||
category.innerText = dataset.category.name;
|
category.innerText = dataset.category.name;
|
||||||
category.dataset.id = dataset.category.id;
|
category.dataset.id = dataset.category.id;
|
||||||
license.innerText = dataset.license;
|
license.innerText = dataset.license;
|
||||||
@ -46,6 +48,12 @@ if (currentLocation.searchParams.has("id")) {
|
|||||||
|
|
||||||
fullDescription.innerText = dataset.fullDescription;
|
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");
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link rel="prefetch" href="https://fonts.googleapis.com/css2?family=Flow+Circular&display=swap">
|
<link rel="prefetch" href="https://fonts.googleapis.com/css2?family=Flow+Circular&display=swap">
|
||||||
<link rel="stylesheet" href="main.css">
|
<link rel="stylesheet" href="main.css">
|
||||||
|
<link rel="prefetch" href="details.html">
|
||||||
|
<link rel="prefetch" href="details.css">
|
||||||
<script type="module" src="main.js" defer></script>
|
<script type="module" src="main.js" defer></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
Loading…
Reference in New Issue
Block a user