Feature: Übungs-Suche, fehlende Legacy-Übungen nachmigriert (110 gesamt) — SW by-v495, APP_VER 472

This commit is contained in:
rene 2026-04-29 12:26:32 +02:00
parent 4c3638c17c
commit 81ee1a063e
4 changed files with 63 additions and 4 deletions

View file

@ -39,6 +39,7 @@ window.Page_uebungen = (() => {
let _exercisesByTab = {}; // aus API geladen
let _exercisesLoaded = false;
let _scrollTarget = null; // { exercise_id, name } — nach _renderContent() scrollen
let _searchQuery = ''; // aktuelle Sucheingabe
// ----------------------------------------------------------
// DATEN
@ -566,10 +567,21 @@ window.Page_uebungen = (() => {
<div id="ueb-stats-banner" style="padding:var(--space-2) var(--space-4) 0"></div>
<div id="ueb-trainer" style="padding:0 var(--space-4);margin-bottom:var(--space-2)"></div>
<div id="ueb-suggestions" style="padding:0 var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--space-2)"></div>
<div id="ueb-content"></div>
<div style="padding:var(--space-3) var(--space-4) 0" id="ueb-search-wrap">
<input type="search" id="ueb-search" placeholder="Übung suchen…"
style="width:100%;padding:var(--space-2) var(--space-3);
border:1px solid var(--c-border);border-radius:var(--radius-md);
background:var(--c-surface);color:var(--c-text);font-size:var(--text-sm);
outline:none" value="${_esc(_searchQuery)}">
</div>
<div id="ueb-content"></div>
</div>
`;
_container.querySelector('#ueb-quicksetup-btn').addEventListener('click', _openQuickSetupModal);
_container.querySelector('#ueb-search')?.addEventListener('input', e => {
_searchQuery = e.target.value.trim().toLowerCase();
_renderContent();
});
_bindTabs();
_renderContent();
_renderStatsBanner();
@ -986,9 +998,20 @@ window.Page_uebungen = (() => {
// ÜBUNGS-CARDS
// ----------------------------------------------------------
function _renderUebungsList(list) {
const filtered = _searchQuery
? list.filter(u =>
u.name.toLowerCase().includes(_searchQuery) ||
(u.beschreibung || '').toLowerCase().includes(_searchQuery)
)
: list;
if (!filtered.length) {
return `<div style="padding:var(--space-8);text-align:center;color:var(--c-text-muted)">
${UI.icon('magnifying-glass')} Keine Übungen gefunden für ${_esc(_searchQuery)}"
</div>`;
}
return `
<div style="padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4)">
${list.map((u, i) => _renderCard(u, i)).join('')}
${filtered.map((u, i) => _renderCard(u, i)).join('')}
</div>
`;
}