feat: use proper German umlauts in UI and score reasons
This commit is contained in:
parent
2f5a97aa62
commit
a0b1c76d14
3 changed files with 15 additions and 15 deletions
|
|
@ -196,7 +196,7 @@ def collect_local_event_factors(lat: float, lon: float, night_end: dt.datetime)
|
||||||
|
|
||||||
event_type = row["event_type"]
|
event_type = row["event_type"]
|
||||||
label = {
|
label = {
|
||||||
"waste": "Muellabfuhr am Morgen",
|
"waste": "Müllabfuhr am Morgen",
|
||||||
"market": "Marktbetrieb am Morgen",
|
"market": "Marktbetrieb am Morgen",
|
||||||
"event": "Lokale Veranstaltung",
|
"event": "Lokale Veranstaltung",
|
||||||
"construction": "Baustelle",
|
"construction": "Baustelle",
|
||||||
|
|
@ -239,7 +239,7 @@ def collect_community_factors(spot_id: str, at_time: dt.datetime) -> list[dict]:
|
||||||
|
|
||||||
buckets = {
|
buckets = {
|
||||||
"knock": {"base": -25.0, "half_life": 10.0, "window": 30, "label": "Klopfen gemeldet"},
|
"knock": {"base": -25.0, "half_life": 10.0, "window": 30, "label": "Klopfen gemeldet"},
|
||||||
"noise": {"base": -15.0, "half_life": 7.0, "window": 14, "label": "Laerm gemeldet"},
|
"noise": {"base": -15.0, "half_life": 7.0, "window": 14, "label": "Lärm gemeldet"},
|
||||||
"calm": {"base": 10.0, "half_life": 7.0, "window": 14, "label": "Ruhig gemeldet"},
|
"calm": {"base": 10.0, "half_life": 7.0, "window": 14, "label": "Ruhig gemeldet"},
|
||||||
"police": {"base": -18.0, "half_life": 10.0, "window": 30, "label": "Polizei-Einsatz gemeldet"},
|
"police": {"base": -18.0, "half_life": 10.0, "window": 30, "label": "Polizei-Einsatz gemeldet"},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
src/app.js
16
src/app.js
|
|
@ -71,7 +71,7 @@ function initialize() {
|
||||||
legalOutputEl.textContent = "MVP-Hinweis: Impressum im Produktionsbetrieb verpflichtend mit Anbieterkennzeichnung.";
|
legalOutputEl.textContent = "MVP-Hinweis: Impressum im Produktionsbetrieb verpflichtend mit Anbieterkennzeichnung.";
|
||||||
});
|
});
|
||||||
|
|
||||||
// Pilotwert fuer Mettmann, falls noch keine Eingabe.
|
// Pilotwert für Mettmann, falls noch keine Eingabe.
|
||||||
if (!latEl.value && !lonEl.value) {
|
if (!latEl.value && !lonEl.value) {
|
||||||
latEl.value = "51.2500";
|
latEl.value = "51.2500";
|
||||||
lonEl.value = "6.9730";
|
lonEl.value = "6.9730";
|
||||||
|
|
@ -136,12 +136,12 @@ async function checkApiHealth() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderQueueStatus() {
|
function renderQueueStatus() {
|
||||||
queueStatusEl.textContent = `Queue: ${signalQueue.length} ausstehend`;
|
queueStatusEl.textContent = `Warteschlange: ${signalQueue.length} ausstehend`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fillLocationFromDevice() {
|
async function fillLocationFromDevice() {
|
||||||
if (!navigator.geolocation) {
|
if (!navigator.geolocation) {
|
||||||
alert("Geolocation wird auf diesem Geraet nicht unterstuetzt.");
|
alert("Geolocation wird auf diesem Gerät nicht unterstützt.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -177,7 +177,7 @@ async function loadScore() {
|
||||||
const lat = Number(latEl.value);
|
const lat = Number(latEl.value);
|
||||||
const lon = Number(lonEl.value);
|
const lon = Number(lonEl.value);
|
||||||
if (!Number.isFinite(lat) || !Number.isFinite(lon)) {
|
if (!Number.isFinite(lat) || !Number.isFinite(lon)) {
|
||||||
alert("Bitte gueltige Koordinaten eingeben.");
|
alert("Bitte gültige Koordinaten eingeben.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -205,7 +205,7 @@ async function loadScore() {
|
||||||
currentSpot = cached.payload;
|
currentSpot = cached.payload;
|
||||||
renderScore(cached.payload, true, cached.fetchedAt);
|
renderScore(cached.payload, true, cached.fetchedAt);
|
||||||
} else {
|
} else {
|
||||||
signalStatusEl.textContent = "Kein Live-Score und kein Cache fuer diesen Spot vorhanden.";
|
signalStatusEl.textContent = "Kein Live-Score und kein Cache für diesen Spot vorhanden.";
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
loadScoreEl.disabled = false;
|
loadScoreEl.disabled = false;
|
||||||
|
|
@ -217,7 +217,7 @@ function renderScore(data, fromCache, cacheTime = "") {
|
||||||
|
|
||||||
ampelEl.classList.remove("green", "yellow", "red");
|
ampelEl.classList.remove("green", "yellow", "red");
|
||||||
ampelEl.classList.add(data.ampel);
|
ampelEl.classList.add(data.ampel);
|
||||||
ampelEl.textContent = data.ampel === "green" ? "Gruen" : data.ampel === "yellow" ? "Gelb" : "Rot";
|
ampelEl.textContent = data.ampel === "green" ? "Grün" : data.ampel === "yellow" ? "Gelb" : "Rot";
|
||||||
|
|
||||||
nightWindowEl.textContent = `Bezug: ${toLocal(data.night_window.start)} bis ${toLocal(data.night_window.end)}`;
|
nightWindowEl.textContent = `Bezug: ${toLocal(data.night_window.start)} bis ${toLocal(data.night_window.end)}`;
|
||||||
|
|
||||||
|
|
@ -281,7 +281,7 @@ async function sendSignal(signalType) {
|
||||||
}
|
}
|
||||||
signalQueue.push(signal);
|
signalQueue.push(signal);
|
||||||
saveJSON(SIGNAL_QUEUE_KEY, signalQueue);
|
saveJSON(SIGNAL_QUEUE_KEY, signalQueue);
|
||||||
signalStatusEl.textContent = `Offline/Fehler: Signal '${signalType}' gequeued.`;
|
signalStatusEl.textContent = `Offline/Fehler: Signal '${signalType}' zwischengespeichert.`;
|
||||||
renderQueueStatus();
|
renderQueueStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -323,7 +323,7 @@ async function flushSignalQueue() {
|
||||||
renderQueueStatus();
|
renderQueueStatus();
|
||||||
|
|
||||||
if (!keep.length && pending.length) {
|
if (!keep.length && pending.length) {
|
||||||
signalStatusEl.textContent = "Alle gequeueten Signale wurden synchronisiert.";
|
signalStatusEl.textContent = "Alle zwischengespeicherten Signale wurden synchronisiert.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
<header class="top">
|
<header class="top">
|
||||||
<h1>StaySense</h1>
|
<h1>StaySense</h1>
|
||||||
<p>Kreis Mettmann Pilot: ruhige Nacht in weniger als 10 Sekunden bewerten.</p>
|
<p>Kreis Mettmann Pilot: ruhige Nacht in weniger als 10 Sekunden bewerten.</p>
|
||||||
<small id="network-status">Netzwerkstatus wird geprueft ...</small>
|
<small id="network-status">Netzwerkstatus wird geprüft ...</small>
|
||||||
<small id="data-status">Datenstand: -</small>
|
<small id="data-status">Datenstand: -</small>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
<div class="button-row">
|
<div class="button-row">
|
||||||
<button id="use-location" class="btn secondary">Aktuellen Standort nutzen</button>
|
<button id="use-location" class="btn secondary">Aktuellen Standort nutzen</button>
|
||||||
<button id="load-score" class="btn">Score fuer heute Nacht (22-06)</button>
|
<button id="load-score" class="btn">Score für heute Nacht (22-06)</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="hint">Night Hours im MVP fix: 22:00 bis 06:00.</p>
|
<p class="hint">Night Hours im MVP fix: 22:00 bis 06:00.</p>
|
||||||
|
|
@ -55,12 +55,12 @@
|
||||||
<h3>Community Signal</h3>
|
<h3>Community Signal</h3>
|
||||||
<div class="signal-grid">
|
<div class="signal-grid">
|
||||||
<button class="btn signal" data-signal="calm">Ruhige Nacht</button>
|
<button class="btn signal" data-signal="calm">Ruhige Nacht</button>
|
||||||
<button class="btn signal" data-signal="noise">Laerm</button>
|
<button class="btn signal" data-signal="noise">Lärm</button>
|
||||||
<button class="btn signal" data-signal="knock">Klopfen</button>
|
<button class="btn signal" data-signal="knock">Klopfen</button>
|
||||||
<button class="btn signal" data-signal="police">Polizei</button>
|
<button class="btn signal" data-signal="police">Polizei</button>
|
||||||
</div>
|
</div>
|
||||||
<small id="signal-status">Noch kein Signal gesendet.</small>
|
<small id="signal-status">Noch kein Signal gesendet.</small>
|
||||||
<small id="queue-status">Queue: 0 ausstehend</small>
|
<small id="queue-status">Warteschlange: 0 ausstehend</small>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel settings-panel">
|
<section class="panel settings-panel">
|
||||||
|
|
@ -69,7 +69,7 @@
|
||||||
<input id="signals-enabled" type="checkbox" checked />
|
<input id="signals-enabled" type="checkbox" checked />
|
||||||
Community Signals aktivieren
|
Community Signals aktivieren
|
||||||
</label>
|
</label>
|
||||||
<p class="small">Offline werden Signale gequeued und spaeter gesendet.</p>
|
<p class="small">Offline werden Signale zwischengespeichert und später gesendet.</p>
|
||||||
|
|
||||||
<h3>Rechtliches</h3>
|
<h3>Rechtliches</h3>
|
||||||
<ul class="legal">
|
<ul class="legal">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue