跳转到内容
RA2DIY-WIKI 当前处于维护模式:页面上的内容随时可能发生更改且不会事先告知。

MediaWiki:Common.js:修订间差异

来自RA2DIY
无编辑摘要
无编辑摘要
 
(未显示同一用户的6个中间版本)
第1行: 第1行:
/* 添加样式 */
(function() {
(function() {
     var styles = [
     // 仅在内容页面运行
        '.mco-ini-container { display: flex; }',
    if (mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wgAction') === 'view') {
        '.mco-ini-line:hover { background-color: #E8E8FF !important; }',
         var pageTitle = mw.config.get('wgPageName');
        '.mco-ini-line-numbers {',
         var apiUrl = mw.util.wikiScript('api');
        '    background-color: #e4e4e4;',
        var maxDisplayUsers = 3; // 直接显示的最大用户数
        '    color: black;',
        var creditsLink = mw.util.getUrl(pageTitle, { action: 'credits' });
        '    width: 39px;',
        '    text-align: right;',
        '    padding-right: 5px;',
        '    font-family: Consolas, monospace;',
        '    line-height: 1.2;',
        '}',
        '.mco-ini-code {',
         '    font-family: "Courier New", monospace;',
        '    background-color: #f8f9fa;',
        '    color: #000;',
        '    border: 1px solid #eaecf0;',
        '    padding: 1em;',
        '    overflow-x: hidden;',
        '    line-height: 1.2;',
        '    white-space: pre-wrap;',
        '}',
        '.mco-ini-section { background-color: #F2F4FF; }',
        '.mco-ini-section b { color: #8000FF; }',
         '.mco-ini-comment { color: #008000; }',
        '.mco-ini-key { color: #0000ff; font-style: italic; }',
        '.mco-ini-equal { color: #ff0000; }',
        '.mco-ini-value-comment { color: #006400; }'
    ].join('\n');
   
    var styleTag = document.createElement('style');
    styleTag.textContent = styles;
    document.head.appendChild(styleTag);
})();


/* 处理内容 */
        // 获取修订历史
window.processMcoIniBlocks = function() {
        $.getJSON(apiUrl, {
    $('.mco-ini-content').each(function() {
            format: 'json',
        var $pre = $(this);
            action: 'query',
        var content = $pre.text().trim();
            prop: 'revisions',
        var lines = content.split('\n');
            rvprop: 'timestamp|user',
        var totalLines = lines.length;
            rvlimit: 50,
        var codeBlockLines = totalLines + 4;
            titles: pageTitle,
            rvdir: 'newer' // 从旧到新排序
        }, function(data) {
            var revisions = data.query.pages[0].revisions;
            if (!revisions) return;


        // 创建容器
            // 处理修订数据
        var $container = $('<div>').addClass('mco-ini-container');
            var editors = [];
       
            revisions.forEach(function(rev) {
        // 添加行号
                if (rev.user && !editors.includes(rev.user)) {
        var $lineNumbers = $('<div>').addClass('mco-ini-line-numbers');
                    editors.unshift(rev.user); // 倒序插入保持最新在前
        for (var i = 1; i <= codeBlockLines; i++) {
                }
            $lineNumbers.append($('<div>').text(i));
            });
        }
 
        $container.append($lineNumbers);
            if (editors.length === 0) return;
 
            // 提取最后编辑信息
            var lastRev = revisions[revisions.length - 1];
            var lastUser = lastRev.user;
            var lastDate = new Date(lastRev.timestamp);
            var formattedDate = lastDate.toLocaleDateString('en-GB', {
                day: 'numeric',
                month: 'long',
                year: 'numeric'
            });
            var formattedTime = lastDate.toLocaleTimeString('en-GB', {
                hour: '2-digit',
                minute: '2-digit'
            });
 
            // 构建用户列表
            var displayedUsers = editors.slice(0, maxDisplayUsers);
            var otherUsers = editors.slice(maxDisplayUsers);
            var userList = [];


        // 添加代码内容
            if (displayedUsers.length > 1) {
        var $codeBlock = $('<div>').addClass('mco-ini-code');
                var lastUser = displayedUsers.pop();
        lines.forEach(function(line) {
                 userList.push(
            line = line.replace(/\r$/, '').trimRight();
                    displayedUsers.join(', '),
            var $lineDiv = $('<div>').addClass('mco-ini-line');
                    ' and ' + lastUser
           
                 );
            if (line === '') {
                 $lineDiv.html('<br>');
            } else if (line.startsWith('[')) {
                $lineDiv.addClass('mco-ini-section').html('<b>' + line.escapeHTML() + '</b>');
            } else if (line.startsWith(';')) {
                 $lineDiv.html('<span class="mco-ini-comment">' + line.escapeHTML() + '</span>');
             } else {
             } else {
                 var equalIdx = line.indexOf('=');
                 userList.push(displayedUsers[0]);
                if (equalIdx !== -1) {
                    var key = line.substr(0, equalIdx);
                    var rest = line.substr(equalIdx + 1);
                    var commentIdx = rest.indexOf(';');
                    var value = commentIdx !== -1 ? rest.substr(0, commentIdx) : rest;
                    var comment = commentIdx !== -1 ? rest.substr(commentIdx) : '';
                   
                    var html = '<span class="mco-ini-key">' + key.escapeHTML() + '</span>' +
                              '<span class="mco-ini-equal">=</span>' +
                              value.escapeHTML();
                    if (comment) {
                        html += '<span class="mco-ini-value-comment">' + comment.escapeHTML() + '</span>';
                    }
                    $lineDiv.html(html);
                } else {
                    $lineDiv.text(line.escapeHTML());
                }
             }
             }
            $codeBlock.append($lineDiv);
        });


        // 补充空行
            // 构建完整文本
        for (var i = totalLines; i < codeBlockLines; i++) {
            var creditText = document.createElement('div');
            $codeBlock.append($('<div>').addClass('mco-ini-line').html('<br>'));
            creditText.className = 'page-credits';
        }
            creditText.innerHTML = 'This page was last edited ' +
        $container.append($codeBlock);
                formattedTime + ', ' + formattedDate +
                ' by ' + mw.config.get('wgSiteName') + ' user ' + lastUser +
                '. Based on work by ';


        // 替换原始元素
            if (otherUsers.length > 0) {
        $pre.replaceWith($container);
                var creditLink = document.createElement('a');
    });
                creditLink.href = creditsLink;
};
                creditLink.textContent = 'others';
               
                var usersSpan = document.createElement('span');
                usersSpan.innerHTML = userList.join('') +
                    (otherUsers.length > 0 ? ', ' : '') +
                    creditLink.outerHTML;
               
                creditText.appendChild(usersSpan);
            } else {
                creditText.innerHTML += userList.join('');
            }


/* HTML转义 */
            // 插入到页面底部
window.escapeHTML = function(str) {
            var footer = document.getElementById('footer-info');
    return str.toString()
            if (footer) {
        .replace(/&/g, '&amp;')
                footer.appendChild(creditText);
        .replace(/</g, '&lt;')
            }
        .replace(/>/g, '&gt;')
        });
        .replace(/"/g, '&quot;')
     }
        .replace(/'/g, '&#39;');
};
 
/* 页面加载后执行 */
$(document).ready(function() {
     processMcoIniBlocks();
});
});

2025年8月1日 (五) 21:28的最新版本

(function() {
    // 仅在内容页面运行
    if (mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wgAction') === 'view') {
        var pageTitle = mw.config.get('wgPageName');
        var apiUrl = mw.util.wikiScript('api');
        var maxDisplayUsers = 3; // 直接显示的最大用户数
        var creditsLink = mw.util.getUrl(pageTitle, { action: 'credits' });

        // 获取修订历史
        $.getJSON(apiUrl, {
            format: 'json',
            action: 'query',
            prop: 'revisions',
            rvprop: 'timestamp|user',
            rvlimit: 50,
            titles: pageTitle,
            rvdir: 'newer' // 从旧到新排序
        }, function(data) {
            var revisions = data.query.pages[0].revisions;
            if (!revisions) return;

            // 处理修订数据
            var editors = [];
            revisions.forEach(function(rev) {
                if (rev.user && !editors.includes(rev.user)) {
                    editors.unshift(rev.user); // 倒序插入保持最新在前
                }
            });

            if (editors.length === 0) return;

            // 提取最后编辑信息
            var lastRev = revisions[revisions.length - 1];
            var lastUser = lastRev.user;
            var lastDate = new Date(lastRev.timestamp);
            var formattedDate = lastDate.toLocaleDateString('en-GB', {
                day: 'numeric',
                month: 'long',
                year: 'numeric'
            });
            var formattedTime = lastDate.toLocaleTimeString('en-GB', {
                hour: '2-digit',
                minute: '2-digit'
            });

            // 构建用户列表
            var displayedUsers = editors.slice(0, maxDisplayUsers);
            var otherUsers = editors.slice(maxDisplayUsers);
            var userList = [];

            if (displayedUsers.length > 1) {
                var lastUser = displayedUsers.pop();
                userList.push(
                    displayedUsers.join(', '),
                    ' and ' + lastUser
                );
            } else {
                userList.push(displayedUsers[0]);
            }

            // 构建完整文本
            var creditText = document.createElement('div');
            creditText.className = 'page-credits';
            creditText.innerHTML = 'This page was last edited ' +
                formattedTime + ', ' + formattedDate + 
                ' by ' + mw.config.get('wgSiteName') + ' user ' + lastUser + 
                '. Based on work by ';

            if (otherUsers.length > 0) {
                var creditLink = document.createElement('a');
                creditLink.href = creditsLink;
                creditLink.textContent = 'others';
                
                var usersSpan = document.createElement('span');
                usersSpan.innerHTML = userList.join('') + 
                    (otherUsers.length > 0 ? ', ' : '') + 
                    creditLink.outerHTML;
                
                creditText.appendChild(usersSpan);
            } else {
                creditText.innerHTML += userList.join('');
            }

            // 插入到页面底部
            var footer = document.getElementById('footer-info');
            if (footer) {
                footer.appendChild(creditText);
            }
        });
    }
});