MediaWiki:Common.js:修订间差异

MediaWiki界面页面
小无编辑摘要
标签:已被回退
无编辑摘要
标签:手工回退
第36行: 第36行:
     } else {
     } else {
         setTimeout( run, 1500 );
         setTimeout( run, 1500 );
    }
} )();
/* =====================================================
  首页深色模式适配
  首页大量使用内联硬编码颜色,深色模式下不会自动翻转。
  运行时把内联颜色替换为 CSS 变量,让主题自动切换。
  ===================================================== */
( function () {
    function getPageName() {
        if ( window.mw && mw.config ) return mw.config.get( 'wgPageName' );
        return null;
    }
    function replaceColors() {
        var nodes = document.querySelectorAll( '[style]' );
        /* 顺序很重要:先处理组合属性,再处理单个颜色 */
        var map = [
            /* 主要信息标题栏:作为背景的 #111827 必须最先处理 */
            [ /background(?:-color)?\s*:\s*#111827\b/gi, 'background:var(--xh-header-bar-bg)' ],
            /* 背景色 */
            [ /#ffffff\b/gi,  'var(--xh-card-bg)' ],
            [ /#fbfefe\b/gi,  'var(--xh-card-bg-soft)' ],
            [ /#f3f4f6\b/gi,  'var(--xh-cover-bg)' ],
            /* 边框色 */
            [ /#e5e7eb\b/gi,  'var(--xh-border)' ],
            [ /#f0f0f0\b/gi,  'var(--xh-border-inner)' ],
            /* 文字色(#111827 剩下的都是文字,因为背景已在上面单独处理) */
            [ /#111827\b/gi,  'var(--xh-text-strong)' ],
            [ /#4b5563\b/gi,  'var(--xh-text)' ],
            [ /#6b7280\b/gi,  'var(--xh-text-soft)' ],
            [ /#9ca3af\b/gi,  'var(--xh-text-faint)' ]
        ];
        for ( var i = 0; i < nodes.length; i++ ) {
            var el = nodes[ i ];
            var s = el.getAttribute( 'style' );
            if ( !s ) continue;
            var changed = false;
            for ( var j = 0; j < map.length; j++ ) {
                var re = map[ j ][ 0 ];
                re.lastIndex = 0;
                if ( re.test( s ) ) {
                    re.lastIndex = 0;
                    s = s.replace( re, map[ j ][ 1 ] );
                    changed = true;
                }
            }
            if ( changed ) el.setAttribute( 'style', s );
        }
    }
    function init() {
        if ( getPageName() !== '首页' ) return;
        replaceColors();
    }
    if ( document.readyState === 'loading' ) {
        document.addEventListener( 'DOMContentLoaded', init );
    } else {
        init();
     }
     }
} )();
} )();

2026年9月24日 (四) 00:04的版本

( function () {
    function run() {
        var el = document.getElementById( 'xh-server-status' );
        if ( !el ) return;

        var ctrl = new AbortController();
        var timer = setTimeout( function () { ctrl.abort(); }, 6000 );

        fetch( 'https://api.mcsrvstat.us/3/game.xhcity.top', {
            signal: ctrl.signal,
            cache: 'no-store'
        } )
            .then( function ( r ) {
                clearTimeout( timer );
                if ( !r.ok ) throw new Error( r.status );
                return r.json();
            } )
            .then( function ( data ) {
                if ( data.online ) {
                    var online = data.players ? data.players.online : 0;
                    var max = data.players ? data.players.max : '?';
                    el.innerHTML = '<span style="color:#17b3a8; font-weight:700;">● 服务器运行中</span>' +
                        ' &nbsp;·&nbsp; 在线人数:<b style="color:#111827;">' + online + '</b> / ' + max;
                } else {
                    el.innerHTML = '<span style="color:#d22; font-weight:700;">● 服务器已离线</span>';
                }
            } )
            .catch( function () {
                el.innerHTML = '<span style="color:#9ca3af;">● 状态暂时无法获取</span>';
            } );
    }

    /* 等首屏空闲后再请求,避免和页面渲染抢资源 */
    if ( 'requestIdleCallback' in window ) {
        requestIdleCallback( run, { timeout: 3000 } );
    } else {
        setTimeout( run, 1500 );
    }
} )();