diff --git a/frontend/textbooks/algebra_8.html b/frontend/textbooks/algebra_8.html
index a943690..dc91c79 100644
--- a/frontend/textbooks/algebra_8.html
+++ b/frontend/textbooks/algebra_8.html
@@ -399,6 +399,24 @@ const STATE = {
squaresBest: Infinity,
};
+/* Словарь имён достижений — используется и для отображения, и для retroactive-фикса старых записей */
+const ACH_LABELS = {
+ start: 'Начало пути по корням!',
+ ring36: 'Нашёл сторону ринга',
+ squares: 'Лучший результат «Таблица квадратов»',
+ exists: 'Сортировка корней',
+ classify: 'Классифицировал числа',
+ rat: 'Распознал иррациональные',
+ match: 'Match выражений',
+ simp4: 'Тренажёр упрощения корней',
+ draw: 'Построил промежуток',
+ tariff: 'Задача про тарифы',
+ ass8: 'Самооценка 8+/10',
+ pr1: 'Дорожка с розами',
+ pr2: 'Цемент',
+ decode: 'Расшифровал код',
+};
+
function loadProgress(){
try{
const s = localStorage.getItem('algebra8_ch1_progress');
@@ -407,10 +425,13 @@ function loadProgress(){
if(a){
const parsed = JSON.parse(a);
if(Array.isArray(parsed)){
- // старый формат [id, id, ...] — id-ы как текст
- parsed.forEach(id => STATE.achievements.set(id, id));
+ // старый формат [id, id, ...]
+ parsed.forEach(id => STATE.achievements.set(id, ACH_LABELS[id] || id));
} else if(parsed && typeof parsed === 'object'){
- STATE.achievements = new Map(Object.entries(parsed));
+ for(const [id, txt] of Object.entries(parsed)){
+ // если ранее сохранили id вместо названия — подменим на красивое
+ STATE.achievements.set(id, (txt && txt !== id) ? txt : (ACH_LABELS[id] || id));
+ }
}
}
const sb = localStorage.getItem('algebra8_ch1_squaresBest');