From c335f33e25075a37881927f5dfe34213286d6524 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Wed, 27 May 2026 11:30:52 +0300 Subject: [PATCH] =?UTF-8?q?fix(textbooks):=20retroactive-=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83?= =?UTF-8?q?=D1=8E=D1=89=D0=B8=D1=85=20=D0=B4=D0=BE=D1=81=D1=82=D0=B8=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=90=D0=BB=D0=B3=D0=B5=D0=B1=D1=80?= =?UTF-8?q?=D1=8B=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прошлый коммит хранил название в Map, но старые записи в LocalStorage (Set из id-ов) подгружались с id в качестве текста — пользователь по-прежнему видел 'ring36', 'start'. Фикс: словарь ACH_LABELS (id → название) применяется при загрузке как fallback: - старый формат массив id-ов: id → ACH_LABELS[id] - новый формат объект {id:text}: если text === id, используем ACH_LABELS[id] Теперь при следующем открытии учебника старые достижения автоматически получат красивые названия. --- frontend/textbooks/algebra_8.html | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) 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');