test
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.4 KiB |
@ -0,0 +1,54 @@
|
||||
const colophon = document.querySelector(".colophon");
|
||||
const container = document.querySelector(".index");
|
||||
|
||||
fetch("releases.json")
|
||||
.then((res) => res.json())
|
||||
.then((data) => {
|
||||
buildIndex(data.releases);
|
||||
});
|
||||
|
||||
const buildIndex = function (releases) {
|
||||
container.innerHTML = "";
|
||||
for (const [index, release] of releases.entries()) {
|
||||
let item = document.createElement("li");
|
||||
let link = document.createElement("a");
|
||||
link.href = index.toString().padStart(2, "0");
|
||||
link.innerHTML = index.toString().padStart(2, "0") + ". " + release.title;
|
||||
item.appendChild(link);
|
||||
item.addEventListener("mouseenter", (e) => {
|
||||
buildColophon(release);
|
||||
});
|
||||
container.appendChild(item);
|
||||
}
|
||||
};
|
||||
|
||||
const buildColophon = function (release) {
|
||||
colophon.innerHTML = "";
|
||||
let caretakers = document.createElement("div");
|
||||
caretakers.classList.add("caretakers");
|
||||
|
||||
for (const caretaker of release.caretakers) {
|
||||
caretakers.appendChild(buildAvatar(caretaker));
|
||||
}
|
||||
|
||||
let contributors = document.createElement("ul");
|
||||
contributors.classList.add("contributors");
|
||||
|
||||
for (const contributor of release.contributors) {
|
||||
let contribution = document.createElement("div");
|
||||
for (const person of contributor) {
|
||||
contribution.appendChild(buildAvatar(person));
|
||||
}
|
||||
contributors.appendChild(contribution);
|
||||
}
|
||||
colophon.appendChild(caretakers);
|
||||
colophon.appendChild(contributors);
|
||||
};
|
||||
|
||||
const buildAvatar = function (who) {
|
||||
let avatar = document.createElement("img");
|
||||
avatar.classList.add("avatar");
|
||||
avatar.src = "img/avatar/" + who + ".jpg";
|
||||
avatar.alt = who;
|
||||
return avatar;
|
||||
};
|
@ -0,0 +1,239 @@
|
||||
{
|
||||
"releases": [
|
||||
{
|
||||
"title": "Try Out",
|
||||
"caretakers": [],
|
||||
"contributors": []
|
||||
},
|
||||
{
|
||||
"title": "Yet to be Named",
|
||||
"caretakers": [
|
||||
"Chae",
|
||||
"Mitsa"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Alex",
|
||||
"Em"
|
||||
],
|
||||
[
|
||||
"Miri"
|
||||
],
|
||||
[
|
||||
"Kamo"
|
||||
],
|
||||
[
|
||||
"Mitsa",
|
||||
"Gr"
|
||||
],
|
||||
[
|
||||
"Kim",
|
||||
"Chae"
|
||||
],
|
||||
[
|
||||
"Supi",
|
||||
"Jian"
|
||||
],
|
||||
[
|
||||
"Gersande",
|
||||
"Carmen"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Uneven Patterns",
|
||||
"caretakers": [
|
||||
"Kim",
|
||||
"Jian"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Em",
|
||||
"Miri"
|
||||
],
|
||||
[
|
||||
"Kamo",
|
||||
"Mitsa",
|
||||
"Supi"
|
||||
],
|
||||
[
|
||||
"Gersande",
|
||||
"Carmen",
|
||||
"Alex"
|
||||
],
|
||||
[
|
||||
"Gr",
|
||||
"Chae"
|
||||
],
|
||||
[
|
||||
"Kim",
|
||||
"Jian"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Emergent Opera",
|
||||
"caretakers": [
|
||||
"Gersande",
|
||||
"Gr",
|
||||
"Kamo"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Kamo",
|
||||
"Supi"
|
||||
],
|
||||
[
|
||||
"Gersande"
|
||||
],
|
||||
[
|
||||
"Em",
|
||||
"Jian"
|
||||
],
|
||||
[
|
||||
"Carmen",
|
||||
"Miri"
|
||||
],
|
||||
[
|
||||
"Alex"
|
||||
],
|
||||
[
|
||||
"Chae",
|
||||
"Kim"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "The Parliament",
|
||||
"caretakers": [
|
||||
"Mitsa",
|
||||
"Gr",
|
||||
"Miri"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Supi",
|
||||
"Kim"
|
||||
],
|
||||
[
|
||||
"Kamo",
|
||||
"Miri"
|
||||
],
|
||||
[
|
||||
"Mitsa",
|
||||
"Alex"
|
||||
],
|
||||
[
|
||||
"Gersande",
|
||||
"Jian"
|
||||
],
|
||||
[
|
||||
"Em",
|
||||
"Carmen"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Nested Narratives",
|
||||
"caretakers": [
|
||||
"Supi",
|
||||
"Em",
|
||||
"Alex"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Miri",
|
||||
"Mitsa"
|
||||
],
|
||||
[
|
||||
"Alex",
|
||||
"Supi"
|
||||
],
|
||||
[
|
||||
"Em",
|
||||
"Kamo"
|
||||
],
|
||||
[
|
||||
"Jian",
|
||||
"Gr"
|
||||
],
|
||||
[
|
||||
"Gersande",
|
||||
"Chae"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Sharing methods for diffractive reading",
|
||||
"caretakers": [
|
||||
"Kamo",
|
||||
"Kim",
|
||||
"Gr"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Em",
|
||||
"Supi"
|
||||
],
|
||||
[
|
||||
"Miri"
|
||||
],
|
||||
[
|
||||
"Chae"
|
||||
],
|
||||
[
|
||||
"Carmen",
|
||||
"Jian"
|
||||
],
|
||||
[
|
||||
"Alex",
|
||||
"Mitsa"
|
||||
],
|
||||
[
|
||||
"Chae",
|
||||
"Em"
|
||||
],
|
||||
[
|
||||
"Kamo",
|
||||
"Kim",
|
||||
"Gr"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "[[Unfolding [] implicancies]]",
|
||||
"caretakers": [
|
||||
"Em",
|
||||
"Jian",
|
||||
"Miri"
|
||||
],
|
||||
"contributors": [
|
||||
[
|
||||
"Mitsa"
|
||||
],
|
||||
[
|
||||
"Gr"
|
||||
],
|
||||
[
|
||||
"Kamo"
|
||||
],
|
||||
[
|
||||
"Chae"
|
||||
],
|
||||
[
|
||||
"Kim"
|
||||
],
|
||||
[
|
||||
"Supi"
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Prologue (Working Title)",
|
||||
"caretakers": [
|
||||
"Chae",
|
||||
"Carmen"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body,
|
||||
html {
|
||||
margin: 0;
|
||||
background-color: peachpuff;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 24px;
|
||||
/* position: absolute; */
|
||||
top: 24px;
|
||||
left: 24px;
|
||||
font-size: 48px;
|
||||
font-weight: normal;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.index {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
padding: 0 24px;
|
||||
margin: 0;
|
||||
|
||||
display: flex;
|
||||
/* justify-content: center; */
|
||||
align-content: flex-start;
|
||||
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.index li {
|
||||
position: relative;
|
||||
padding: 6px 12px;
|
||||
background-color: white;
|
||||
border-radius: 24px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: currentColor;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.index a:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
li:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
display: inline-block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background-color: white;
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
line-height: 50px;
|
||||
}
|
||||
|
||||
.avatar.img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.colophon {
|
||||
position: absolute;
|
||||
bottom: 24px;
|
||||
left: 24px;
|
||||
padding: 24px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.colophon .caretakers {
|
||||
margin-bottom: 24px;
|
||||
}
|