59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
function makeFilm(meta) {
|
|
const file = document.getElementById("film-template").cloneNode(true)
|
|
file.querySelector(".title").innerText = meta.title
|
|
return file
|
|
}
|
|
|
|
function makeSeries(meta) {
|
|
const file = document.getElementById("series-template").cloneNode(true)
|
|
file.querySelector(".title").innerText = meta.title
|
|
file.querySelector(".episodes .num").innerText = meta.episodes
|
|
return file
|
|
}
|
|
|
|
function makeFile(meta) {
|
|
let file
|
|
switch (meta.type) {
|
|
case "film":
|
|
file = makeFilm(meta)
|
|
break
|
|
case "series":
|
|
file = makeSeries(meta)
|
|
break
|
|
default:
|
|
throw new Error(`Invalid file type '${meta.type}'`)
|
|
}
|
|
|
|
file.title = meta.filename
|
|
file.id = null
|
|
file.classList.remove("template")
|
|
const url = new URL("/edit/", window.location.origin)
|
|
url.searchParams.set("f", meta.filename)
|
|
file.href = url.href
|
|
return file
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {object[]} files
|
|
*/
|
|
function addFiles(files) {
|
|
const list = document.getElementById("files")
|
|
list.innerHTML = ""
|
|
const filenames = files.map(meta => meta.filename)
|
|
// Copy array because sort changes it in place
|
|
Array.from(filenames).sort().forEach(filename => {
|
|
const i = filenames.indexOf(filename)
|
|
const meta = files[i]
|
|
const file = makeFile(meta)
|
|
list.appendChild(file)
|
|
})
|
|
}
|
|
|
|
window.addEventListener("load", () => {
|
|
fetch("/api/files").then(res => {
|
|
return res.json()
|
|
}).then(files => {
|
|
addFiles(files)
|
|
})
|
|
}) |