打开/关闭菜单
228
885
35
2802
植物大战僵尸杂交版Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Common.js:修订间差异

MediaWiki界面页面
无编辑摘要
无编辑摘要
第43行: 第43行:
     if (mw.config.get('wgAction') !== 'view') return;
     if (mw.config.get('wgAction') !== 'view') return;


     // ★ 关键修改:同时选中正文链接和 Citizen 菜单卡片里的链接
     // 同时匹配正文链接 + Citizen 卡片内链接
     var $userlinks = $('a.mw-userlink, .citizen-menu_card-content a');
     var $userlinks = $('a.mw-userlink, .citizen-menu_card-content a');
     if ($userlinks.length === 0) return;
     if ($userlinks.length === 0) return;


    // 辅助函数:从链接元素中提取纯净用户名
    function getUserName(link) {
        var $span = $(link).find('span').first();
        if ($span.length) {
            return $span.text().trim();      // 卡片结构:取 span 里的名字
        }
        return $(link).text().trim();        // 标准链接:直接取全部文本
    }
    // 收集去重用户名
     var users = [];
     var users = [];
     $userlinks.each(function () {
     $userlinks.each(function () {
         var name = $(this).text().trim();
         var name = getUserName(this);
         if (name && users.indexOf(name) === -1) {
         if (name && users.indexOf(name) === -1) {
             users.push(name);
             users.push(name);
第56行: 第66行:
     if (users.length === 0) return;
     if (users.length === 0) return;


    // 分批查询
     var batchSize = 50;
     var batchSize = 50;
     var batches = [];
     var batches = [];
第87行: 第98行:
                 });
                 });
             }
             }
            // 应用类名(同样用纯净用户名匹配)
             $userlinks.each(function () {
             $userlinks.each(function () {
                 var $this = $(this);
                 var $this = $(this);
                 var userName = $this.text().trim();
                 var userName = getUserName(this);
                 var cls = classMap[userName];
                 var cls = classMap[userName];
                 if (cls) {
                 if (cls) {

2026年5月31日 (日) 06:46的版本

/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */

// 自动加载 MediaWiki:Footer 页面内容,并插入到每个页面底部

$(document).ready(function() {
    const namespace = mw.config.get('wgNamespaceNumber');
    const action = mw.config.get('wgAction');
    
    if (namespace !== 0 || action !== 'view') {
        return;
    }

    fetch("/api.php?action=parse&page=MediaWiki:Footer&format=json")
        .then(res => res.json())
        .then(data => {
            if (data.parse && data.parse.text) {
                const html = data.parse.text['*'];
                $('#mw-content-text').append('<div class="global-footer">' + html + '</div>');
            }
        });
});
$(function () {
    // 动态注入彩虹用户样式
    var rainbowStyle = document.createElement('style');
    rainbowStyle.textContent =
        '.rainbow-user {' +
            'font-weight: bold;' +
            'background: repeating-linear-gradient(90deg, red 0px, orange 10px, yellow 20px, green 30px, blue 40px, indigo 50px, violet 60px);' +
            '-webkit-background-clip: text;' +
            '-webkit-text-fill-color: transparent;' +
            'background-clip: text;' +
            'color: #FFD700;' +
        '}' +
        '.rainbow-user::after {' +
            'content: "⭐⭐⭐⭐⭐";' +
            'margin-left: 2px;' +
            'font-weight: normal;' +
            '-webkit-text-fill-color: initial;' +
            'color: #FFD700;' +
        '}';
    document.head.appendChild(rainbowStyle);

    if (mw.config.get('wgAction') !== 'view') return;

    // 同时匹配正文链接 + Citizen 卡片内链接
    var $userlinks = $('a.mw-userlink, .citizen-menu_card-content a');
    if ($userlinks.length === 0) return;

    // 辅助函数:从链接元素中提取纯净用户名
    function getUserName(link) {
        var $span = $(link).find('span').first();
        if ($span.length) {
            return $span.text().trim();       // 卡片结构:取 span 里的名字
        }
        return $(link).text().trim();         // 标准链接:直接取全部文本
    }

    // 收集去重用户名
    var users = [];
    $userlinks.each(function () {
        var name = getUserName(this);
        if (name && users.indexOf(name) === -1) {
            users.push(name);
        }
    });
    if (users.length === 0) return;

    // 分批查询
    var batchSize = 50;
    var batches = [];
    for (var i = 0; i < users.length; i += batchSize) {
        batches.push(users.slice(i, i + batchSize));
    }

    var processBatch = function (batch) {
        var api = new mw.Api();
        return api.get({
            action: 'query',
            list: 'users',
            ususers: batch.join('|'),
            usprop: 'editcount'
        }).then(function (data) {
            var classMap = {};
            if (data.query && data.query.users) {
                data.query.users.forEach(function (u) {
                    var ec = u.editcount || 0;
                    if (ec >= 5000) {
                        classMap[u.name] = 'rainbow-user';
                    } else if (ec >= 2000) {
                        classMap[u.name] = 'gold-user';
                    } else if (ec >= 1000) {
                        classMap[u.name] = 'platinum-user';
                    } else if (ec >= 500) {
                        classMap[u.name] = 'silver-user';
                    } else if (ec >= 1) {
                        classMap[u.name] = 'bronze-user';
                    }
                });
            }
            // 应用类名(同样用纯净用户名匹配)
            $userlinks.each(function () {
                var $this = $(this);
                var userName = getUserName(this);
                var cls = classMap[userName];
                if (cls) {
                    $this.removeClass('bronze-user silver-user platinum-user gold-user rainbow-user');
                    $this.addClass(cls);
                }
            });
        });
    };

    var promise = $.Deferred().resolve();
    batches.forEach(function (batch) {
        promise = promise.then(function () {
            return processBatch(batch);
        });
    });
});