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 = ` ⚠️ ${error.message} `; updateDisplay(new Date()); } } function updateDisplay(date = new Date()) { const tbody = document.getElementById('stats-body'); const updateTime = document.getElementById('update-time'); const searchTerm = searchInput.value.toLowerCase(); const filteredData = playersData.filter(player => player.player.toLowerCase().includes(searchTerm) ); tbody.innerHTML = filteredData.map(player => ` ${player.player} ${player.displayTime} `).join(''); searchInput.addEventListener('input', updateDisplay); updateTime.textContent = `Статистика обновлена: ${date.toLocaleString('ru-RU', { day: 'numeric', month: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit' })}`; } // Инициализация loadStats(); document.addEventListener('touchstart', function(event) { if (event.touches.length > 1) { event.preventDefault(); // Блокирует жесты с несколькими пальцами (pinch-to-zoom) } }, { passive: false }); document.addEventListener('doubletap', function(event) { event.preventDefault(); // Блокирует двойное нажатие для масштабирования }, { passive: false });