Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

MediaWiki:Common.js

Страница интерфейса MediaWiki
Версия от 01:29, 4 июня 2026; Maintenance script (обсуждение | вклад) (Add live Red Star server status)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
(function () {
    function formatRoundTime(rawTime) {
        if (!rawTime) {
            return '?';
        }

        try {
            var normalized = rawTime.replace('Z', '+00:00');
            var start = new Date(normalized);
            var now = new Date();

            if (Number.isNaN(start.getTime())) {
                return '?';
            }

            var totalMinutes = Math.max(0, Math.floor((now - start) / 60000));
            var hours = Math.floor(totalMinutes / 60);
            var minutes = totalMinutes % 60;

            if (hours > 0) {
                return hours + 'ч ' + minutes + 'м';
            }

            return minutes + 'м';
        } catch (e) {
            return '?';
        }
    }

    function setStatusOffline() {
        var main = document.getElementById('redstar-status-main');
        var details = document.getElementById('redstar-status-details');

        if (main) {
            main.textContent = '● Оффлайн';
            main.style.color = '#ff4545';
        }

        if (details) {
            details.textContent = 'Сервер недоступен';
        }
    }

    function setStatus(data) {
        var main = document.getElementById('redstar-status-main');
        var details = document.getElementById('redstar-status-details');

        if (!main || !details) {
            return;
        }

        var players = data.players ?? '?';
        var maxPlayers = data.soft_max_players ?? '?';
        var mapName = data.map;
        var runLevel = data.run_level;
        var roundStartTime = data.round_start_time;

        main.textContent = '● Онлайн';
        main.style.color = '#4ee26b';

        if (runLevel === 0 || !mapName || !roundStartTime) {
            details.textContent = players + '/' + maxPlayers + ' игроков · Лобби';
            return;
        }

        details.textContent = players + '/' + maxPlayers + ' игроков · ' + mapName + ' · ' + formatRoundTime(roundStartTime);
    }

    function updateStatus() {
        fetch('/ss14-status', { cache: 'no-store' })
            .then(function (response) {
                if (!response.ok) {
                    throw new Error('Bad response');
                }

                return response.json();
            })
            .then(setStatus)
            .catch(setStatusOffline);
    }

    mw.hook('wikipage.content').add(function () {
        updateStatus();
        setInterval(updateStatus, 30000);
    });
})();