MediaWiki: Common.js: различия между версиями
Материал из Vanilla Station
Kerisar (обсуждение | вклад) мНет описания правки |
Kerisar (обсуждение | вклад) мНет описания правки |
||
(не показано 5 промежуточных версий этой же участницы) | |||
Строка 1: | Строка 1: | ||
const currentURL = window.location.href; | 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 | 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 | function getServerTime() { | ||
return fetch( | |||
'https://vanilla-station.ru/w/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 | 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 | 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() { | $(document).ready(function() { | ||
if ( | 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); | |||
}); | |||
} | |||
}); | |||
} |
Текущая версия от 17:30, 15 августа 2024
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://vanilla-station.ru/w/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);
});
}
});
}