打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Citizen.js:修订间差异

MediaWiki界面页面
泡泡留言 | 贡献
修复售票亭JS加载:mw.loader.load → $.getScript
标签已被回退
泡泡留言 | 贡献
移除售票亭JS加载器,已迁移至Widget
标签手工回退
第109行: 第109行:
   mw.hook('wikipage.content').add(start);
   mw.hook('wikipage.content').add(start);
})();
})();
/* 售票亭 - 按需加载页面JS */
if (mw.config.get('wgPageName') === '售票亭') {
  $.getScript('/index.php?title=MediaWiki:售票亭.js&action=raw&ctype=text/javascript');
}

2026年5月14日 (四) 21:58的版本

/* 服务器状态查询 - 柠檬树服务器 */
console.log('[LTS] 状态查询脚本已加载');

(function() {
  var STARTED = false;
  var servers = [
    { id: 'lts-status-platform', address: 'platform.lts.ink', title: '月台', subtitle: '重度机械症 · 1服 · 离线正版都可进' },
    { id: 'lts-status-journey', address: 'journey.lts.ink', title: '启程', subtitle: '重度机械症 · 2服 · 已开启正版验证' },
    { id: 'lts-status-promised', address: 'promised.lts.ink', title: '应许', subtitle: '创造/体验服 · 已开启正版验证' },
    { id: 'lts-status-voyage', address: '45.125.45.195', title: '远行', subtitle: '你好!新蒸程·远行服·已开启正版验证', port: '25565' }
  ];

  var API = 'https://wiki.suanlemon.cc/api/server-status/';
  var allData = {};
  var timer = null;

  function buildCard(server, data) {
    var color = data.online ? '#3a971e' : '#bf3c2c';
    var statusText = data.online ? '在线' : '离线';

    var html = '<div style="padding:6px 0;border-bottom:1px solid #eee;display:flex;align-items:center;gap:8px;flex-wrap:wrap;">';
    html += '<b>' + server.title + '</b>';
    html += '<span style="font-size:0.8em;color:#888;">' + server.subtitle + '</span>';
    html += '<span style="margin-left:auto;font-weight:bold;color:' + color + ';font-size:0.85em;">' + statusText + '</span>';
    html += '</div>';

    if (data.online && data.players) {
      html += '<div style="padding:4px 0 0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;">';
      html += '<span style="font-size:0.85em;">' + data.players.online + ' / ' + data.players.max + ' 人</span>';
      html += '<span style="font-size:0.8em;color:#888;">' + (data.latency || '?') + 'ms</span>';
      if (data.version) html += '<span style="font-size:0.8em;color:#888;">' + data.version + '</span>';
      html += '</div>';

      if (data.players.list && data.players.list.length > 0) {
        html += '<div style="margin-top:4px;display:flex;flex-wrap:wrap;gap:4px;align-items:center;">';
        data.players.list.forEach(function(name) {
          html += '<span style="font-size:0.75em;background:#f0f0f0;padding:1px 5px;display:inline-flex;align-items:center;gap:2px;">';
          html += '<img src="https://mineskin.eu/helm/' + name + '/24" width="14" height="14" style="image-rendering:pixelated;" onerror="this.style.display=\'none\'">';
          html += name;
          html += '</span>';
        });
        html += '</div>';
      }
    }

    return html;
  }

  function updateSummary() {
    var el = document.getElementById('lts-status-summary');
    if (!el) return;

    var onlineCount = 0, totalPlayers = 0;
    servers.forEach(function(s) {
      var d = allData[s.id];
      if (d && d.online) {
        onlineCount++;
        if (d.players) totalPlayers += d.players.online || 0;
      }
    });

    el.innerHTML = '<div style="display:flex;align-items:center;gap:12px;flex-wrap:wrap;">' +
      '<span style="font-size:1.1em;font-weight:bold;color:#3a971e;">' + onlineCount + ' / ' + servers.length + ' 台在线</span>' +
      '<span style="font-size:0.95em;">共 ' + totalPlayers + ' 人在线</span>' +
      '<span style="margin-left:auto;font-size:0.8em;"><a href="/index.php/服务器信息">查看详情</a></span>' +
      '</div>';
  }

  function doFetch() {
    var firstEl = document.getElementById('lts-status-platform');
    if (!firstEl) return;

    servers.forEach(function(server) {
      var el = document.getElementById(server.id);
      if (!el) return;

      var addr = server.port ? server.address + ':' + server.port : server.address;
      fetch(API + addr)
        .then(function(r) { return r.json(); })
        .then(function(data) {
          allData[server.id] = data;
          el.innerHTML = buildCard(server, data);
          updateSummary();
        })
        .catch(function() {
          allData[server.id] = { online: false };
          el.innerHTML = '<div style="color:#bf3c2c;padding:4px 0;">查询失败</div>';
          updateSummary();
        });
    });
  }

  function start() {
    if (STARTED) return;
    var firstEl = document.getElementById('lts-status-platform');
    if (!firstEl) return;
    STARTED = true;
    console.log('[LTS] 找到容器,开始查询');
    doFetch();
    timer = setInterval(doFetch, 15000);
  }

  if (document.readyState === 'complete' || document.readyState === 'interactive') {
    start();
  } else {
    document.addEventListener('DOMContentLoaded', start);
  }

  mw.hook('wikipage.content').add(start);
})();