// ========================================================= // ИНИЦИАЛИЗАЦИЯ И УПРАВЛЕНИЕ ЯЗЫКОМ // ========================================================= // Флаг готовности let isReady = false; let pendingLang = null; // Функция применения языка после всех загрузок function applyLanguageAfterLoad(lang) { if (isReady) { setLang(lang); return; } pendingLang = lang; } // Функция, которая вызывается когда всё загружено function onAllLoaded() { isReady = true; if (pendingLang) { setLang(pendingLang); } else { const savedLang = localStorage.getItem('lang') || 'ru'; setLang(savedLang); } } // Восстанавливаем язык из localStorage const savedLang = localStorage.getItem('lang') || 'ru'; // Устанавливаем язык после загрузки applyLanguageAfterLoad(savedLang); // Синхронизируем селекты const langSelect = document.getElementById('langSelect'); const langSelectSide = document.getElementById('langSelectSide'); if (langSelect) { langSelect.value = savedLang; } if (langSelectSide) { langSelectSide.value = savedLang; } // Функция обновления всего при смене языка или версии function refreshAll() { if (typeof renderLoadOrder === 'function') { renderLoadOrder(); } if (typeof renderAllChangelogs === 'function') { renderAllChangelogs(); } // Принудительно очищаем маркеры перед перезагрузкой const scrollBar = document.getElementById('loadOrderScrollBar'); const scrollBarFixed = document.getElementById('loadOrderScrollBarFixed'); if (scrollBar) { const oldMarkers = scrollBar.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } if (scrollBarFixed) { const oldMarkers = scrollBarFixed.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } setTimeout(() => { if (typeof initCustomScrollbar === 'function') { initCustomScrollbar(); } setTimeout(() => { if (typeof initScrollbar === 'function') { initScrollbar(); } if (typeof loadScrollMarkers === 'function') { loadScrollMarkers(); } }, 200); }, 100); } // Обработчики смены языка if (langSelect) { langSelect.addEventListener('change', (e) => { const lang = e.target.value; localStorage.setItem('lang', lang); if (isReady) { setLang(lang); refreshAll(); } else { pendingLang = lang; } if (langSelectSide) { langSelectSide.value = lang; } }); } if (langSelectSide) { langSelectSide.addEventListener('change', (e) => { const lang = e.target.value; localStorage.setItem('lang', lang); if (isReady) { setLang(lang); refreshAll(); } else { pendingLang = lang; } if (langSelect) { langSelect.value = lang; } }); } // Рендерим версии для профилей if (typeof renderVersionButtons === 'function') { renderVersionButtons(); } if (typeof renderVersionList === 'function') { renderVersionList(); } // Проверка загрузки function checkAllLoaded() { const hasMods = modsData && modsData.length > 0; if (hasMods) { onAllLoaded(); setTimeout(() => { if (typeof makeChangelogItemsClickable === 'function') { makeChangelogItemsClickable(); } }, 100); return true; } return false; } // Проверяем каждые 500ms let loadCheckInterval = setInterval(() => { if (checkAllLoaded()) { clearInterval(loadCheckInterval); } }, 500); // Если через 10 секунд всё равно не загрузилось - применяем язык принудительно setTimeout(() => { clearInterval(loadCheckInterval); if (!isReady) { const lang = localStorage.getItem('lang') || 'ru'; if (typeof setLang === 'function') { setLang(lang); } isReady = true; } }, 10000); localStorage.setItem('lastPage', window.location.href); // ========================================================= // ИНИЦИАЛИЗАЦИЯ ЗАГРУЗКИ МОДОВ // ========================================================= document.addEventListener('DOMContentLoaded', function () { // Показываем лоадеры const loadOrderContainer = document.getElementById('loadOrderList'); const changelogContainer = document.getElementById('changelogVersions'); if (loadOrderContainer) { loadOrderContainer.innerHTML = '
⏳ Загрузка порядка загрузки...
'; } if (changelogContainer) { changelogContainer.innerHTML = '
⏳ Загрузка changelog...
'; } const versionSelect = document.getElementById('comboVersionSelect'); if (versionSelect) { const savedVersion = localStorage.getItem('comboVersion') || '1.60'; versionSelect.value = savedVersion; // Устанавливаем currentVersion глобально if (typeof currentVersion !== 'undefined') { currentVersion = savedVersion; } versionSelect.addEventListener('change', function () { const selectedVersion = this.value; if (typeof currentVersion !== 'undefined') { currentVersion = selectedVersion; } localStorage.setItem('comboVersion', selectedVersion); const container = document.getElementById('loadOrderList'); if (container) { container.innerHTML = '
⏳ Загрузка...
'; } const changelogContainer = document.getElementById('changelogVersions'); if (changelogContainer) { changelogContainer.innerHTML = '
⏳ Загрузка...
'; } const scrollBar = document.getElementById('loadOrderScrollBar'); const scrollBarFixed = document.getElementById('loadOrderScrollBarFixed'); if (scrollBar) { const oldMarkers = scrollBar.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } if (scrollBarFixed) { const oldMarkers = scrollBarFixed.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } try { if (typeof loadModsData === 'function') { loadModsData(selectedVersion); } else { console.error('loadModsData не определена! Проверьте подключение versionManager.js'); if (container) { container.innerHTML = '
❌ Ошибка: versionManager.js не загружен
'; } } } catch (error) { console.error('Ошибка при загрузке модов:', error); if (container) { container.innerHTML = `
❌ Ошибка загрузки: ${error.message}
`; } } }); } const subVersionSelect = document.getElementById('comboSubVersionSelect'); if (subVersionSelect) { subVersionSelect.addEventListener('change', function () { try { if (typeof changeSubVersion === 'function') { changeSubVersion(this.value); } else { console.error('changeSubVersion не определена!'); } } catch (error) { console.error('Ошибка при смене подверсии:', error); } }); } // Загружаем данные try { const savedVersion = localStorage.getItem('comboVersion') || '1.60'; if (typeof loadModsData === 'function') { loadModsData(savedVersion); } else { console.error('loadModsData не определена! Проверьте подключение versionManager.js'); if (loadOrderContainer) { loadOrderContainer.innerHTML = '
❌ Ошибка: versionManager.js не загружен
'; } } } catch (error) { console.error('Ошибка при инициализации:', error); if (loadOrderContainer) { loadOrderContainer.innerHTML = `
❌ Ошибка загрузки: ${error.message}
`; } } });