diff --git a/app.py b/app.py index defbf85..fafa5ea 100644 --- a/app.py +++ b/app.py @@ -1,175 +1,231 @@ -from flask import Flask, render_template, request, redirect -from glob import glob -import subprocess -import requests import json import os +import subprocess +from glob import glob + +import requests +from flask import Flask, redirect, render_template, request + + +def wikiapi(id, field): + if os.path.isdir("data"): + pass + else: + os.mkdir("data") + name = f"data/{id}_{field}.json" + try: + with open(name, "r") as f: + data = json.load(f) + except OSError: + r = requests.get( + "https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/" + + id + + "?_fields=" + + field, + headers={ + "user-agent": "esc/0.0(mikka@kleinrot.net)", + "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU", + }, + ) + data = r.json() + with open(name, "x") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + return data[field] -def wikiapi(id,field): - if os.path.isdir("data"): - pass - else: - os.mkdir("data") - name = f"data/{id}_{field}.json" - try: - with open(name, "r") as f: - data = json.load(f) - except OSError: - r = requests.get("https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/"+id+"?_fields="+field, headers={"user-agent":'esc/0.0(mikka@kleinrot.net)','Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU'}) - data = r.json() - with open(name, "x") as f: - json.dump(data, f,indent=2,ensure_ascii=False) - return data[field] def wikisuche(text): - mitp1344 = [] - ohnep1344 = [] - r = requests.get("https://www.wikidata.org/w/rest.php/wikibase/v1/search/items?q="+text+"&language=en", headers={"user-agent":'esc/0.0(mikka@kleinrot.net)','Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU'}) - for result in r.json()["results"]: - if getescedition(result["id"]): - mitp1344.append(result) - else: - ohnep1344.append(result) - return mitp1344 + ohnep1344 + mitpartsin = [] + ohnepartsin = [] + r = requests.get( + "https://www.wikidata.org/w/rest.php/wikibase/v1/search/items?q=" + + text + + "&language=en", + headers={ + "user-agent": "esc/0.0(mikka@kleinrot.net)", + "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU", + }, + ) + for result in r.json()["results"]: + if getescedition(result["id"]): + mitpartsin.append(result) + else: + ohnepartsin.append(result) + return mitpartsin + ohnepartsin + def getescedition(songId): - statements = wikiapi(songId,"statements") - if "P1344" in statements: - for statement in statements["P1344"]: - id = statement["value"]["content"] - escdata = wikiapi(id,"statements") - if escdata["P31"][0]["value"]["content"] == "Q110288240": - return id,statement - + statements = wikiapi(songId, "statements") + if "partsin" in statements: + for statement in statements["partsin"]: + id = statement["value"]["content"] + escdata = wikiapi(id, "statements") + if escdata["P31"][0]["value"]["content"] == "Q110288240": + return id, statement + def datei(id): - file = glob("static/"+id+".*") + file = glob("static/" + id + ".*") + + if file == []: + subprocess.run( + ["yt-dlp", f"http://youtu.be/{id}", "-x", "-o", id], cwd="static" + ) + file = glob("static/" + id + ".*") + if file != []: + audio = file[0].replace("static/", "") + else: + audio = None + print(audio) + return audio - if file == []: - subprocess.run(["yt-dlp",f"http://youtu.be/{id}","-x","-o",id],cwd="static") - file = glob("static/"+id+".*") - if file != []: - audio = file[0].replace("static/", "") - else: - audio = None - print(audio) - return audio def kartenGeneriren(song): - id = song["wikiid"] - print(id) - statements = wikiapi(id,"statements") - labels = wikiapi(id,"labels") - song["titel"] = statements.get("P1476",[{"value": {"content":{"text":labels["en"]}}}])[0]["value"]["content"]["text"] - song["laenge"] = int(statements.get("P2047",[{"value": {"content":{"amount":"0"}}}])[0]["value"]["content"]["amount"]) - escedition = getescedition(id) - if escedition: - (escedition,statement)=escedition - song["jahrgang"] = wikiapi(escedition,"labels")["en"] - qualifiers = statement["qualifiers"] - for qualifier in qualifiers: - if qualifier["property"]["id"] == "P1352": - song["plazirung"] = str(int(qualifier["value"]["content"]["amount"]))+"." - song["interprete"] = " x ".join(set(wikiapi(statement["value"]["content"],"labels")["en"] for statement in statements.get("P175",[]))) - if "ytid" not in song and "P1651" in statements: - song["ytid"] = statements["P1651"][0]["value"]["content"] - if "ytid" in song: - song["datei"] = datei(song["ytid"]) - song["img"] = f"http://img.youtube.com/vi/{ song["ytid"] }/sddefault.jpg" - if "P6218" in statements: - song["text"] = f"//genius.com/{statements["P6218"][0]["value"]["content"]}" - if "P18" in statements: - song["img"] = f"https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/{statements["P18"][0]["value"]["content"]}&width=300" - if "img" not in song: - song["img"] = "https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Eurovision_Song_Contest_heart_(2014–2025).svg&width=300" + id = song["wikiid"] + print(id) + statements = wikiapi(id, "statements") + labels = wikiapi(id, "labels") + song["titel"] = statements.get( + "P1476", [{"value": {"content": {"text": labels["en"]}}}] + )[0]["value"]["content"]["text"] + song["laenge"] = int( + statements.get("P2047", [{"value": {"content": {"amount": "0"}}}])[0]["value"][ + "content" + ]["amount"] + ) + escedition = getescedition(id) + if escedition: + (escedition, statement) = escedition + song["jahrgang"] = wikiapi(escedition, "labels")["en"] + qualifiers = statement["qualifiers"] + for qualifier in qualifiers: + if qualifier["property"]["id"] == "P1352": + song["plazirung"] = ( + str(int(qualifier["value"]["content"]["amount"])) + "." + ) + song["interprete"] = " x ".join( + set( + wikiapi(statement["value"]["content"], "labels")["en"] + for statement in statements.get("P175", []) + ) + ) + if "land" not in song and "P495" in statements: + song["land"] = wikiapi(statements["P495"][0]["value"]["content"], "labels")[ + "de" + ] + if "ytid" not in song and "P1651" in statements: + song["ytid"] = statements["P1651"][0]["value"]["content"] + if "ytid" in song: + song["datei"] = datei(song["ytid"]) + song["img"] = f"http://img.youtube.com/vi/{song['ytid']}/sddefault.jpg" + if "P6218" in statements: + song["text"] = f"//genius.com/{statements['P6218'][0]['value']['content']}" + if "P18" in statements: + song["img"] = ( + f"https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/{statements['P18'][0]['value']['content']}&width=300" + ) + if "img" not in song: + song["img"] = ( + "https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Eurovision_Song_Contest_heart_(2014–2025).svg&width=300" + ) app = Flask(__name__) -@app.template_filter('zeit') + +@app.template_filter("zeit") def zeit(sekunden): - minuten = sekunden // 60 - rest = sekunden - minuten * 60 - return f"{minuten}:{rest:02}" + minuten = sekunden // 60 + rest = sekunden - minuten * 60 + return f"{minuten}:{rest:02}" @app.route("/") def hello_world(): - liste = request.args.get("liste") - if liste is None: - return redirect("/playlists") - with open(liste+".json","r") as f: - songs = json.load(f) - for song in songs: - kartenGeneriren(song) - gesamtLaenge = 0 - for song in songs: - gesamtLaenge += song["laenge"] - return render_template('index.html', karten=songs,gesamtLaenge=gesamtLaenge,liste=liste ) + liste = request.args.get("liste") + if liste is None: + return redirect("/playlists") + with open(liste + ".json", "r") as f: + songs = json.load(f) + for song in songs: + kartenGeneriren(song) + gesamtLaenge = 0 + for song in songs: + gesamtLaenge += song["laenge"] + return render_template( + "index.html", karten=songs, gesamtLaenge=gesamtLaenge, liste=liste + ) @app.route("/playlists") def playlists(): - listen = glob("*.json") - listen = (liste.replace(".json","") for liste in listen) - return render_template('playlists.html',lists=listen) + listen = glob("*.json") + listen = (liste.replace(".json", "") for liste in listen) + return render_template("playlists.html", lists=listen) + @app.route("/neueliste") def neueliste(): - name = request.args.get("name") - if name is not None: - with open(name +".json", "x") as f: - json.dump([],f) - return redirect("/?liste="+name) - print(liste) - return render_template('neueliste.html',name=name) + name = request.args.get("name") + if name is not None: + with open(name + ".json", "x") as f: + json.dump([], f) + return redirect("/?liste=" + name) + return render_template("neueliste.html", name=name) + @app.route("/suche") def suche(): - such = request.args.get("suche") - liste = request.args.get("liste") - if such is not None: - ergebnisse = wikisuche(such) - else: - ergebnisse = [] - return render_template('suche.html', ergebnisse=ergebnisse,anfrage=such,liste=liste) + such = request.args.get("suche") + liste = request.args.get("liste") + if such is not None: + ergebnisse = wikisuche(such) + else: + ergebnisse = [] + return render_template( + "suche.html", ergebnisse=ergebnisse, anfrage=such, liste=liste + ) -@app.route("/suche",methods=["POST"]) + +@app.route("/suche", methods=["POST"]) def suche_finden(): - liste = request.args.get("liste") - with open(liste +".json","r") as f: - songs = json.load(f) - song = {"wikiid":request.form.get("id")} - kartenGeneriren(song) - songs.append(song) - with open(liste+".json","w") as f: - json.dump(songs,f,indent=2,ensure_ascii=False) - return redirect("/suche?liste="+liste,303) + liste = request.args.get("liste") + with open(liste + ".json", "r") as f: + songs = json.load(f) + song = {"wikiid": request.form.get("id")} + kartenGeneriren(song) + songs.append(song) + with open(liste + ".json", "w") as f: + json.dump(songs, f, indent=2, ensure_ascii=False) + return redirect("/suche?liste=" + liste, 303) + @app.route("/remove") def admin(): - liste = request.args.get("liste") - if liste is None: - return redirect("/playlists") - with open(liste+".json","r") as f: - songs = json.load(f) - for song in songs: - kartenGeneriren(song) - gesamtLaenge = 0 - for song in songs: - gesamtLaenge += song["laenge"] - return render_template('index.html', karten=songs,gesamtLaenge=gesamtLaenge,liste=liste,admin=True) + liste = request.args.get("liste") + if liste is None: + return redirect("/playlists") + with open(liste + ".json", "r") as f: + songs = json.load(f) + for song in songs: + kartenGeneriren(song) + gesamtLaenge = 0 + for song in songs: + gesamtLaenge += song["laenge"] + return render_template( + "index.html", karten=songs, gesamtLaenge=gesamtLaenge, liste=liste, admin=True + ) -@app.route("/remove",methods=["POST"]) + +@app.route("/remove", methods=["POST"]) def loeschen(): - liste = request.args.get("liste") - song = int(request.form.get("index")) - with open(liste+".json","r") as f: - print(liste+".json") - songs = json.load(f) - print(songs) - print(songs) - del songs[song] - with open(liste+".json","w") as f: - json.dump(songs,f,indent=2,ensure_ascii=False) - return redirect("/remove?liste="+liste,303) + liste = request.args.get("liste") + song = int(request.form.get("index")) + with open(liste + ".json", "r") as f: + print(liste + ".json") + songs = json.load(f) + print(songs) + print(songs) + del songs[song] + with open(liste + ".json", "w") as f: + json.dump(songs, f, indent=2, ensure_ascii=False) + return redirect("/remove?liste=" + liste, 303) diff --git a/static/Eurovision_Song_Contest_Wikidata_heart_(2014–2025).png b/static/Eurovision_Song_Contest_Wikidata_heart_(2014–2025).png new file mode 100644 index 0000000..7496f99 Binary files /dev/null and b/static/Eurovision_Song_Contest_Wikidata_heart_(2014–2025).png differ diff --git a/static/Eurovision_Song_Contest_heart_Wikidata_(2014–2025).svg b/static/Eurovision_Song_Contest_heart_Wikidata_(2014–2025).svg new file mode 100644 index 0000000..262654a --- /dev/null +++ b/static/Eurovision_Song_Contest_heart_Wikidata_(2014–2025).svg @@ -0,0 +1,48 @@ + + diff --git a/static/script.js b/static/script.js index e97cb97..0141b0b 100644 --- a/static/script.js +++ b/static/script.js @@ -1,102 +1,98 @@ -const audios = document.querySelectorAll("audio") -const articles = document.querySelectorAll("article") -const kartenContainer = document.getElementById("flex-container") -outindex = 0 -playing = false -playcolor = "#00ff3c" -loop = true +const audios = document.querySelectorAll("audio"); +const articles = document.querySelectorAll("article"); +const kartenContainer = document.getElementById("flex-container"); +outindex = 0; +playing = false; +playcolor = "#00ff3c"; +loop = true; -function onplay(id){ - //What is id - id = parseInt(id) - if(id>0){ - articles[id-1].style.filter = "grayscale("+(id+1)*20+"%)" - articles[id-1].style.boxShadow = "0 0 0px 0px "+playcolor +function onplay(id) { + id = parseInt(id); + if (id > 0) { + articles[id - 1].style.filter = "grayscale(" + (id + 1) * 20 + "%)"; + articles[id - 1].style.boxShadow = "0 0 0px 0px " + playcolor; } - if(articles[id].offsetWidth * id == window.innerWidth/2){ - console.log(articles[id].offsetWidth) - kartenContainer.scrollWidth += articles[id].offsetWidth + if (articles[id].offsetWidth * id == window.innerWidth / 2) { + console.log(articles[id].offsetWidth); + kartenContainer.scrollWidth += articles[id].offsetWidth; } - articles[id].style.filter = "grayscale(0%)" - articles[id].style.margin = "8px" - articles[id].style.boxShadow = "0 0 6px 1px "+playcolor + articles[id].style.filter = "grayscale(0%)"; + articles[id].style.margin = "8px"; + articles[id].style.boxShadow = "0 0 6px 1px " + playcolor; } -function nächste(id){ - audios[id].pause() - id = parseInt(id) + 1 - audios[id].play() - onplay(id) +function nächste(id) { + audios[id].pause(); + id = parseInt(id) + 1; + audios[id].play(); + onplay(id); } -function vorherige(id){ - audios[id].pause() - audios[id-1].play() - onplay(id-1) +function vorherige(id) { + audios[id].pause(); + audios[id - 1].play(); + onplay(id - 1); } -function looptrue(){ - if(loop){ - loop = false - document.querySelector("#loop").innerHTML = "Kein Loop" - document.querySelector("#loop").style.beckground - } - else{ - loop = true - document.querySelector("#loop").innerHTML = "Loop" +function looptrue() { + if (loop) { + loop = false; + document.querySelector("#loop").innerHTML = "Kein Loop"; + document.querySelector("#loop").style.beckground; + } else { + loop = true; + document.querySelector("#loop").innerHTML = "Loop"; } } -function abspielendiese(id){ - if(playing){ +function abspielendiese(id) { + if (playing) { //ON PAUSE - audios[id].pause() - playing = false - articles[id].style.margin = "0px" - articles[id].style.boxShadow = "0 0 0px 0px "+playcolor - } - else{ + audios[id].pause(); + playing = false; + articles[id].style.margin = "0px"; + articles[id].style.boxShadow = "0 0 0px 0px " + playcolor; + } else { //ON PLAY - audios[id].play() - playing = true - onplay(id) + audios[id].play(); + playing = true; + onplay(id); } } -function abspielen(){ - if(playing){ +function abspielen() { + if (playing) { //ON PAUSE - audios[outindex].pause() - playing = false - articles[outindex].style.margin = "0px" - articles[outindex].style.boxShadow = "0 0 0px 0px "+playcolor - document.querySelector("#play").innerHTML = "Abspielen" - } - else{ + audios[outindex].pause(); + playing = false; + articles[outindex].style.margin = "0px"; + articles[outindex].style.boxShadow = "0 0 0px 0px " + playcolor; + document.querySelector("#play").innerHTML = "Abspielen"; + } else { //ON PLAY - audios[outindex].play() - playing = true - document.querySelector("#play").innerHTML = "Pausieren" - onplay(outindex) + audios[outindex].play(); + playing = true; + document.querySelector("#play").innerHTML = "Pausieren"; + onplay(outindex); } } -for (const [index,audio] of audios.entries()){ - audio.addEventListener("ended", (event) => { - if (index != audios.length -1){ - outindex = index +1 - audios[outindex].play() - onplay(index+1) - } - else{ - //Last song ON END - articles[index].style.filter = "grayscale(80%)" - articles[index].style.boxShadow = "0 0 0px 0px "+playcolor - articles[index].style.margin = "8px" - articles[index].style.boxShadow = "0 0 6px 1px "+playcolor - if(loop){ - audios[0].play() +for (const [index, audio] of audios.entries()) { + audio.addEventListener("ended", (event) => { + if (index != audios.length - 1) { + outindex = index + 1; + audios[outindex].play(); + onplay(index + 1); + } else { + //Last song ON END + articles[index].style.filter = "grayscale(80%)"; + articles[index].style.boxShadow = "0 0 0px 0px " + playcolor; + articles[index].style.margin = "8px"; + articles[index].style.boxShadow = "0 0 6px 1px " + playcolor; + if (loop) { + audios[0].play(); + } } - } - }) + }); } +//Audio visualising diff --git a/templates/index.html b/templates/index.html index 39d5eae..c8561b0 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,21 +1,23 @@ +

