fix(textbooks): retroactive-фикс существующих достижений Алгебры 8
Прошлый коммит хранил название в Map, но старые записи в LocalStorage (Set из id-ов) подгружались с id в качестве текста — пользователь по-прежнему видел 'ring36', 'start'.
Фикс: словарь ACH_LABELS (id → название) применяется при загрузке как fallback:
- старый формат массив id-ов: id → ACH_LABELS[id]
- новый формат объект {id:text}: если text === id, используем ACH_LABELS[id]
Теперь при следующем открытии учебника старые достижения автоматически получат красивые названия.
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user