MediaWiki:Common.js
Материал из Lost Paradise 14
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
const serversStatus = [{ name: "server-main", connect: "http://station.lost-paradise.space/ss14/status", serverconnect: "station.lost-paradise.space" }]; function getXHRInfo(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { resolve(JSON.parse(xhr.responseText)); } else { reject('Ошибка при выполнении запроса: ' + xhr.status); } }; xhr.onerror = function() { reject('Ошибка при выполнении запроса'); }; xhr.send(); }); } function updateServerInfoByConnect(connect, name) { getServerTime().then(function(currentUnixTime) { return getXHRInfo(connect).then(function(serverData) { var unixStartRound = getUnixTime(serverData.round_start_time); var timeDisplay = unixStartRound ? secondsToDHM(currentUnixTime - unixStartRound) : "–"; var currentPlayers = serverData.players; var maxPlayers = serverData.soft_max_players; // Вычисляем процент var percentage = maxPlayers > 0 ? Math.round((currentPlayers / maxPlayers) * 100) : 0; // Форматируем строку с количеством игроков var playersDisplay = currentPlayers && maxPlayers ? currentPlayers + '/' + maxPlayers : "–"; // Функция для проверки на пустые данные function checkValue(value) { return value ? value : "–"; } var serverInfo = { name: checkValue(serverData.name), round: checkValue(serverData.round_id), status: checkValue(serverData.run_level), map: checkValue(serverData.map), time: timeDisplay, players: playersDisplay, preset: checkValue(serverData.preset), percentage: percentage }; updateServerInfo(serverInfo, name); //console.log("serverInfo", serverInfo, "currentUnixTime", currentUnixTime,"unixStartRound", unixStartRound); }); }).catch(function(error) { console.error(error); }); } function getUnixTime(dateString) { return Math.floor(new Date(dateString).getTime() / 1000); // Делим на 1000, чтобы получить секунды } function secondsToDHM(seconds) { var days = Math.floor(seconds / 86400); var hours = Math.floor((seconds % 86400) / 3600); var minutes = Math.floor((seconds % 3600) / 60); var result = ""; if (days > 0) result += days + " дн, "; if (hours > 0) result += hours + " ч "; // Проверка на наличие минут if (minutes > 0) { result += minutes + " мин"; } else { result += "–"; // Символ ожидания, если минут нет } return result.trim(); } function getServerTime() { return fetch( 'https://wiki.lost-paradise.space/api.php?action=query&meta=siteinfo&siprop=general&format=json' ).then(function(response) { return response.json(); }).then(function(data) { return getUnixTime(data.query.general.time); }); } function updateServerInfo(serverObj, serverName) { var serverStatusFrame = document.getElementById(serverName); var statusText = { 0: "Лобби", 1: "Раунд идёт", 2: "Завершение" }; serverStatusFrame.querySelector(".serverInfoRoundSet").textContent = "#" + serverObj.round; serverStatusFrame.querySelector(".serverStatusSet").textContent = statusText[ serverObj.status] || "Неизвестный статус"; serverStatusFrame.querySelector(".serverMapSet").textContent = serverObj.map; serverStatusFrame.querySelector(".serverTimeSet").textContent = serverObj.time; serverStatusFrame.querySelector(".serverPlayersSet").textContent = serverObj.players; serverStatusFrame.querySelector(".serverPresetSet").textContent = serverObj.preset; // Получаем строку подключения из serversStatus const serverData = serversStatus.find(function(server) { return server.name === serverName; }); var connectionStringElement = serverStatusFrame.querySelector( ".serverConnectSet"); if (connectionStringElement) { connectionStringElement.textContent = serverData ? serverData.serverconnect : '-'; // Устанавливаем строку подключения } // Обновляем прогресс-бар var progressBar = serverStatusFrame.querySelector(".progressBar"); // Предполагаем, что у вас есть элемент для прогресс-бара if (progressBar) { progressBar.style.width = serverObj.percentage + '%'; // Устанавливаем ширину прогресс-бара } // Обновляем отображение процента var percentageDisplay = serverStatusFrame.querySelector(".percentageDisplay"); // Элемент для отображения процента if (percentageDisplay) { percentageDisplay.textContent = serverObj.percentage + '%'; // Устанавливаем текст с процентом } } function updateAllServersInfo() { serversStatus.forEach(function(server) { updateServerInfoByConnect(server.connect, server.name); }); } $(document).ready(function() { var serversStatus = document.querySelectorAll('.serversStatus'); if (serversStatus.length > 0) { updateAllServersInfo(); // Перезапускать каждые 10 минут (600000 мс) setInterval(updateAllServersInfo, 600000); } } );