From 0a7254b7fa0871a9e7db24c10ac55d5f76ad0e61 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Mon, 5 Dec 2022 12:04:39 +0900 Subject: feat: !WIP frontend for nrk radio --- src/wwwroot/radio.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) (limited to 'src/wwwroot/radio.js') diff --git a/src/wwwroot/radio.js b/src/wwwroot/radio.js index d0e3fdd..3edc99e 100644 --- a/src/wwwroot/radio.js +++ b/src/wwwroot/radio.js @@ -1,4 +1,60 @@ const app = document.getElementById("app"); -const appData = document.getElementById("app-data"); +let series; -app.innerText = "Laster..."; +async function get_series() { + app.innerHTML = "Laster..."; + const response = await fetch("/radio-series"); + if (response.ok) { + series = await response.json(); + return series; + } + app.innerHTML = "Kunne ikke hente data, prøv igjen snart!"; + return null; +} + +function search(query) { + if (!query) { + document.querySelectorAll("#series li").forEach(el => el.style.display = "list-item"); + return; + } + console.log("Searching for " + query); + const results = fuzzysort.go(query, series, {key: "name"}); + console.log("Found " + results.length + " results"); + const ids = results.map(x => x.obj.id); + for (const seriesEl of document.querySelectorAll("#series li")) { + seriesEl.style.display = ids.includes(parseInt(seriesEl.dataset.id)) ? "list-item" : "none"; + } +} + +function build_frontpage(series) { + const listEl = document.createElement("ul"); + listEl.id = "series"; + listEl.style.listStyle = "none"; + listEl.style.maxHeight = "70vh"; + listEl.style.overflow = "auto"; + listEl.style.padding = "0"; + for (const serie of series) { + const listItemEl = document.createElement("li"); + const listItemDetailsEl = document.createElement("details"); + const listItemDetailsSummaryEl = document.createElement("summary"); + listItemEl.dataset.id = serie.id; + listItemDetailsSummaryEl.innerText = serie.name; + listItemDetailsEl.appendChild(listItemDetailsSummaryEl); + listItemEl.appendChild(listItemDetailsEl); + listEl.appendChild(listItemEl); + } + + const searchInputEl = document.createElement("input"); + searchInputEl.id = "series-searcher"; + searchInputEl.placeholder = "Søk her"; + searchInputEl.oninput = (event) => { + search(event.target.value); + }; + app.innerHTML = ""; + app.appendChild(searchInputEl); + app.appendChild(listEl); +} + +document.addEventListener("DOMContentLoaded", () => { + get_series().then(build_frontpage); +}) \ No newline at end of file -- cgit v1.3