Files
hytale-f2p-mirror/GUI/js/script.js
sanasol 57056e5b7a v2.4.8: UI improvements, update popup fixes, per-profile branch tracking
- Fix auto-update popup: indeterminate progress fallback when no download events, show 100% on complete
- Remove macOS auto-update warning (app is now signed)
- Disable update popup pulse animation
- Remove news tab and news section from home screen
- Center play section vertically, add community links with colored icons
- Add game version + branch display on play page (from manifest)
- Add last played timestamp tracking
- Version badge links to git.sanhost.net releases
- Profiles now store version_branch and version_client per-configuration
- Profile switch restores branch/version and refreshes settings UI
- DevTools enabled in dev mode (electron . --dev)
- Reorder community links: Chat, Discord, TG Channel, TG Group, Source

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 21:47:23 +01:00

108 lines
3.1 KiB
JavaScript

import './ui.js';
import './install.js';
import './launcher.js';
import { initModsManager } from './mods.js';
import './players.js';
import './settings.js';
import './logs.js';
let i18nInitialized = false;
(async () => {
const savedLang = await window.electronAPI?.loadLanguage();
await i18n.init(savedLang);
i18nInitialized = true;
if (document.readyState === 'complete' || document.readyState === 'interactive') {
updateLanguageSelector();
initModsManager();
} else {
document.addEventListener('DOMContentLoaded', () => {
updateLanguageSelector();
initModsManager();
});
}
})();
async function checkDiscordPopup() {
try {
const config = await window.electronAPI?.loadConfig();
if (!config || config.discordPopup === undefined || config.discordPopup === false) {
const modal = document.getElementById('discordPopupModal');
if (modal) {
const buttons = modal.querySelectorAll('.discord-popup-btn');
buttons.forEach(btn => btn.disabled = true);
setTimeout(() => {
modal.style.display = 'flex';
modal.classList.add('active');
setTimeout(() => {
buttons.forEach(btn => btn.disabled = false);
}, 2000);
}, 1000);
}
}
} catch (error) {
console.error('Failed to check Discord popup:', error);
}
}
window.closeDiscordPopup = function() {
const modal = document.getElementById('discordPopupModal');
if (modal) {
modal.classList.remove('active');
setTimeout(() => {
modal.style.display = 'none';
}, 300);
}
};
window.joinDiscord = async function() {
// await window.electronAPI?.openExternal('https://discord.gg/Fhbb9Yk5WW');
await window.electronAPI?.openExternal('https://chat.sanhost.net/invite/Tfz4jCK4');
try {
await window.electronAPI?.saveConfig({ discordPopup: true });
} catch (error) {
console.error('Failed to save Discord popup state:', error);
}
closeDiscordPopup();
};
function updateLanguageSelector() {
const langSelect = document.getElementById('languageSelect');
if (langSelect) {
// Clear existing options
langSelect.innerHTML = '';
const languages = i18n.getAvailableLanguages();
const currentLang = i18n.getCurrentLanguage();
languages.forEach(lang => {
const option = document.createElement('option');
option.value = lang.code;
option.textContent = lang.name;
if (lang.code === currentLang) {
option.selected = true;
}
langSelect.appendChild(option);
});
// Handle language change (add listener only once)
if (!langSelect.hasAttribute('data-listener-added')) {
langSelect.addEventListener('change', async (e) => {
await i18n.setLanguage(e.target.value);
});
langSelect.setAttribute('data-listener-added', 'true');
}
}
}
document.addEventListener('DOMContentLoaded', () => {
if (i18nInitialized) {
updateLanguageSelector();
}
checkDiscordPopup();
});