-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
91 lines (87 loc) · 3.71 KB
/
script.js
File metadata and controls
91 lines (87 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const LOAD_TEST_PROJECTS = false;
const DEFAULT_PICTURE = "startalk.png";
const makeTooltip = (text, tooltip) => {
let elem = document.createElement("span");
elem.setAttribute("data-bs-toggle", "tooltip");
elem.setAttribute("data-bs-title", tooltip);
elem.innerText = text;
new bootstrap.Tooltip(elem);
return elem;
}
window.onload = async () => {
if (LOAD_TEST_PROJECTS) document.querySelector("#title").innerText += " - TEST";
let { projects } = await (await fetch(LOAD_TEST_PROJECTS ? "/test/projects.json" : "/projects.json")).json();
document.querySelector("#showcase-container").innerText = "";
for (let i of projects) {
let card = document.createElement("div");
card.classList.add("card", "project", "project-" + i.type);
let imgAnchor = document.createElement("a");
imgAnchor.target = "_blank";
imgAnchor.href = i.url;
let img = document.createElement("img");
img.src = i.picture ?? DEFAULT_PICTURE;
img.classList.add("card-img-top");
imgAnchor.appendChild(img);
card.appendChild(imgAnchor);
let cardBody = document.createElement("div");
cardBody.classList.add("card-body");
let title = document.createElement("h5");
title.classList.add("card-title");
title.innerText = i.title;
cardBody.appendChild(title);
let subtitle = document.createElement("h6");
subtitle.classList.add("card-subtitle", "mb-2", "text-body-secondary");
subtitle.appendChild(makeTooltip(i.author.hanzi, i.author.pinyin));
let subtitleEng = document.createElement("span");
subtitleEng.innerText = ` (${i.author.english})`;
subtitle.appendChild(subtitleEng);
cardBody.appendChild(subtitle);
if (i.description) {
let desc = document.createElement("p");
desc.classList.add("card-text");
desc.innerHTML = i.description;
cardBody.appendChild(desc);
}
let open = document.createElement("a");
open.classList.add("btn", "btn-primary");
open.href = i.url;
open.target = "_blank";
open.innerText = i.button ?? "Open Project";
cardBody.appendChild(open);
card.appendChild(cardBody);
document.querySelector("#showcase-container").appendChild(card);
}
document.querySelector("#toggle").onchange = () => {
let checked = "";
for (let i of document.querySelectorAll("[name=toggle-state]")) {
if (i.checked) {
checked = i.id;
break;
}
}
switch (checked) {
case "toggle-all": {
for (let i of document.getElementsByClassName("project-data")) i.hidden = false;
for (let i of document.getElementsByClassName("project-web")) i.hidden = false;
break;
}
case "toggle-data": {
for (let i of document.getElementsByClassName("project-data")) i.hidden = false;
for (let i of document.getElementsByClassName("project-web")) i.hidden = true;
break;
}
case "toggle-web": {
for (let i of document.getElementsByClassName("project-data")) i.hidden = true;
for (let i of document.getElementsByClassName("project-web")) i.hidden = false;
break;
}
default: {
console.log("Unrecognized checkbox:", checked);
break;
}
}
};
for (let i of document.querySelectorAll("[name=toggle-state]")) {
i.disabled = false;
}
};