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
+
.svg)
+
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;
+ }
+
.svg)
{% 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;
+ }
+
.svg)
{% 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?