打开/关闭搜索
搜索
打开/关闭菜单
5
11
4
216
柠檬树 Wiki
导航
首页
最近更改
随机页面
MediaWiki帮助
上传文件
打开/关闭外观设置菜单
notifications
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
查看“︁MediaWiki:Citizen.js”︁的源代码
MediaWiki界面页面
查看
阅读
查看源代码
查看历史
associated-pages
系统消息
讨论
更多操作
←
MediaWiki:Citizen.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
/* 服务器状态查询 - 柠檬树服务器 */ 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); })(); /* === 售票亭统计 === */ $(function() { if (mw.config.get('wgPageName') !== '售票亭') return; var $stats = $('#ticket-stats'); if (!$stats.length) return; var p = 0, f = 0, d = ''; $('#mw-content-text h3, #mw-content-text h4').each(function() { var m = $(this).text().match(/(\d+月\d+日)\s*发车/); if (!m) return; if (!d) d = m[1]; var $tbl = $(this).nextAll('table').first(); if (!$tbl.length) $tbl = $(this).parent().nextAll('table').first(); if (!$tbl.length) return; var txt = $tbl.text(); p += (txt.match(/\[.+?\]/g) || []).length; f += (txt.match(/未能登车/g) || []).length; }); $stats.html('🎫 已发放车票 <strong>' + p + '</strong> 张 | ✗ 未能登车 <strong>' + f + '</strong> 人 | 📅 最近更新 <strong>' + d + '</strong>'); }); /* === 首页左右栏对齐 === */ $(function() { if (mw.config.get('wgPageName') !== '首页') return; function equalizeColumns() { var $left = $('.mp-left'); var $right = $('.mp-right'); if (!$left.length || !$right.length) return; // Let CSS handle it naturally first $left.css('min-height', ''); $right.css('min-height', ''); // Use requestAnimationFrame to let layout settle requestAnimationFrame(function() { var leftBottom = $left[0].getBoundingClientRect().bottom; var rightBottom = $right[0].getBoundingClientRect().bottom; if (leftBottom > rightBottom) { // Right column shorter - stretch 联系我们 to match var diff = leftBottom - rightBottom; var $lastRight = $right.children().last(); var currentFlex = $lastRight.css('flex-grow') || '0'; // Already has flex:1, just ensure container fills $right.css('min-height', ($right.height() + diff) + 'px'); } }); } // Run on load equalizeColumns(); // Watch for server status DOM changes and re-equalize var statusEl = document.getElementById('lts-status-summary'); if (statusEl) { var observer = new MutationObserver(function() { equalizeColumns(); }); observer.observe(statusEl, { childList: true, subtree: true, characterData: true }); } // Also re-run on window resize $(window).on('resize', equalizeColumns); });
返回
MediaWiki:Citizen.js
。
查看“︁MediaWiki:Citizen.js”︁的源代码
MediaWiki界面页面