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

MediaWiki:Common.js:修订间差异

MediaWiki界面页面
无编辑摘要
标签已被回退
无编辑摘要
标签已被回退
第134行: 第134行:
     }, 1000);
     }, 1000);
});
});
// ================== 编辑数排行榜 ==================
// ================== 编辑数排行榜(自动版) ==================
$(function () {
$(function () {
    // 只在特定页面生效(把 '排行榜' 改成你实际创建的页面名)
    if (mw.config.get('wgPageName') !== '排行榜') return;
     var $container = $('#edit-count-leaderboard');
     var $container = $('#edit-count-leaderboard');
     if (!$container.length) return;
     if (!$container.length) return; // 任何包含此 div 的页面都会触发
 
    $container.html('排行榜加载中……');


     // 获取前 N 名用户(编辑数降序)
     $container.text('排行榜加载中……');
    var TOP_N = 50; // 想显示前多少名在这里改


     var api = new mw.Api();
     var api = new mw.Api();
第153行: 第147行:
         auprop: 'editcount',
         auprop: 'editcount',
         ausort: 'editcount',
         ausort: 'editcount',
         audit: 'desc',       // 降序排列
         audit: 'desc',
         aulimit: TOP_N
         aulimit: 50 // 前50名,可自行修改
     }).then(function (data) {
     }).then(function (data) {
         var users = data.query.allusers || [];
         var users = data.query.allusers || [];
         if (users.length === 0) {
         if (users.length === 0) {
             $container.html('暂无数据。');
             $container.text('暂无数据。');
             return;
             return;
         }
         }


        // 构建表格
         var html = '<table class="wikitable sortable" style="width:100%;"><tr><th>排名</th><th>用户</th><th>编辑数</th></tr>';
         var html = '<table class="wikitable sortable" style="width:100%;">';
        html += '<tr><th>排名</th><th>用户</th><th>编辑数</th></tr>';
 
         users.forEach(function (user, index) {
         users.forEach(function (user, index) {
             var rank = index + 1;
             var rank = index + 1;
             var name = user.name;
             var name = user.name;
             var editcount = user.editcount || 0;
             var editcount = user.editcount || 0;
            // 生成用户页链接(和普通链接一样)
             var userUrl = mw.util.getUrl('User:' + name);
             var userLink = mw.util.getUrl('User:' + name);
             html += '<tr><td>' + rank + '</td><td><a href="' + userUrl + '" class="mw-userlink">' + name + '</a></td><td>' + editcount + '</td></tr>';
             html += '<tr>';
            html += '<td>' + rank + '</td>';
            html += '<td><a href="' + userLink + '" class="mw-userlink" title="User:' + name + '">' + name + '</a></td>';
            html += '<td>' + editcount + '</td>';
            html += '</tr>';
         });
         });
         html += '</table>';
         html += '</table>';
         $container.html(html);
         $container.html(html);
     }).fail(function () {
     }).fail(function (err) {
         $container.html('排行榜获取失败,请稍后再试。');
         $container.text('排行榜获取失败,请稍后再试。');
        console.error('排行榜API错误:', err);
     });
     });
});
});

2026年5月31日 (日) 07:37的版本

/* 这里的任何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);

    // 辅助函数:提取纯净用户名
    function getUserName(link) {
        var $span = $(link).find('span').first();
        if ($span.length) return $span.text().trim();
        return $(link).text().trim();
    }

    // 核心:给链接上色
    function colorizeLinks($links) {
        if ($links.length === 0) return;

        // 过滤出还没上色的链接(避免重复请求)
        var $fresh = $links.filter(function () {
            var cls = $(this).attr('class') || '';
            return !/(bronze-user|silver-user|platinum-user|gold-user|rainbow-user)/.test(cls);
        });
        if ($fresh.length === 0) return;

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

        // 分批查询API
        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';
                    });
                }
                // 应用颜色类
                $fresh.each(function () {
                    var $this = $(this);
                    var name = getUserName(this);
                    var cls = classMap[name];
                    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);
            });
        });
    }

    // 全页面用户链接选择器(正文 + 可能存在的卡片容器)
    var linkSelector = 'a.mw-userlink, .citizen-menu_card-content a, .citizen-userMenu a';

    // 1. 初始扫描
    colorizeLinks($(linkSelector));

    // 2. MutationObserver 监听 DOM 变化(处理动态插入的节点)
    var observer = new MutationObserver(function () {
        colorizeLinks($(linkSelector));
    });
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // 3. 定时器兜底(每秒检查一次,确保万无一失)
    setInterval(function () {
        colorizeLinks($(linkSelector));
    }, 1000);
});
// ================== 编辑数排行榜(自动版) ==================
$(function () {
    var $container = $('#edit-count-leaderboard');
    if (!$container.length) return; // 任何包含此 div 的页面都会触发

    $container.text('排行榜加载中……');

    var api = new mw.Api();
    api.get({
        action: 'query',
        list: 'allusers',
        auprop: 'editcount',
        ausort: 'editcount',
        audit: 'desc',
        aulimit: 50 // 前50名,可自行修改
    }).then(function (data) {
        var users = data.query.allusers || [];
        if (users.length === 0) {
            $container.text('暂无数据。');
            return;
        }

        var html = '<table class="wikitable sortable" style="width:100%;"><tr><th>排名</th><th>用户</th><th>编辑数</th></tr>';
        users.forEach(function (user, index) {
            var rank = index + 1;
            var name = user.name;
            var editcount = user.editcount || 0;
            var userUrl = mw.util.getUrl('User:' + name);
            html += '<tr><td>' + rank + '</td><td><a href="' + userUrl + '" class="mw-userlink">' + name + '</a></td><td>' + editcount + '</td></tr>';
        });
        html += '</table>';
        $container.html(html);
    }).fail(function (err) {
        $container.text('排行榜获取失败,请稍后再试。');
        console.error('排行榜API错误:', err);
    });
});