Files
fedizinefest/scripts/zines.js

95 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

function makeZine({ name, blurb, format, site, title }) {
let zine = document.createElement("li");
let h2 = document.createElement("h2");
if (site) {
let a = document.createElement("a");
a.innerHTML = name;
a.href = site;
h2.append(a);
} else {
h2.innerHTML = name;
}
zine.append(h2);
if (title) {
if (typeof title == "string") {
let p = document.createElement("p");
p.innerHTML = " made a " + format + " zine called ";
zine.append(p);
let h3 = document.createElement("h3");
h3.innerHTML = title;
zine.append(h3);
} else {
let p = document.createElement("p");
p.innerHTML = " made " + format + " zines called ";
zine.append(p);
for (let i = 0; i < title.length; i++) {
let h3 = document.createElement("h3");
h3.innerHTML = title[i];
zine.append(h3);
}
}
let p = document.createElement("p");
p.innerHTML = "and the original blurb was";
zine.append(p);
} else {
let p = document.createElement("p");
p.innerHTML = " is making a " + format + " zine:";
zine.append(p);
}
let bq = document.createElement("blockquote");
let bqP = document.createElement("p");
bqP.innerHTML = blurb;
bq.append(bqP);
zine.append(bq);
return zine;
}
function makeZinePage(zines) {
for (let i = 0; i < zines.length; i++) {
zineContainer.append(makeZine(zines[i]));
}
let zineCounter = document.getElementById("zine-count");
let total = zines.length;
let physical = zines.filter(
(zine) => zine.format == "physical" || zine.format == "physical/digital"
).length;
let digital = zines.filter(
(zine) => zine.format == "digital" || zine.format == "physical/digital"
).length;
let p = document.createElement("p");
p.innerHTML =
total +
" artists. " +
physical +
" physical zines. " +
digital +
" digital zines.";
zineCounter.append(p);
}
let zineContainer = document.getElementById("zine-container");
let script = document.currentScript;
let zinefile = script.dataset.zinefile;
fetch(zinefile)
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error, status = ${response.status}`);
}
return response.json();
})
.then((zines) => makeZinePage(zines))
.catch((error) => {
console.log(`Error: ${error.message}`);
});