Fix: Übung-des-Tages-Chip scrollt direkt zur Übung (kategorie + name als init-params) — SW by-v482, APP_VER 459
This commit is contained in:
parent
d9a0be489b
commit
117d32fcc3
4 changed files with 26 additions and 5 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '458'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '459'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
|
|
||||||
const App = (() => {
|
const App = (() => {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -433,10 +433,18 @@ window.Page_uebungen = (() => {
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
// INIT
|
// INIT
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
async function init(container, appState) {
|
async function init(container, appState, params = {}) {
|
||||||
_container = container;
|
_container = container;
|
||||||
_appState = appState;
|
_appState = appState;
|
||||||
|
if (params.kategorie) _activeTab = params.kategorie;
|
||||||
_render();
|
_render();
|
||||||
|
if (params.name) {
|
||||||
|
// Nach Render + Progress-Load zur Übung scrollen
|
||||||
|
setTimeout(() => {
|
||||||
|
const card = _container.querySelector(`[data-exercise-name="${CSS.escape(params.name)}"]`);
|
||||||
|
if (card) card.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
||||||
|
}, 600);
|
||||||
|
}
|
||||||
|
|
||||||
// Progress vom Server laden
|
// Progress vom Server laden
|
||||||
API.training.getProgress().then(rows => {
|
API.training.getProgress().then(rows => {
|
||||||
|
|
@ -937,7 +945,7 @@ window.Page_uebungen = (() => {
|
||||||
const hasBody = u.schritte.length > 0 || u.fehler.length > 0 || u.steigerung;
|
const hasBody = u.schritte.length > 0 || u.fehler.length > 0 || u.steigerung;
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="card" style="padding:0;overflow:hidden">
|
<div class="card" style="padding:0;overflow:hidden" data-exercise-name="${_esc(u.name)}">
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div style="padding:var(--space-4) var(--space-4) var(--space-3)">
|
<div style="padding:var(--space-4) var(--space-4) var(--space-3)">
|
||||||
<!-- Zeile 1: Name + Schwierigkeits-Badge -->
|
<!-- Zeile 1: Name + Schwierigkeits-Badge -->
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,9 @@ window.Page_welcome = (() => {
|
||||||
<span class="wc-chip-val${weight ? '' : ' wc-chip-val--empty'}">${weightVal}</span>
|
<span class="wc-chip-val${weight ? '' : ' wc-chip-val--empty'}">${weightVal}</span>
|
||||||
</div>
|
</div>
|
||||||
${ex ? `
|
${ex ? `
|
||||||
<div class="wc-chip" data-nav="uebungen">
|
<div class="wc-chip" id="wc-chip-exercise"
|
||||||
|
data-exercise-name="${UI.escape(ex.name)}"
|
||||||
|
data-exercise-kat="${UI.escape(ex.kategorie || '')}">
|
||||||
<svg class="ph-icon wc-chip-icon" aria-hidden="true"><use href="/icons/phosphor.svg#target"></use></svg>
|
<svg class="ph-icon wc-chip-icon" aria-hidden="true"><use href="/icons/phosphor.svg#target"></use></svg>
|
||||||
<span class="wc-chip-label">Übung des Tages</span>
|
<span class="wc-chip-label">Übung des Tages</span>
|
||||||
<span class="wc-chip-val">${UI.escape(ex.name)}</span>
|
<span class="wc-chip-val">${UI.escape(ex.name)}</span>
|
||||||
|
|
@ -1138,6 +1140,17 @@ window.Page_welcome = (() => {
|
||||||
btn.addEventListener('click', () => App.navigate(btn.dataset.nav));
|
btn.addEventListener('click', () => App.navigate(btn.dataset.nav));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Exercise-Chip: navigiert direkt zur spezifischen Übung
|
||||||
|
const exChip = _container.querySelector('#wc-chip-exercise');
|
||||||
|
if (exChip) {
|
||||||
|
exChip.addEventListener('click', () => {
|
||||||
|
App.navigate('uebungen', true, {
|
||||||
|
name: exChip.dataset.exerciseName,
|
||||||
|
kategorie: exChip.dataset.exerciseKat,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Hero-Rotation starten (nur Landing)
|
// Hero-Rotation starten (nur Landing)
|
||||||
if (!_appState?.user) _startHeroRotation();
|
if (!_appState?.user) _startHeroRotation();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v481';
|
const CACHE_VERSION = 'by-v482';
|
||||||
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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue