Jump to content
Toggle menu
  • 38 articles
  • 12 files
  • 9 users
  • 377 edits
Create Server Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

This wiki may be out of date or incorrect. If you'd like to help update it, please DM me on Discord @eszn

MediaWiki:Common.js: Difference between revisions

MediaWiki interface page
Refresh live server status every five seconds
Alphabetize live players, enable short URLs, and standardize Cold War title
 
Line 24: Line 24:
         }
         }


         names.forEach(function (name) {
         var sortedNames = names.slice().sort(function (left, right) {
            return String(left).localeCompare(String(right), undefined, {
                sensitivity: 'base',
                numeric: true
            });
        });
 
        sortedNames.forEach(function (name) {
             var player = document.createElement('a');
             var player = document.createElement('a');
             player.className = 'csw-server-player';
             player.className = 'csw-server-player';
             player.href = '/index.php/' + encodeURIComponent(name.replace(/ /g, '_'));
             player.href = '/wiki/' + encodeURIComponent(name.replace(/ /g, '_'));
             player.textContent = name;
             player.textContent = name;
             container.appendChild(player);
             container.appendChild(player);
Line 33: Line 40:


         if (!listComplete) {
         if (!listComplete) {
             var remainder = Math.max(online - names.length, 0);
             var remainder = Math.max(online - sortedNames.length, 0);
             if (remainder > 0) {
             if (remainder > 0) {
                 var more = document.createElement('span');
                 var more = document.createElement('span');

Latest revision as of 12:19, 1 September 2026

(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;
        }

        var sortedNames = names.slice().sort(function (left, right) {
            return String(left).localeCompare(String(right), undefined, {
                sensitivity: 'base',
                numeric: true
            });
        });

        sortedNames.forEach(function (name) {
            var player = document.createElement('a');
            player.className = 'csw-server-player';
            player.href = '/wiki/' + encodeURIComponent(name.replace(/ /g, '_'));
            player.textContent = name;
            container.appendChild(player);
        });

        if (!listComplete) {
            var remainder = Math.max(online - sortedNames.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();
    }
}());