Add social features and harden beta release

This commit is contained in:
kai
2026-08-26 17:08:10 +02:00
parent 3181b2fb35
commit a9741b6859
28 changed files with 1804 additions and 184 deletions
+56 -7
View File
@@ -10,17 +10,39 @@
<header>
<div class="header-inner">
<a href="/" class="logo">🎸 Pingu <span>Concerts</span></a>
{% include '_user_menu.html' %}
</div>
</header>
<main>
<div class="page-title">
<h1>✏️ Konzert bearbeiten</h1>
<p>Änderungen werden direkt beim Konzert gespeichert.</p>
<h1>✏️ Veranstaltung bearbeiten</h1>
<p>Änderungen werden direkt bei der Veranstaltung gespeichert.</p>
</div>
<section class="empty">
<form method="post" action="/concerts/{{ concert.id }}/edit" enctype="multipart/form-data">
{% if can_edit_details %}
<p>
<label>Kategorie<br>
<select name="event_type" id="event-type" required>
<option value="concert" {% if concert.event_type == 'concert' %}selected{% endif %}>Konzert</option>
<option value="festival" {% if concert.event_type == 'festival' %}selected{% endif %}>Festival</option>
<option value="other" {% if concert.event_type == 'other' %}selected{% endif %}>Sonstiges</option>
</select>
</label>
</p>
<p id="parent-event-field" {% if concert.event_type != 'other' %}hidden{% endif %}>
<label>Gehört zu<br>
<select name="parent_event_id" id="parent-event-id">
<option value="">Keine Verknüpfung eigenständige Karte</option>
{% for event in linkable_events %}
<option value="{{ event.id }}" {% if concert.parent_event and concert.parent_event.id == event.id %}selected{% endif %}>{{ event.event_type_label }} · {{ event.title }} · {{ event.date }}</option>
{% endfor %}
</select>
</label>
</p>
{% endif %}
<p>
<label>Künstler / Band<br>
<label>Titel / Künstler / Band<br>
<input type="text" name="artist" value="{{ concert.artist }}" {% if not can_edit_title %}disabled{% endif %} required>
</label>
</p>
@@ -53,9 +75,9 @@
<input type="datetime-local" name="start_datetime" value="{{ concert.start_local }}" required>
</label>
</p>
<p>
<p id="festival-end-field" {% if concert.event_type != 'festival' %}hidden{% endif %}>
<label>Ende<br>
<input type="datetime-local" name="end_datetime" value="{{ concert.end_local }}">
<input type="datetime-local" name="end_datetime" id="festival-end-datetime" value="{{ concert.end_local }}" {% if concert.event_type == 'festival' %}required{% endif %}>
</label>
</p>
<p>
@@ -73,14 +95,20 @@
<input type="number" name="ticket_price" value="{{ concert.ticket_price or '' }}" step="0.01" min="0">
</label>
</p>
<p>
<label>Flyer extern verlinken <small>(bevorzugt)</small><br>
<input type="url" name="flyer_url" value="{{ concert.flyer_url or '' }}" placeholder="https://veranstalter.example/flyer.jpg">
</label>
<small>Bitte möglichst die offizielle Quelle verwenden. Ein externer Link wird gegenüber einem Upload bevorzugt und unter dem Bild genannt. Feld leeren, um wieder den Upload zu verwenden.</small>
</p>
<p>
<label>Neuen Flyer hochladen<br>
<input type="file" name="flyer" accept="image/jpeg,image/png,image/webp">
</label>
<small>Ohne neue Datei bleibt der bisherige Flyer erhalten.</small>
</p>
{% if concert.flyer_path %}
<p><img src="{{ concert.flyer_path }}" alt="Aktueller Flyer" style="max-width: 300px; max-height: 400px; border-radius: 10px;"></p>
{% if concert.flyer_url or concert.flyer_path %}
<p><img src="{{ concert.flyer_url or concert.flyer_path }}" alt="Aktueller Flyer" referrerpolicy="no-referrer" style="max-width: 300px; max-height: 400px; border-radius: 10px;"></p>
{% endif %}
{% endif %}
<div>
@@ -90,5 +118,26 @@
</form>
</section>
</main>
{% if can_edit_details %}
<script>
const eventType = document.getElementById("event-type");
const parentEventField = document.getElementById("parent-event-field");
const parentEventId = document.getElementById("parent-event-id");
const festivalEndField = document.getElementById("festival-end-field");
const festivalEndDatetime = document.getElementById("festival-end-datetime");
function updateEventFields() {
const isFestival = eventType.value === "festival";
const isOther = eventType.value === "other";
festivalEndField.hidden = !isFestival;
festivalEndDatetime.required = isFestival;
parentEventField.hidden = !isOther;
if (!isFestival) festivalEndDatetime.value = "";
if (!isOther) parentEventId.value = "";
}
eventType.addEventListener("change", updateEventFields);
</script>
{% endif %}
</body>
</html>