Fix: Breeder-Profil Zurück-Button → Wurfbörse; Welpen-Chip klickbar (SW by-v897)
This commit is contained in:
parent
8b5805a8ca
commit
822af64704
6 changed files with 26 additions and 14 deletions
|
|
@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request):
|
||||||
raise _HE(404, "Nicht gefunden.")
|
raise _HE(404, "Nicht gefunden.")
|
||||||
return _media_response(filepath)
|
return _media_response(filepath)
|
||||||
|
|
||||||
APP_VER = "896" # muss mit APP_VER in app.js übereinstimmen
|
APP_VER = "897" # muss mit APP_VER in app.js übereinstimmen
|
||||||
|
|
||||||
@app.get("/.well-known/assetlinks.json")
|
@app.get("/.well-known/assetlinks.json")
|
||||||
async def assetlinks():
|
async def assetlinks():
|
||||||
|
|
|
||||||
|
|
@ -591,10 +591,10 @@
|
||||||
<div id="modal-container"></div>
|
<div id="modal-container"></div>
|
||||||
|
|
||||||
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
||||||
<script src="/js/api.js?v=896"></script>
|
<script src="/js/api.js?v=897"></script>
|
||||||
<script src="/js/ui.js?v=896"></script>
|
<script src="/js/ui.js?v=897"></script>
|
||||||
<script src="/js/app.js?v=896"></script>
|
<script src="/js/app.js?v=897"></script>
|
||||||
<script src="/js/worlds.js?v=896"></script>
|
<script src="/js/worlds.js?v=897"></script>
|
||||||
|
|
||||||
<!-- Feature-Seiten werden lazy geladen -->
|
<!-- Feature-Seiten werden lazy geladen -->
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '896'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '897'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
|
||||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,25 @@ window.Page_breeder = (() => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
container.innerHTML = '<div style="padding:var(--space-6);text-align:center">Lade…</div>';
|
container.innerHTML = `
|
||||||
|
<div style="padding:var(--space-3) var(--space-4) 0">
|
||||||
|
<button class="btn btn-ghost btn-sm" id="breeder-back-btn">
|
||||||
|
${UI.icon('arrow-left')} Zurück zur Wurfbörse
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div id="breeder-profile-body" style="padding:0 var(--space-4) var(--space-6);text-align:center">
|
||||||
|
${UI.skeleton(3)}
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
document.getElementById('breeder-back-btn')
|
||||||
|
?.addEventListener('click', () => App.navigate('wurfboerse'));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const p = await API.breeder.profile(zwingername);
|
const p = await API.breeder.profile(zwingername);
|
||||||
_render(p);
|
_render(p);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
container.innerHTML = `<div style="padding:var(--space-6)">${_esc(e.message || 'Züchter nicht gefunden.')}</div>`;
|
document.getElementById('breeder-profile-body').innerHTML =
|
||||||
|
`<p style="padding:var(--space-6);color:var(--c-text-secondary)">${_esc(e.message || 'Züchter nicht gefunden.')}</p>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -57,8 +69,9 @@ window.Page_breeder = (() => {
|
||||||
</div>`
|
</div>`
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
_container.innerHTML = `
|
const body = document.getElementById('breeder-profile-body') || _container;
|
||||||
<div style="padding:var(--space-4)">
|
body.innerHTML = `
|
||||||
|
<div style="padding:var(--space-4) 0">
|
||||||
|
|
||||||
<!-- Header-Card -->
|
<!-- Header-Card -->
|
||||||
<div class="card" style="margin-bottom:var(--space-3)">
|
<div class="card" style="margin-bottom:var(--space-3)">
|
||||||
|
|
|
||||||
|
|
@ -146,13 +146,13 @@ window.Page_litters = (() => {
|
||||||
{ icon: 'list-bullets', label: 'Alle Würfe', val: total, filter: null },
|
{ icon: 'list-bullets', label: 'Alle Würfe', val: total, filter: null },
|
||||||
{ icon: 'baby', label: 'Aktiv', val: aktiv, filter: ['verfuegbar','geboren'], color: 'var(--c-success)' },
|
{ icon: 'baby', label: 'Aktiv', val: aktiv, filter: ['verfuegbar','geboren'], color: 'var(--c-success)' },
|
||||||
{ icon: 'calendar-dots',label: 'Geplant', val: geplant, filter: ['geplant'] },
|
{ icon: 'calendar-dots',label: 'Geplant', val: geplant, filter: ['geplant'] },
|
||||||
{ icon: 'dog', label: 'Welpen ges.', val: welpen, filter: null, noClick: true },
|
{ icon: 'dog', label: 'Welpen ges.', val: welpen, filter: null },
|
||||||
{ icon: 'tag', label: 'Verfügbar', val: verfuegb,filter: ['verfuegbar'], color: verfuegb > 0 ? 'var(--c-primary)' : undefined },
|
{ icon: 'tag', label: 'Verfügbar', val: verfuegb,filter: ['verfuegbar'], color: verfuegb > 0 ? 'var(--c-primary)' : undefined },
|
||||||
];
|
];
|
||||||
bar.style.display = 'flex';
|
bar.style.display = 'flex';
|
||||||
bar.innerHTML = statItems.map((s, i) => {
|
bar.innerHTML = statItems.map((s, i) => {
|
||||||
const isActive = JSON.stringify(_filterStatus) === JSON.stringify(s.filter);
|
const isActive = JSON.stringify(_filterStatus) === JSON.stringify(s.filter);
|
||||||
const clickable = !s.noClick;
|
const clickable = true;
|
||||||
return `
|
return `
|
||||||
<div data-stat-idx="${i}"
|
<div data-stat-idx="${i}"
|
||||||
style="background:${isActive ? 'var(--c-primary)' : 'var(--c-bg-secondary)'};
|
style="background:${isActive ? 'var(--c-primary)' : 'var(--c-bg-secondary)'};
|
||||||
|
|
@ -171,7 +171,6 @@ window.Page_litters = (() => {
|
||||||
|
|
||||||
bar.querySelectorAll('[data-stat-idx]').forEach(chip => {
|
bar.querySelectorAll('[data-stat-idx]').forEach(chip => {
|
||||||
const s = statItems[parseInt(chip.dataset.statIdx)];
|
const s = statItems[parseInt(chip.dataset.statIdx)];
|
||||||
if (s.noClick) return;
|
|
||||||
chip.addEventListener('click', () => {
|
chip.addEventListener('click', () => {
|
||||||
_filterStatus = JSON.stringify(_filterStatus) === JSON.stringify(s.filter) ? null : s.filter;
|
_filterStatus = JSON.stringify(_filterStatus) === JSON.stringify(s.filter) ? null : s.filter;
|
||||||
_renderStats();
|
_renderStats();
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v896';
|
const CACHE_VERSION = 'by-v897';
|
||||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||||
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue