Fix: Tagesübung-Scroll via _scrollTarget nach exercises-Load statt fixem Timeout — SW by-v494, APP_VER 471
This commit is contained in:
parent
6d9f4a097e
commit
4c3638c17c
3 changed files with 19 additions and 10 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '470'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '471'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
|
|
||||||
const App = (() => {
|
const App = (() => {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ window.Page_uebungen = (() => {
|
||||||
let _badgesData = null; // cached badges from /api/achievements
|
let _badgesData = null; // cached badges from /api/achievements
|
||||||
let _exercisesByTab = {}; // aus API geladen
|
let _exercisesByTab = {}; // aus API geladen
|
||||||
let _exercisesLoaded = false;
|
let _exercisesLoaded = false;
|
||||||
|
let _scrollTarget = null; // { exercise_id, name } — nach _renderContent() scrollen
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
// DATEN
|
// DATEN
|
||||||
|
|
@ -485,14 +486,7 @@ window.Page_uebungen = (() => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.exercise_id || params.name) {
|
if (params.exercise_id || params.name) {
|
||||||
setTimeout(() => {
|
_scrollTarget = { exercise_id: params.exercise_id || '', name: params.name || '' };
|
||||||
// Erst per exercise_id suchen (zuverlässig), dann per Name als Fallback
|
|
||||||
const card = (params.exercise_id
|
|
||||||
? _container.querySelector(`[data-exercise-id="${CSS.escape(params.exercise_id)}"]`)
|
|
||||||
: null)
|
|
||||||
|| _container.querySelector(`[data-exercise-name="${CSS.escape(params.name || '')}"]`);
|
|
||||||
if (card) card.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
||||||
}, 700);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Progress vom Server laden
|
// Progress vom Server laden
|
||||||
|
|
@ -971,6 +965,21 @@ window.Page_uebungen = (() => {
|
||||||
_bindLogButtons();
|
_bindLogButtons();
|
||||||
_bindNotizButtons();
|
_bindNotizButtons();
|
||||||
if (_activeTab === 'ki-trainer') _loadKiTrainerFeedback();
|
if (_activeTab === 'ki-trainer') _loadKiTrainerFeedback();
|
||||||
|
_tryScrollToTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
function _tryScrollToTarget() {
|
||||||
|
if (!_scrollTarget) return;
|
||||||
|
const t = _scrollTarget;
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
const card = (t.exercise_id
|
||||||
|
? _container.querySelector('[data-exercise-id="' + CSS.escape(t.exercise_id) + '"]')
|
||||||
|
: null) || _container.querySelector('[data-exercise-name="' + CSS.escape(t.name) + '"]');
|
||||||
|
if (card) {
|
||||||
|
card.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
||||||
|
_scrollTarget = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Offline-Cache + Push Notifications + Tile-Cache
|
Offline-Cache + Push Notifications + Tile-Cache
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const CACHE_VERSION = 'by-v493';
|
const CACHE_VERSION = 'by-v494';
|
||||||
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