|
|
(не показаны 3 промежуточные версии 2 участников) |
Строка 1: |
Строка 1: |
| const currentURL = window.location.href;
| |
| const serversStatus = [{
| |
| name: "server-vanilla",
| |
| connect: "https://api.codetabs.com/v1/proxy/?quest=http://147.45.108.112:1212/status",
| |
| serverconnect: "147.45.108.112:1212"
| |
| }
| |
| }];
| |
|
| |
|
| 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://station14.ru/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);
| |
| });
| |
| }
| |
|
| |
| function copyToClipboard(connectUrl) {
| |
| const copyIcons = document.querySelectorAll('.copy-icon');
| |
| copyIcons.forEach(function(icon) {
| |
| icon.addEventListener('click', function() {
| |
| // Находим предыдущий элемент
| |
| const previousElement = this.previousElementSibling;
| |
| if (previousElement) {
| |
| // Получаем текстовое содержимое
| |
| const textToCopy = previousElement.textContent;
| |
| const tempInput = document.createElement('input');
| |
| tempInput.value = textToCopy;
| |
| document.body.appendChild(tempInput);
| |
| tempInput.select();
| |
| document.execCommand('copy');
| |
| document.body.removeChild(tempInput);
| |
| // Визуальный эффект
| |
| this.style.opacity = '0.5'; // Сменяем прозрачность
| |
| setTimeout(function() {
| |
| this.style.opacity = '1'; // Возвращаем прозрачность
| |
| }.bind(this), 200); // Через 1 секунду
| |
| }
| |
| });
| |
| });
| |
| }
| |
|
| |
|
| |
| $(document).ready(function() {
| |
| var serversStatus = document.querySelectorAll('.serversStatus');
| |
| if (serversStatus.length > 0) {
| |
| updateAllServersInfo();
| |
| // Перезапускать каждую минуту (60000 мс)
| |
| setInterval(updateAllServersInfo, 60000);
| |
| }
| |
|
| |
| const copyServerConnectionIcon = document.querySelectorAll(
| |
| '.copyServerConnectionIcon');
| |
| copyServerConnectionIcon.forEach(function(icon) {
| |
| icon.addEventListener('click', function() {
| |
| const connectUrl = this.getAttribute('data-connect');
| |
| copyToClipboard(connectUrl);
| |
| });
| |
| });
| |
| copyToClipboard();
| |
| });
| |
| /*WikiEditor/Викификатор*/
| |
| if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
| |
| mw.loader.load(
| |
| '//ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript'
| |
| );
| |
| }
| |
| var customizeToolbar = function() {
| |
| $('#wpTextbox1').wikiEditor('addToToolbar', {
| |
| 'section': 'advanced',
| |
| 'group': 'format',
| |
| 'tools': {
| |
| 'wikify': {
| |
| label: 'Викификатор',
| |
| type: 'button',
| |
| icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
| |
| action: {
| |
| type: 'callback',
| |
| execute: function(context) {
| |
| Wikify();
| |
| }
| |
| }
| |
| }
| |
| }
| |
| });
| |
| };
| |
| if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
| |
| mw.loader.using('user.options', function() {
| |
| if (mw.user.options.get('usebetatoolbar')) {
| |
| mw.loader.using('ext.wikiEditor.toolbar', function() {
| |
| $(document).ready(customizeToolbar);
| |
| });
| |
| }
| |
| });
| |
| }
| |