- Freitext wird jetzt direkt als venue_name übertragen und somit auch ohne Suchtreffer gespeichert.
- Die Suche ist international und kombiniert lokale Ergebnisse mit Nominatim. - Externe IDs werden korrekt als nominatim:<Typ>:<ID> gespeichert und dedupliziert. - Straße, PLZ, Stadt und Land können beim Anlegen manuell ergänzt werden. - Im Adminbereich können Orte korrigiert, bestätigt, mit Aliasen versehen und zusammengeführt werden.
This commit is contained in:
@@ -138,8 +138,10 @@
|
||||
<input
|
||||
type="text"
|
||||
id="venue-search"
|
||||
name="venue_name"
|
||||
autocomplete="off"
|
||||
placeholder="z. B. Turbinenhalle"
|
||||
required
|
||||
>
|
||||
|
||||
<div
|
||||
@@ -153,6 +155,16 @@
|
||||
class="selected-venue"
|
||||
></div>
|
||||
|
||||
<div class="venue-manual-details">
|
||||
<small>Optional für eine bessere Zuordnung:</small>
|
||||
<div class="venue-address-grid">
|
||||
<input type="text" name="street" id="venue-street" placeholder="Straße">
|
||||
<input type="text" name="postal_code" id="venue-postal-code" placeholder="PLZ">
|
||||
<input type="text" name="city" id="venue-city" placeholder="Ort / Stadt">
|
||||
<input type="text" name="country" id="venue-country" placeholder="Land">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
@@ -160,36 +172,6 @@
|
||||
id="venue-id"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="venue_name"
|
||||
id="venue-name"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="city"
|
||||
id="venue-city"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="street"
|
||||
id="venue-street"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="postal_code"
|
||||
id="venue-postal-code"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="country"
|
||||
id="venue-country"
|
||||
>
|
||||
|
||||
<input
|
||||
type="hidden"
|
||||
name="latitude"
|
||||
@@ -396,7 +378,6 @@ function clearVenueSelection() {
|
||||
|
||||
[
|
||||
"venue-id",
|
||||
"venue-name",
|
||||
"venue-city",
|
||||
"venue-street",
|
||||
"venue-postal-code",
|
||||
@@ -433,7 +414,6 @@ venueSearch.addEventListener(
|
||||
|
||||
clearVenueSelection();
|
||||
|
||||
|
||||
if (query.length < 2) {
|
||||
|
||||
return;
|
||||
@@ -482,7 +462,7 @@ async function searchVenues(
|
||||
|
||||
|
||||
if (!response.ok) {
|
||||
|
||||
appendManualVenueResult(query, true);
|
||||
return;
|
||||
|
||||
}
|
||||
@@ -496,28 +476,6 @@ async function searchVenues(
|
||||
"";
|
||||
|
||||
|
||||
if (!venues.length) {
|
||||
|
||||
const empty =
|
||||
document.createElement(
|
||||
"div"
|
||||
);
|
||||
|
||||
empty.className =
|
||||
"venue-result";
|
||||
|
||||
empty.textContent =
|
||||
"Keine Veranstaltungsorte gefunden";
|
||||
|
||||
venueResults.appendChild(
|
||||
empty
|
||||
);
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
venues.forEach(
|
||||
venue => {
|
||||
|
||||
@@ -583,6 +541,8 @@ async function searchVenues(
|
||||
}
|
||||
);
|
||||
|
||||
appendManualVenueResult(query, venues.length === 0);
|
||||
|
||||
|
||||
} catch (error) {
|
||||
|
||||
@@ -595,11 +555,38 @@ async function searchVenues(
|
||||
error
|
||||
);
|
||||
|
||||
venueResults.innerHTML = "";
|
||||
appendManualVenueResult(query, true);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function appendManualVenueResult(query, isOnlyResult) {
|
||||
const result = document.createElement("button");
|
||||
result.type = "button";
|
||||
result.className = "venue-result venue-result-manual";
|
||||
result.innerHTML = `
|
||||
<strong>✏️ „${escapeHtml(query)}“ verwenden</strong>
|
||||
<span>${isOnlyResult ? "Keine passenden Treffer – Eingabe trotzdem speichern" : "Als eigenen Veranstaltungsort anlegen"}</span>
|
||||
`;
|
||||
result.addEventListener("click", () => {
|
||||
selectVenue({
|
||||
id: "",
|
||||
name: query,
|
||||
street: document.getElementById("venue-street").value,
|
||||
postal_code: document.getElementById("venue-postal-code").value,
|
||||
city: document.getElementById("venue-city").value,
|
||||
country: document.getElementById("venue-country").value,
|
||||
latitude: "",
|
||||
longitude: ""
|
||||
});
|
||||
});
|
||||
venueResults.appendChild(result);
|
||||
}
|
||||
|
||||
|
||||
/* ============================================================
|
||||
VENUE SELECT
|
||||
============================================================ */
|
||||
@@ -614,12 +601,6 @@ function selectVenue(
|
||||
venue.id ?? "";
|
||||
|
||||
|
||||
document.getElementById(
|
||||
"venue-name"
|
||||
).value =
|
||||
venue.name ?? "";
|
||||
|
||||
|
||||
document.getElementById(
|
||||
"venue-city"
|
||||
).value =
|
||||
|
||||
Reference in New Issue
Block a user