@@ -98,22 +94,37 @@ export class TrainingPage {
});
}
+ private updateCounter(): void {
+ const total = this.totalCards;
+ const span = this.container.querySelector('.training-header span');
+ if (span) {
+ span.textContent = `уникальных: ${this.seenWords.size} / ${total}`;
+ }
+ }
+
private renderCard(): void {
const result = this.cardSet.next();
const word = this.words.find((w) => w.id === result.word.id);
if (!word) return;
- // Обновляем дату последнего открытия в БД
+ this.shownCount++;
+
+ // Учитываем уникальные слова
+ if (!this.seenWords.has(result.word.id)) {
+ this.seenWords.add(result.word.id);
+ }
+ this.updateCounter();
+
const stat = this.cardSet.set[this.cardSet.currentWordIndex!];
if (stat) {
const now = Math.floor(Date.now() / 1000);
- stat.last_open = Date.now(); // обновляем в памяти из алгоритма
+ stat.last_open = Date.now();
updateCardStat(stat.id, stat.score, now).catch((err) =>
console.error('[Training] Ошибка сохранения last_opened:', err),
);
}
- this.renderSide(word, this.forwardFields, this.backwardFields, false);
+ this.renderSide(word, this.forwardFields, this.backwardFields, false, stat);
this.renderActions(false);
}
@@ -122,19 +133,31 @@ export class TrainingPage {
forwardFields: string,
backwardFields: string,
showBack: boolean,
+ stat?: CardStatistics,
): void {
const contentEl = document.getElementById('training-content');
if (!contentEl) return;
+ // Текущий балл слова (с учётом затухания)
+ let scoreStr = '';
+ if (stat) {
+ const cs = calculatedScore(stat);
+ scoreStr = `⚡ ${cs.toFixed(1)}`;
+ }
+
if (!showBack) {
const values = getWordFieldValues(word, forwardFields);
if (values.length === 0) {
- contentEl.innerHTML = '
Нет данных для отображения
';
+ contentEl.innerHTML = `
+
Нет данных для отображения
+ ${scoreStr ? `
${scoreStr}
` : ''}
+ `;
return;
}
- contentEl.innerHTML = values
- .map((v) => `
${this.escapeHtml(v)}
`)
- .join('');
+ contentEl.innerHTML = `
+ ${values.map((v) => `
${this.escapeHtml(v)}
`).join('')}
+ ${scoreStr ? `
${scoreStr}
` : ''}
+ `;
} else {
const fwdVals = getWordFieldValues(word, forwardFields);
const bwdVals = getWordFieldValues(word, backwardFields);
@@ -151,6 +174,7 @@ export class TrainingPage {
? bwdVals.map((v) => `
${this.escapeHtml(v)}
`).join('')
: '
—
'}
` : ''}
`;
}
}
@@ -189,7 +213,9 @@ export class TrainingPage {
const word = this.words[current];
if (!word) return;
- this.renderSide(word, this.forwardFields, this.backwardFields, true);
+ const stat = this.cardSet.set[current];
+
+ this.renderSide(word, this.forwardFields, this.backwardFields, true, stat);
this.renderActions(true);
}