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,
|
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(){
|
function loadProgress(){
|
||||||
try{
|
try{
|
||||||
const s = localStorage.getItem('algebra8_ch1_progress');
|
const s = localStorage.getItem('algebra8_ch1_progress');
|
||||||
@@ -407,10 +425,13 @@ function loadProgress(){
|
|||||||
if(a){
|
if(a){
|
||||||
const parsed = JSON.parse(a);
|
const parsed = JSON.parse(a);
|
||||||
if(Array.isArray(parsed)){
|
if(Array.isArray(parsed)){
|
||||||
// старый формат [id, id, ...] — id-ы как текст
|
// старый формат [id, id, ...]
|
||||||
parsed.forEach(id => STATE.achievements.set(id, id));
|
parsed.forEach(id => STATE.achievements.set(id, ACH_LABELS[id] || id));
|
||||||
} else if(parsed && typeof parsed === 'object'){
|
} 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');
|
const sb = localStorage.getItem('algebra8_ch1_squaresBest');
|
||||||
|
|||||||
Reference in New Issue
Block a user