let playersData = []; const searchInput = document.getElementById('search-input'); let sortDirection = { alphabet: 1, hours: 1 }; // 1 для возрастания, -1 для убывания function sortTable(criteria) { if (criteria === 'alphabet') { playersData.sort((a, b) => sortDirection.alphabet * a.player.localeCompare(b.player, 'ru') ); sortDirection.alphabet *= -1; // Переключаем направление } else if (criteria === 'hours') { playersData.sort((a, b) => { const timeA = parseTimeToMinutes(a.displayTime); const timeB = parseTimeToMinutes(b.displayTime); return sortDirection.hours * (timeB - timeA); // Сортировка по убыванию часов }); sortDirection.hours *= -1; // Переключаем направление } updateDisplay(); // Обновляем отображение } function parseTimeToMinutes(timeStr) { const [hours, minutes] = timeStr.split(':').map(Number); return (hours * 60) + (minutes || 0); // Преобразуем часы и минуты в общее количество минут } async function loadStats() { try { const response = await fetch('./data.txt?t=' + Date.now()); if (!response.ok) throw new Error(`Ошибка загрузки: ${response.status}`); const lastModified = response.headers.get('Last-Modified'); const updateDate = lastModified ? new Date(lastModified) : new Date(); const rawData = await response.text(); const lines = rawData.split('\n').slice(2).filter(line => line.trim() && !line.startsWith('---') && line.includes(' ') ); playersData = lines.map(line => { const [player, time] = line.split(/\s{2,}/); return { player: player.trim(), displayTime: time.trim() }; }); updateDisplay(updateDate); document.getElementById('invite-link').classList.add('loaded'); document.getElementById('support-link').classList.add('loaded'); } catch (error) { document.getElementById('stats-body').innerHTML = `