MediaWiki:Common.js
MediaWiki interface page
More actions
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function () {
'use strict';
var refreshTimer;
function setText(id, value) {
var element = document.getElementById(id);
if (element) {
element.textContent = value;
}
}
function renderPlayers(container, names, online, listComplete) {
container.replaceChildren();
if (online === 0) {
container.textContent = 'Nobody is online.';
return;
}
if (!Array.isArray(names) || names.length === 0) {
container.textContent = 'Player names are not available from the server.';
return;
}
names.forEach(function (name) {
var player = document.createElement('a');
player.className = 'csw-server-player';
player.href = '/index.php/' + encodeURIComponent(name.replace(/ /g, '_'));
player.textContent = name;
container.appendChild(player);
});
if (!listComplete) {
var remainder = Math.max(online - names.length, 0);
if (remainder > 0) {
var more = document.createElement('span');
more.className = 'csw-server-player-more';
more.textContent = '+' + remainder + ' more';
container.appendChild(more);
}
}
}
function renderStatus(data) {
var root = document.getElementById('csw-server-status');
var dot = document.getElementById('csw-server-status-dot');
var players = document.getElementById('csw-server-player-list');
if (!root || !dot || !players) {
return;
}
dot.className = 'csw-server-status-dot ' + (data.online ? 'csw-server-status-dot-online' : 'csw-server-status-dot-offline');
root.classList.toggle('csw-server-status-online', Boolean(data.online));
root.classList.toggle('csw-server-status-offline', !data.online);
if (!data.online) {
setText('csw-server-status-label', 'Server offline');
setText('csw-server-player-count', '0 players');
setText('csw-server-motd', 'The Minecraft server is not responding.');
players.textContent = 'Nobody is online.';
} else {
var playerData = data.players || {};
var online = Number(playerData.online) || 0;
var max = Number(playerData.max) || 0;
setText('csw-server-status-label', 'Server online');
setText('csw-server-player-count', online + ' / ' + max + ' players');
setText('csw-server-motd', data.motd || 'Create Server');
renderPlayers(players, playerData.names, online, Boolean(playerData.list_complete));
}
var checked = data.checked_at ? new Date(data.checked_at) : new Date();
setText('csw-server-status-updated', 'Updated ' + checked.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit', second: '2-digit' }));
}
function renderError() {
var dot = document.getElementById('csw-server-status-dot');
if (dot) {
dot.className = 'csw-server-status-dot csw-server-status-dot-offline';
}
setText('csw-server-status-label', 'Status unavailable');
setText('csw-server-player-count', '— / — players');
setText('csw-server-motd', 'The live status service could not be reached.');
setText('csw-server-player-list', 'Player list unavailable.');
setText('csw-server-status-updated', 'Retrying automatically…');
}
function refreshStatus() {
if (!document.getElementById('csw-server-status')) {
return;
}
fetch('/server-status.php', {
credentials: 'same-origin',
cache: 'no-store',
headers: { Accept: 'application/json' }
})
.then(function (response) {
if (!response.ok) {
throw new Error('Status request failed');
}
return response.json();
})
.then(renderStatus)
.catch(renderError);
}
function initServerStatus() {
if (!document.getElementById('csw-server-status')) {
return;
}
refreshStatus();
window.clearInterval(refreshTimer);
refreshTimer = window.setInterval(refreshStatus, 5000);
document.addEventListener('visibilitychange', function () {
if (!document.hidden) {
refreshStatus();
}
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initServerStatus, { once: true });
} else {
initServerStatus();
}
}());