ESC Playlist

-

2026

-Du willst ein weiteres Lied in der Playlist? -

Die Playlist {{liste}} ist insgesamt {{ gesamtLaenge | zeit }} lang und enthält {{ karten|length }} Lieder

-

-
- {% for karte in karten %} - {% set karte_loop = loop %} - {% include "karte.html" %} - {% endfor %} +Du willst ein weiteres Lied in der Playlist? +

+ Die Playlist {{liste}} ist insgesamt {{ gesamtLaenge | zeit }} lang und + enthält {{ karten|length }} Lieder +

+

+ +

+
+ {% for karte in karten %} {% set karte_loop = loop %} {% include + "karte.html" %} {% endfor %}
- \ No newline at end of file + diff --git a/templates/karte.html b/templates/karte.html index b491d08..0f38853 100644 --- a/templates/karte.html +++ b/templates/karte.html @@ -1,24 +1,42 @@
- + {% if karte.ytid %} -

- +

+ +

+ {% endif %} +

{{ karte.titel}}

-

Übersetzter Titel:{{ karte.uetitel}}

-

Interpreten:{{ karte.interprete}}

- {% if karte.jahrgang %} -

Jahrgang: {{ karte.jahrgang }}

- {% endif %} - {% if karte.plazirung%} -

Plazirung: {{ karte.plazirung }}

