Add API documentation and underground station importer

- Introduced a new HTML documentation page for the oradio API, including a JavaScript file to handle dynamic content and API requests.
- Added a CSS file for styling the documentation page.
- Implemented an underground station importer script that fetches data from Radio-Browser and writes it to a JSON file.
- Created a stats module to compute and manage vote and play statistics for radio stations.
- Added a polyfill for modulepreload to ensure compatibility with older browsers.
This commit is contained in:
Marco Mooren
2026-05-11 02:06:48 +02:00
parent e0a60f7b64
commit 00246389bc
52 changed files with 6280 additions and 2475 deletions

View File

@@ -1,17 +1,92 @@
[
{ "id": "starter", "label": "Starter pack", "icon": "★", "order": 0 },
{ "id": "dutch-public", "label": "Nederlandse publieke","icon": "🇳🇱", "order": 1 },
{ "id": "dutch-commercial", "label": "Nederlandse commercieel","icon": "🇳🇱", "order": 2 },
{ "id": "bbc", "label": "BBC family", "icon": "🇬🇧", "order": 3 },
{ "id": "fip", "label": "FIP family", "icon": "🇫🇷", "order": 4 },
{ "id": "underground", "label": "Underground & curated","icon": "🌐", "order": 5 },
{ "id": "ambient", "label": "Ambient & lo-fi", "icon": "🌫", "order": 6 },
{ "id": "electronic", "label": "Electronic", "icon": "⚡", "order": 7 },
{ "id": "jazz", "label": "Jazz & blues", "icon": "🎷", "order": 8 },
{ "id": "classical", "label": "Classical", "icon": "🎻", "order": 9 },
{ "id": "rock", "label": "Rock & indie", "icon": "🎸", "order": 10 },
{ "id": "reggae", "label": "Reggae & dub", "icon": "🌴", "order": 11 },
{ "id": "world", "label": "World & regional", "icon": "🌍", "order": 12 },
{ "id": "soma", "label": "SomaFM channels", "icon": "📻", "order": 13 },
{ "id": "nts", "label": "NTS infinite mixtapes","icon": "♾", "order": 14 }
]
{
"id": "starter",
"label": "Starter pack",
"icon": "",
"order": 0
},
{
"id": "dutch-public",
"label": "Nederlandse publieke",
"icon": "🇳🇱",
"order": 1
},
{
"id": "dutch-commercial",
"label": "Nederlandse commercieel",
"icon": "🇳🇱",
"order": 2
},
{
"id": "bbc",
"label": "BBC family",
"icon": "🇬🇧",
"order": 3
},
{
"id": "fip",
"label": "FIP family",
"icon": "🇫🇷",
"order": 4
},
{
"id": "underground",
"label": "Underground & curated",
"icon": "🌐",
"order": 5
},
{
"id": "ambient",
"label": "Ambient & lo-fi",
"icon": "🌫",
"order": 6
},
{
"id": "electronic",
"label": "Electronic",
"icon": "⚡",
"order": 7
},
{
"id": "jazz",
"label": "Jazz & blues",
"icon": "🎷",
"order": 8
},
{
"id": "classical",
"label": "Classical",
"icon": "🎻",
"order": 9
},
{
"id": "rock",
"label": "Rock & indie",
"icon": "🎸",
"order": 10
},
{
"id": "reggae",
"label": "Reggae & dub",
"icon": "🌴",
"order": 11
},
{
"id": "world",
"label": "World & regional",
"icon": "🌍",
"order": 12
},
{
"id": "soma",
"label": "SomaFM channels",
"icon": "📻",
"order": 13
},
{
"id": "nts",
"label": "NTS infinite mixtapes",
"icon": "♾",
"order": 14
}
]