diff --git a/api.py b/api.py index 5ddfb9242a3c6679de013f8c77b95a5bbb304e94..a784e240123334b0716a720a2b891458728a9d26 100644 --- a/api.py +++ b/api.py @@ -108,6 +108,135 @@ def search(): return render_template('index.html', objects = merke, searchBool = True, text = text) +@app.route('/filter', methods=['GET']) +def filter(): + merke = [] + merkeLetter = [] + actorQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in distinct-values(/root/object/descriptiveMetadata/actor/text()) order by $x return $x") + for a,actor in actorQuery.iter(): + anfang = actor[0] + if (len(merkeLetter) == 0): + merkeLetter.append({"name" : anfang}) + elif anfang != merkeLetter[len(merkeLetter)-1]["name"]: + merkeLetter.append({"name" : anfang}) + merke.append({"anfang" : anfang, "name" : actor}) + #Filter für ungefähres Datum: + merkeDate = [] + dateQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in distinct-values(/root/object/descriptiveMetadata/datum/text()) order by $x return $x") + for a,datum in dateQuery.iter(): + merkeDate.append({"datum" : datum}) + #Filter für Ort: + merkeOrt = [] + ortQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in distinct-values(/root/object/descriptiveMetadata/ort/text()) order by $x return $x") + for a,ort in ortQuery.iter(): + merkeOrt.append({"ort" : ort}) + + return render_template('filter.html', letters = merkeLetter, objects = merke, dates = merkeDate, orte = merkeOrt, filter = True, text = '') + +@app.route('/filter/actor/<path:kunstler>', methods=['GET']) +def filterActor(kunstler): + text = kunstler + merke = [] + urlQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/actor[contains(text(),'" + kunstler + "')]]/bildLink/text()) return $x") + actorQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/actor[contains(text(),'" + kunstler + "')]]/descriptiveMetadata/actor/text()) return $x") + titleQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/actor[contains(text(),'" + kunstler + "')]]/descriptiveMetadata/objectIdentificationWrap/title/text()) return $x") + + urlList = [] + actorList = [] + titleList = [] + + for a,url in urlQuery.iter(): + urlList.append(url) + + for b,actor in actorQuery.iter(): + actorList.append(actor) + + for c,title in titleQuery.iter(): + titleList.append(title) + + + for i in range(0, len(urlList)): + url = urlList[i] + actor = actorList[i] + title = titleList[i] + eintrag = {"url" : url, "actor" : actor, "title" : title} + merke.append(eintrag) + + urlQuery.close() + actorQuery.close() + titleQuery.close() + + return render_template('index.html', objects = merke, searchBool = True, text = text) + +@app.route('/filter/ort/<path:ort>', methods=['GET']) +def filterOrt(ort): + text = ort + merke = [] + urlQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/ort[contains(text(),'" + ort + "')]]/bildLink/text()) return $x") + actorQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/ort[contains(text(),'" + ort + "')]]/descriptiveMetadata/actor/text()) return $x") + titleQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/ort[contains(text(),'" + ort + "')]]/descriptiveMetadata/objectIdentificationWrap/title/text()) return $x") + + urlList = [] + actorList = [] + titleList = [] + + for a,url in urlQuery.iter(): + urlList.append(url) + + for b,actor in actorQuery.iter(): + actorList.append(actor) + + for c,title in titleQuery.iter(): + titleList.append(title) + + + for i in range(0, len(urlList)): + url = urlList[i] + actor = actorList[i] + title = titleList[i] + eintrag = {"url" : url, "actor" : actor, "title" : title} + merke.append(eintrag) + + urlQuery.close() + actorQuery.close() + titleQuery.close() + + return render_template('index.html', objects = merke, searchBool = True, text = text) + +@app.route('/filter/datum/<path:datum>', methods=['GET']) +def filterDatum(datum): + text = datum + merke = [] + urlQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/datum[contains(text(),'" + datum + "')]]/bildLink/text()) return $x") + actorQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/datum[contains(text(),'" + datum + "')]]/descriptiveMetadata/actor/text()) return $x") + titleQuery = session.query("declare namespace lido=\"http://www.lido-schema.org\"; for $x in (/root/object[descriptiveMetadata/datum[contains(text(),'" + datum + "')]]/descriptiveMetadata/objectIdentificationWrap/title/text()) return $x") + + urlList = [] + actorList = [] + titleList = [] + + for a,url in urlQuery.iter(): + urlList.append(url) + + for b,actor in actorQuery.iter(): + actorList.append(actor) + + for c,title in titleQuery.iter(): + titleList.append(title) + + + for i in range(0, len(urlList)): + url = urlList[i] + actor = actorList[i] + title = titleList[i] + eintrag = {"url" : url, "actor" : actor, "title" : title} + merke.append(eintrag) + + urlQuery.close() + actorQuery.close() + titleQuery.close() + + return render_template('index.html', objects = merke, searchBool = True, text = text) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True) \ No newline at end of file diff --git a/templates/filter.html b/templates/filter.html new file mode 100644 index 0000000000000000000000000000000000000000..493e258a4704a046688cba4b0b476e11e6c0a38c --- /dev/null +++ b/templates/filter.html @@ -0,0 +1,90 @@ +<!DOCTYPE html> +<link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='stylesheet.css') }}"> +<html> +<head> + <meta charset="utf-8"> + <title>AMK</title> + <h1>AMK</h1> + <h3>Atemberaubende Museums-Holzschnitt Kollektion</h3> +</head> +<body id="Startseite"> + <div class="suchfeld"> + <form action="{{ url_for('search') }}" method="post"> + <input type="text" name="holzschnitte"> + <datalist id="Holzschnitte"> + <option value="Autor"> + </datalist> + <input type="submit" value="suchen"> + </form> + </div> + <div class="menue"> + <ul id="navibereich"> + <li><a href="https://www.wikidata.org/wiki/Wikidata:Main_Page">WikiData</a></li> + <li><a href="{{ url_for('filter') }}">Filter</a></li> + </ul> + </div> + + {% if filter %} + <div class="filter"> + <form name="kunstler"> + <h5> Künstler:</h5> + <ul> + {% for letter in letters %} + <form name="{{ letter.name }}"> + <li onclick="renderListe('{{ letter.name }}')" style="display: inline-block;"> {{ letter.name }} <br> + </li><br> + <form name="kunstlerliste"> + <ul id="{{ letter.name }}" style=" display: none;"> + {% for object in objects %} + {% if object["anfang"] == letter["name"] %} + <li> <a style="display: table-row; color: black;"href="{{ url_for('.filterActor',kunstler=object.name) }}">{{ object.name }}</a> </li> <br> + {% endif %} + {% endfor %} + </ul> + </form> + </form> + {% endfor %} + + </ul> + </form> + + <form name="datumliste"> + <h6> Datum:</h6> + <ul> + {% for date in dates %} + <li> <a style="display: table-row; color: black;"href="{{ url_for('.filterDatum',datum=date.datum) }}">{{ date.datum }}</a> </li> <br> + {% endfor %} + </ul> + </form> + + <form name="ortliste"> + <h7> Ort:</h7> + <ul> + {% for ort in orte %} + <li> <a style="display: table-row; color: black;"href="{{ url_for('.filterOrt',ort=ort.ort) }}">{{ ort.ort }}</a> </li> <br> + {% endfor %} + </ul> + </form> + </div> + + {% else %} + <h6> {{ text }} </h6> + {% endif %} + + + <script> + function renderListe(letter) { + liste = document.getElementById(letter); + console.log(liste.style.display); + if (liste.style.display == 'none') { + liste.style.display = 'initial'; + } else { + liste.style.display = 'none'; + } + } + + </script> + +</html> + + diff --git a/templates/index.html b/templates/index.html index b4cb99a3dc1807f6460210a80b0c8cf80ad16a95..5b7591a22e90f1d0e0f0837f8d21b1a7904a2d59 100644 --- a/templates/index.html +++ b/templates/index.html @@ -20,7 +20,7 @@ <div class="menue"> <ul id="navibereich"> <li><a href="https://www.wikidata.org/wiki/Wikidata:Main_Page">WikiData</a></li> - <li><a href="">Filter</a></li> + <li><a href="{{ url_for('filter') }}">Filter</a></li> </ul> </div>