- {% endif %} -

Länge: {{karte.laenge|zeit}}

-

Q-id: {{karte.wikiid}}

- {% if karte.text %} - Original Text + + {% if karte.jahrgang %} +

Jahrgang: {{ karte.jahrgang }}

+ {% endif %} {% if karte.plazirung%} +

Plazirung: {{ karte.plazirung }}

+ {% endif %} {% if karte.land %} +

Antretent für: {{karte.land}}

{% endif %} + +

Interpret(en): {{ karte.interprete}}

+ +

Länge: {{karte.laenge|zeit}}

+

+ {% if karte.text %} + Original Text + {% endif %} + Q-id:{{karte.wikiid}} +

{% if admin %} -
+
+ +
{% endif %}
diff --git a/templates/neueliste.html b/templates/neueliste.html index 43dcb4a..3911769 100644 --- a/templates/neueliste.html +++ b/templates/neueliste.html @@ -1,8 +1,19 @@ -
\ No newline at end of file + +
diff --git a/templates/playlists.html b/templates/playlists.html index 76d06c1..b83645d 100644 --- a/templates/playlists.html +++ b/templates/playlists.html @@ -11,8 +11,15 @@ text-align: center; font-size: smaller; } + #logo{ + object-fit: scale-down; + } + #logocontaner{ + margin: 3px; + } + {% for list in lists %} {{list}} {% endfor %} -Lust auf was neues? \ No newline at end of file +Lust auf was neues? diff --git a/templates/suche.html b/templates/suche.html index abab342..38cf154 100644 --- a/templates/suche.html +++ b/templates/suche.html @@ -4,7 +4,14 @@ text-align: center; color: black; } + #logo{ + object-fit: scale-down; + } + #logocontaner{ + margin: 3px; + } + {% if liste == empty %}

Du musst etwas in die Playlist Screiben

{% endif %} @@ -19,4 +26,4 @@

Leider gibt es den Eintrag {{anfrage}} nicht!

{%endif%} -Doch nicht? \ No newline at end of file +Doch nicht?