You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
5.2 KiB
JavaScript

const reference = document.getElementById("reference");
const contributionsList = document.getElementById("contributions");
const trackList = document.getElementById("trackList");
const pagedjs = document.createElement("script");
pagedjs.src = "https://unpkg.com/pagedjs/dist/paged.polyfill.js";
pagedjs.id = "printview";
const printLib = document.getElementById("btn-print");
window.addEventListener("load", () => {
fetchContents();
atlasLink();
});
printLib.addEventListener("click", () => {
document.getElementsByTagName("head")[0].appendChild(pagedjs);
// pardon for this is really stupid but it works
setTimeout(() => {
let sections = [".libretto", ".container", ".content", ".contribution", ".contributions"];
for (const section of sections) {
for (const el of document.querySelectorAll(section)) {
el.classList.add("full-height");
}
}
}, 1000);
});
function fetchContents() {
fetch("https://hub.xpub.nl/soupboat/atlas-api/contributions")
.then((response) => response.json())
.then((data) => populateContributions(data));
}
function populateContributions(contributions) {
contributions.sort((a, b) => a.order - b.order);
contributions.forEach((contribution) => {
contributionsList.appendChild(createSection(contribution));
createIndexSection(contribution);
});
}
function createSection(contribution) {
let section = reference.cloneNode(true);
section.id = contribution.title;
section.querySelector(".moment").innerHTML = contribution.moment;
section.querySelector(".title").innerHTML = contribution.title;
section.querySelector(".author").innerHTML = contribution.author;
section.querySelector(".description").innerHTML = contribution.description;
section.querySelector(".content").innerHTML = contribution.content_html;
if ((contribution.audio && contribution.audio.length == 1) || contribution.original) {
let audio = new Audio(
`https://hub.xpub.nl/soupboat/SI18/03/${contribution.folder}/${
contribution.original || contribution.audio[0]
}`
);
audio.addEventListener("canplaythrough", (event) => {
/* the audio is now playable; play it if permissions allow */
section.querySelector(".filename").innerHTML = `${~~(audio.duration / 60)}:${~~(
audio.duration % 60
)}`;
let player = section.querySelector(".player");
player.innerHTML = "Play";
player.addEventListener("click", () => {
if (audio.paused) {
audio.play();
player.innerHTML = "Pause";
} else {
audio.pause();
player.innerHTML = "Play";
}
});
});
} else section.querySelector(".audio").remove();
return section;
}
function atlasLink() {
let atlas = document.getElementById("atlas-map");
let groups = atlas.querySelectorAll("[data-link]");
for (const group of groups) {
let link = document.createElementNS("http://www.w3.org/2000/svg", "a");
link.setAttribute("href", "#" + group.dataset.link);
wrap(group, link);
}
}
var wrap = function (toWrap, wrapper) {
wrapper = wrapper || document.createElement("div");
toWrap.parentNode.appendChild(wrapper);
return wrapper.appendChild(toWrap);
};
function createIndexSection(contribution) {
if (contribution.audio) {
let table = document.createElement("table");
let title = document.createElement("div");
title.classList.add("index-title");
title.innerHTML = contribution.title;
let tracks = contribution.audio;
tracks.forEach((track) => {
let row = document.createElement("tr");
let sym = document.createElement("td");
let filename = document.createElement("td");
sym.setAttribute("class", "symbol");
sym.innerHTML = symbols[track];
sym.style.fontFamily = "Arial, sans-serif";
filename.setAttribute("class", "filename");
filename.innerHTML = track;
row.appendChild(sym);
row.appendChild(filename);
table.appendChild(row);
});
trackList.appendChild(title);
trackList.appendChild(table);
}
}
var path = document.querySelector("#live-path");
console.log(path.getTotalLength());
const symbols = {
"stream_01.mp3": "i1",
"stream_02.mp3": "i2",
"stream_03.mp3": "i3",
"stream_04.mp3": "i4",
"stream_05.mp3": "i5",
"stream_06.mp3": "i6",
"stream_07.mp3": "i7",
"stream_08.mp3": "i8",
"stream_09.mp3": "i9",
"stream_10.mp3": "i10",
"u.wav": "!!",
"t.wav": "-\\-",
"s.wav": "\\-",
"r.wav": "||",
"q.wav": "!—",
"p.wav": "!-",
"o.wav": ">/",
"n.wav": "\\",
"m.wav": "~~",
"l.wav": "/",
"k.wav": "ú",
"j.wav": ",-",
"i.wav": "|",
"h.wav": "^^",
"g.wav": "^",
"f.wav": "%",
"e.wav": "!",
"d.wav": "-",
"c.wav": ",,",
"b.wav": "_",
"a.wav": ".",
"sample8_Entracte3.mp3": "-c",
"sample6_Entracte3.mp3": "—C",
"sample3_Entracte3.mp3": "~c",
"sample7_Entracte3.mp3": "c-",
"sample4_Entracte3.mp3": "c—",
"sample2_Entracte3.mp3": "C~",
"sample5_Entracte3.mp3": "c/",
"sample1_Entracte3.mp3": "c\\",
"sample6_Entracte_2_2.mp3": "/b",
"sample5_Entracte_2_2.mp3": "\\b",
"sample4_Entracte_2_2.mp3": "=B",
"sample3_Entracte_2_2.mp3": ">B",
"sample2_Entracte_2_2.mp3": "b>",
"sample1_Entracte_2_2.mp3": "<b",
"sample5_Entracte_1.mp3": "a",
"sample4_Entracte_1.mp3": "]A",
"sample3_Entracte_1.mp3": ")a",
"sample2_Entracte_1.mp3": "A~",
"sample1_Entracte_1.mp3": "a|",
"voice-hierarchy-week03.mp3": "iii",
"Laughing-Opera-Soprano-Violet-Duet.wav": "ii",
};