added custom dropdown components for Genre and Herausgeber form fields
This commit is contained in:
parent
05a8e69b9e
commit
c5fd83b407
@ -46,8 +46,8 @@
|
|||||||
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
initDataTable("#text-table");
|
initDataTable("text-table");
|
||||||
initCreateButton("Text hinzufügen", "{{ url_for('text.read', id=0) }}", "#text-table");
|
initCreateButton("text-table", "Text hinzufügen", "{{ url_for('text.read', id=0) }}");
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock script %}
|
{% endblock script %}
|
||||||
|
|||||||
@ -9,10 +9,8 @@ Text bearbeiten
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock title %}
|
{% endblock title %}
|
||||||
|
|
||||||
{% block script %}
|
{% block head %}
|
||||||
<script>
|
{% endblock head %}
|
||||||
</script>
|
|
||||||
{% endblock script %}
|
|
||||||
|
|
||||||
{% block heading %}
|
{% block heading %}
|
||||||
{% if create_mode %}
|
{% if create_mode %}
|
||||||
@ -44,6 +42,25 @@ Text bearbeiten
|
|||||||
{% for r in reihen %}<option value="{{ r.ID }}"{% if r.ID == text['Reihe'] %} selected{% endif %}>{{ r.Titel }}</option>{% endfor %}
|
{% for r in reihen %}<option value="{{ r.ID }}"{% if r.ID == text['Reihe'] %} selected{% endif %}>{{ r.Titel }}</option>{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
|
<label>
|
||||||
|
Genre(s)
|
||||||
|
<details id="form_Genre_dropdown" class="dropdown">
|
||||||
|
<summary id="form_Genre_summary" data-default="kein Genre ausgewählt"></summary>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<input type="search" id="form_Genre_search" aria-label="search" placeholder="Genres filtern …" value="" />
|
||||||
|
</li>
|
||||||
|
{% for g in genres %}
|
||||||
|
<li>
|
||||||
|
<label>
|
||||||
|
<input id="form_Genre_{{ g.ID }}" name="form_Genre" data-content="{{ g.Genre }}" type="checkbox" value="{{ g.ID }}" {% if g.ID in text["Genres"] %} checked {% endif %}/>
|
||||||
|
{{ g.Genre }}
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label>
|
<label>
|
||||||
@ -62,16 +79,6 @@ Text bearbeiten
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
|
||||||
<section>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Genre(s)</legend>
|
|
||||||
{% for g in genres %}
|
|
||||||
<input id="form_Genres_{{ g.ID }}" name="form_Genres" type="checkbox" value="{{ g.ID }}" {% if g.ID in text["Genres"] %} checked {% endif %}/>
|
|
||||||
<label for="form_Genres_{{ g.ID }}">{{ g.Genre }}</label>
|
|
||||||
{% endfor %}
|
|
||||||
</fieldset>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<footer class="grid">
|
<footer class="grid">
|
||||||
<button id="form_submit" type="submit" formmethod="post" formaction="{% if create_mode %}{{ url_for('text.create') }}{% else %}{{ url_for('text.update', id=text['ID']) }}{% endif %}">
|
<button id="form_submit" type="submit" formmethod="post" formaction="{% if create_mode %}{{ url_for('text.create') }}{% else %}{{ url_for('text.update', id=text['ID']) }}{% endif %}">
|
||||||
@ -81,4 +88,11 @@ Text bearbeiten
|
|||||||
<a role="button" class="contrast" href="{{ url_for('text.all') }}">Abbrechen (nicht speichern)</a>
|
<a role="button" class="contrast" href="{{ url_for('text.all') }}">Abbrechen (nicht speichern)</a>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
||||||
|
<script>
|
||||||
|
window.onload = () => initDropdownSelect(document.getElementById("form_Genre_dropdown"));
|
||||||
|
</script>
|
||||||
|
{% endblock script %}
|
||||||
|
|||||||
@ -45,13 +45,9 @@
|
|||||||
<script src="{{ url_for('static', filename='datatables.js') }}"></script>
|
<script src="{{ url_for('static', filename='datatables.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
window.onload = function () {
|
window.onload = () => {
|
||||||
initDataTable("#werk-table");
|
initDataTable("werk-table");
|
||||||
initCreateButton({
|
initCreateButton("werk-table", "Werk hinzufügen", "{{ url_for('werk.read', id=0) }}");
|
||||||
title: "Werk hinzufügen",
|
|
||||||
href: "{{ url_for('werk.read', id=0) }}",
|
|
||||||
table_id: "#werk-table"
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock script %}
|
{% endblock script %}
|
||||||
|
|||||||
@ -53,16 +53,6 @@ Werk bearbeiten
|
|||||||
Reihennummer
|
Reihennummer
|
||||||
<input id="form_Reihennummer" name="form_Reihennummer" aria-label="Reihennummer" placeholder="keine Reihennummer" value="{{ werk['Reihennummer'] }}" />
|
<input id="form_Reihennummer" name="form_Reihennummer" aria-label="Reihennummer" placeholder="keine Reihennummer" value="{{ werk['Reihennummer'] }}" />
|
||||||
</label>
|
</label>
|
||||||
<label>
|
|
||||||
Erscheinungsdatum (TT-MM-JJJJ, MM-JJJJ, JJJJ oder leer)
|
|
||||||
<div class="grid">
|
|
||||||
<input type="number" min="1" max="31" id="form_Erscheinungstag" name="form_Erscheinungstag" aria-label="Erscheinungstag" placeholder="Tag" value="{{ werk['Erscheinungsdatum'][8:] }}" />
|
|
||||||
<input type="number" min="1" max="12" id="form_Erscheinungsmonat" name="form_Erscheinungsmonat" aria-label="Erscheinungsmonat" placeholder="Monat" value="{{ werk['Erscheinungsdatum'][5:7] }}" />
|
|
||||||
<input type="number" min="1980" max="2100" id="form_Erscheinungsjahr" name="form_Erscheinungsjahr" aria-label="Erscheinungsjahr" placeholder="Jahr" value="{{ werk['Erscheinungsdatum'][:4] }}" />
|
|
||||||
</div>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label>
|
<label>
|
||||||
Verlag
|
Verlag
|
||||||
<select id="form_Verlag" name="form_Verlag" aria-label="Verlag">
|
<select id="form_Verlag" name="form_Verlag" aria-label="Verlag">
|
||||||
@ -74,6 +64,16 @@ Werk bearbeiten
|
|||||||
Preis
|
Preis
|
||||||
<input id="form_Preis" name="form_Preis" aria-label="Preis" placeholder="kein Preis" value="{{ werk['Preis'] }}" />
|
<input id="form_Preis" name="form_Preis" aria-label="Preis" placeholder="kein Preis" value="{{ werk['Preis'] }}" />
|
||||||
</label>
|
</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
Erscheinungsdatum (TT-MM-JJJJ, MM-JJJJ, JJJJ oder leer)
|
||||||
|
<div class="grid">
|
||||||
|
<input type="number" min="1" max="31" id="form_Erscheinungstag" name="form_Erscheinungstag" aria-label="Erscheinungstag" placeholder="Tag" value="{{ werk['Erscheinungsdatum'][8:] }}" />
|
||||||
|
<input type="number" min="1" max="12" id="form_Erscheinungsmonat" name="form_Erscheinungsmonat" aria-label="Erscheinungsmonat" placeholder="Monat" value="{{ werk['Erscheinungsdatum'][5:7] }}" />
|
||||||
|
<input type="number" min="1980" max="2100" id="form_Erscheinungsjahr" name="form_Erscheinungsjahr" aria-label="Erscheinungsjahr" placeholder="Jahr" value="{{ werk['Erscheinungsdatum'][:4] }}" />
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
<label>
|
<label>
|
||||||
ISBN-13
|
ISBN-13
|
||||||
<input id="form_ISBN_13" name="form_ISBN_13" aria-label="ISBN-13" placeholder="keine ISBN-13" value="{{ werk['ISBN_13'] }}" />
|
<input id="form_ISBN_13" name="form_ISBN_13" aria-label="ISBN-13" placeholder="keine ISBN-13" value="{{ werk['ISBN_13'] }}" />
|
||||||
@ -86,45 +86,47 @@ Werk bearbeiten
|
|||||||
ISSN
|
ISSN
|
||||||
<input id="form_ISSN" name="form_ISSN" aria-label="ISSN" placeholder="keine ISSN" value="{{ werk['ISSN'] }}" />
|
<input id="form_ISSN" name="form_ISSN" aria-label="ISSN" placeholder="keine ISSN" value="{{ werk['ISSN'] }}" />
|
||||||
</label>
|
</label>
|
||||||
|
<label>
|
||||||
|
Genre(s)
|
||||||
|
<details id="form_Genre_dropdown" class="dropdown">
|
||||||
|
<summary id="form_Genre_summary" data-default="kein Genre ausgewählt"></summary>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<input type="search" id="form_Genre_search" aria-label="search" placeholder="Genres filtern …" value="" />
|
||||||
|
</li>
|
||||||
|
{% for g in genres %}
|
||||||
|
<li>
|
||||||
|
<label>
|
||||||
|
<input id="form_Genre_{{ g.ID }}" name="form_Genre" data-content="{{ g.Genre }}" type="checkbox" value="{{ g.ID }}" {% if g.ID in werk["Genres"] %} checked {% endif %}/>
|
||||||
|
{{ g.Genre }}
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Herausgeber:in(nen)
|
||||||
|
<details id="form_Herausgeber_dropdown" class="dropdown">
|
||||||
|
<summary id="form_Herausgeber_summary" data-default="kein(e) Herausgeber:in(nen) ausgewählt"></summary>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<input type="search" id="form_Herausgeber_search" aria-label="search" placeholder="Herausgeber:innen filtern …" value="" />
|
||||||
|
</li>
|
||||||
|
{% for h in hrsg %}
|
||||||
|
<li>
|
||||||
|
<label>
|
||||||
|
<input id="form_Herausgeber_{{ h.ID }}" name="form_Herausgeber" data-content="{{ h.Name }}" type="checkbox" value="{{ h.ID }}" {% if h.ID in werk["Herausgeber"] %} checked {% endif %}/>
|
||||||
|
{{ h.Name }}
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</details>
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<hr />
|
<hr />
|
||||||
<section>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Herausgeber:in(nen)</legend>
|
|
||||||
<div class="grid">
|
|
||||||
{% for column in hrsg | slice(4) %}
|
|
||||||
<div>
|
|
||||||
{% for h in column %}
|
|
||||||
<label>
|
|
||||||
<input id="form_Herausgeber_{{ h.ID }}" name="form_Herausgeber" type="checkbox" value="{{ h.ID }}" {% if h.ID in werk["Herausgeber"] %} checked {% endif %}/>
|
|
||||||
{{ h.Name }}
|
|
||||||
</label>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</section>
|
|
||||||
<hr />
|
|
||||||
<section>
|
|
||||||
<fieldset>
|
|
||||||
<legend>Genre(s)</legend>
|
|
||||||
<div class="grid">
|
|
||||||
{% for column in genres | slice(4) %}
|
|
||||||
<div>
|
|
||||||
{% for g in column %}
|
|
||||||
<label>
|
|
||||||
<input id="form_Genres_{{ g.ID }}" name="form_Genres" type="checkbox" value="{{ g.ID }}" {% if g.ID in werk["Genres"] %} checked {% endif %}/>
|
|
||||||
{{ g.Genre }}
|
|
||||||
</label>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</section>
|
|
||||||
<hr />
|
|
||||||
<section class="grid">
|
<section class="grid">
|
||||||
<label>
|
<label>
|
||||||
Klappentext
|
Klappentext
|
||||||
@ -155,29 +157,11 @@ Werk bearbeiten
|
|||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
{% block script %}
|
{% block script %}
|
||||||
|
<script src="{{ url_for('static', filename='the_works.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
function validate_date() {
|
window.onload = () => {
|
||||||
let t = document.getElementById("form_Erscheinungstag");
|
initDropdownSelect(document.getElementById("form_Genre_dropdown"));
|
||||||
let m = document.getElementById("form_Erscheinungsmonat");
|
initDropdownSelect(document.getElementById("form_Herausgeber_dropdown"));
|
||||||
let j = document.getElementById("form_Erscheinungsjahr");
|
|
||||||
t.setCustomValidity("");
|
|
||||||
t.setAttribute("aria-invalid", "false");
|
|
||||||
m.setCustomValidity("");
|
|
||||||
m.setAttribute("aria-invalid", "false");
|
|
||||||
console.log("This is function validate_date(): tag/monat/jahr is " + t.value + "/" + m.value + "/" + j.value); //DEBUG
|
|
||||||
if ( t.value != "" ) {
|
|
||||||
if ( j.value == "" || m.value == "" ) {
|
|
||||||
t.setCustomValidity("wenn der Tag angegeben ist, müssen Monat und Jahr ebenfalls angegeben sein");
|
|
||||||
t.setAttribute("aria-invalid", "true");
|
|
||||||
t.reportValidity();
|
|
||||||
}
|
|
||||||
} else if ( m.value != "" ) {
|
|
||||||
if ( j.value == "") {
|
|
||||||
m.setCustomValidity("wenn der Monat angegeben ist, muss das Jahr ebenfalls angegeben sein");
|
|
||||||
m.setAttribute("aria-invalid", "true");
|
|
||||||
m.reportValidity();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock script %}
|
{% endblock script %}
|
||||||
|
|||||||
@ -75,7 +75,7 @@ def update(id):
|
|||||||
text.Sprache = request.form["form_Sprache"]
|
text.Sprache = request.form["form_Sprache"]
|
||||||
|
|
||||||
# update genre list by removing genres not in form selection and adding selected ones not currently in list
|
# update genre list by removing genres not in form selection and adding selected ones not currently in list
|
||||||
form_set = set(map(lambda g: int(g), request.form.getlist("form_Genres")))
|
form_set = set(map(lambda g: int(g), request.form.getlist("form_Genre")))
|
||||||
for g in set(text.genres) - form_set:
|
for g in set(text.genres) - form_set:
|
||||||
text.genres.remove(g)
|
text.genres.remove(g)
|
||||||
for g in form_set - set(text.genres):
|
for g in form_set - set(text.genres):
|
||||||
|
|||||||
@ -74,7 +74,7 @@ def create():
|
|||||||
Klappentext = request.form["form_Klappentext"] or None,
|
Klappentext = request.form["form_Klappentext"] or None,
|
||||||
Anmerkungen = request.form["form_Anmerkungen"] or None
|
Anmerkungen = request.form["form_Anmerkungen"] or None
|
||||||
)
|
)
|
||||||
for g in request.form.getlist("form_Genres"):
|
for g in request.form.getlist("form_Genre"):
|
||||||
werk.genres.append(g)
|
werk.genres.append(g)
|
||||||
for h in request.form.getlist("form_Herausgeber"):
|
for h in request.form.getlist("form_Herausgeber"):
|
||||||
werk.herausgeber.append(h)
|
werk.herausgeber.append(h)
|
||||||
@ -105,7 +105,7 @@ def update(id):
|
|||||||
werk.Anmerkungen = request.form["form_Anmerkungen"] or None
|
werk.Anmerkungen = request.form["form_Anmerkungen"] or None
|
||||||
|
|
||||||
# update genre list by removing genres not in form selection and adding selected ones not currently in list
|
# update genre list by removing genres not in form selection and adding selected ones not currently in list
|
||||||
form_set = set(map(lambda g: int(g), request.form.getlist("form_Genres")))
|
form_set = set(map(lambda g: int(g), request.form.getlist("form_Genre")))
|
||||||
for g in set(werk.genres) - form_set:
|
for g in set(werk.genres) - form_set:
|
||||||
werk.genres.remove(g)
|
werk.genres.remove(g)
|
||||||
for g in form_set - set(werk.genres):
|
for g in form_set - set(werk.genres):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user