fix(dashboard): пустой бокс колонки прогресса, когда флешкарты отключены

#w-flashcard прятался, но он — секция внутри #w-progress-col (один .widget-бокс с
рамкой/паддингом: карточка + прогресс по предметам + результаты). Если все секции
скрыты (флешкарты выкл и нет данных), оставался пустой бокс. Добавлена
syncProgressCol(): прячет #w-progress-col, если ни одна секция не видна (computed-
display, учитывает и инъект-CSS флешкарт). Зовётся в конце loadFlashcardWidget /
loadLastResultsWidget / loadSubjProgressWidget.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-23 00:26:33 +03:00
parent 796a2416cb
commit 399a222b65
+18 -2
View File
@@ -3670,12 +3670,25 @@
document.getElementById('act-cal-pane').classList.toggle('visible', tab === 'calendar');
}
/* Колонка прогресса (#w-progress-col) — это один .widget-бокс с тремя секциями
(карточка / по предметам / результаты). Если все секции скрыты (напр. флешкарты
отключены и нет данных) — прячем сам бокс, иначе висит пустая рамка. */
function syncProgressCol() {
const col = document.getElementById('w-progress-col');
if (!col) return;
const any = ['w-flashcard', 'w-subj-progress', 'w-last-results'].some(id => {
const e = document.getElementById(id);
return e && getComputedStyle(e).display !== 'none';
});
col.style.display = any ? '' : 'none';
}
/* ══ WIDGET: Last results (compact, 5 items) ══════════════════════ */
function loadLastResultsWidget(rows) {
const w = document.getElementById('w-last-results');
if (!w) return;
const completed = (rows || []).filter(r => r.score !== null && r.total > 0).slice(0, 5);
if (!completed.length) { w.style.display = 'none'; return; }
if (!completed.length) { w.style.display = 'none'; syncProgressCol(); return; }
w.style.display = '';
document.getElementById('last-results-list').innerHTML = completed.map(h => {
const pct = Math.round(h.score / h.total * 100);
@@ -3689,6 +3702,7 @@
</div>
</div>`;
}).join('');
syncProgressCol();
}
/* ══ WIDGET: Subject progress bars ════════════════════════════════ */
@@ -3702,7 +3716,7 @@
bySubj[r.subject_slug].scores.push(Math.round(r.score / r.total * 100));
});
const entries = Object.entries(bySubj);
if (!entries.length) { w.style.display = 'none'; return; }
if (!entries.length) { w.style.display = 'none'; syncProgressCol(); return; }
w.style.display = '';
document.getElementById('subj-progress-bars').innerHTML = entries.map(([slug, d]) => {
const avg = Math.round(d.scores.reduce((a, b) => a + b, 0) / d.scores.length);
@@ -3713,6 +3727,7 @@
<span class="sp-pct" style="color:${color}">${avg}%</span>
</div>`;
}).join('');
syncProgressCol();
}
/* ══ WIDGET: Theory progress ══════════════════════════════════════ */
@@ -4298,6 +4313,7 @@
renderFlashcardWidget(r);
w.style.display = '';
} catch { /* фича выключена или ошибка — оставляем скрытым */ }
syncProgressCol(); // если карточка скрыта и нет прогресса/результатов — спрятать бокс
}
function renderFlashcardWidget(r) {