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

MediaWiki:Common.js:修订间差异

来自RA2DIY
创建页面,内容为“这里的任何JavaScript将为所有用户在每次页面加载时加载。:​ (function() { // HTML特殊字符转义函数 const escapeHtml = str => String(str).replace(/[&<>"']/g, m => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[m])); // INI语法高亮处理器 function highlightINI(preElement) { const rawContent = preElement.textContent; const container = document.createElement('…”
 
无编辑摘要
 
(未显示同一用户的8个中间版本)
第1行: 第1行:
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
(function() {
(function() {
     // HTML特殊字符转义函数
     // 仅在内容页面运行
     const escapeHtml = str => String(str).replace(/[&<>"']/g, m => ({
     if (mw.config.get('wgNamespaceNumber') === 0 && mw.config.get('wgAction') === 'view') {
        '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;'
        var pageTitle = mw.config.get('wgPageName');
    }[m]));
        var apiUrl = mw.util.wikiScript('api');
        var maxDisplayUsers = 3; // 直接显示的最大用户数
        var creditsLink = mw.util.getUrl(pageTitle, { action: 'credits' });


    // INI语法高亮处理器
        // 获取修订历史
    function highlightINI(preElement) {
        $.getJSON(apiUrl, {
        const rawContent = preElement.textContent;
            format: 'json',
        const container = document.createElement('div');
            action: 'query',
        container.className = 'ini-container';
            prop: 'revisions',
       
            rvprop: 'timestamp|user',
         rawContent.split('\n').forEach(line => {
            rvlimit: 50,
             line = line.trimRight();
            titles: pageTitle,
             const escapedLine = escapeHtml(line);
            rvdir: 'newer' // 从旧到新排序
           
         }, function(data) {
             // 匹配节头 [section]
             var revisions = data.query.pages[0].revisions;
             if (/^\[.*?\]/.test(escapedLine)) {
             if (!revisions) return;
                const section = escapedLine.match(/^\[(.*?)\]/)[1];
 
                container.innerHTML += `
             // 处理修订数据
                    <div class="ini-section">
            var editors = [];
                        <span class="bracket">[</span>
             revisions.forEach(function(rev) {
                        ${section}
                if (rev.user && !editors.includes(rev.user)) {
                        <span class="bracket">]</span>
                    editors.unshift(rev.user); // 倒序插入保持最新在前
                    </div>`;
                }
              
            });
             // 匹配键值对 key=value
 
             } else if (escapedLine.includes('=')) {
            if (editors.length === 0) return;
                 const [key, ...vals] = escapedLine.split('=');
 
                 container.innerHTML += `
            // 提取最后编辑信息
                    <div class="ini-line">
            var lastRev = revisions[revisions.length - 1];
                        <span class="key">${key.trim()}</span>
            var lastUser = lastRev.user;
                        <span class="equals">=</span>
            var lastDate = new Date(lastRev.timestamp);
                        <span class="value">${vals.join('=').trim()}</span>
            var formattedDate = lastDate.toLocaleDateString('en-GB', {
                     </div>`;
                day: 'numeric',
           
                month: 'long',
            // 匹配注释 ;comment
                year: 'numeric'
             } else if (escapedLine.startsWith(';')) {
            });
                 container.innerHTML += `
            var formattedTime = lastDate.toLocaleTimeString('en-GB', {
                    <div class="ini-comment">
                hour: '2-digit',
                        ${escapedLine}
                minute: '2-digit'
                    </div>`;
            });
           
 
             // 处理空行
            // 构建用户列表
             } else if (line === '') {
            var displayedUsers = editors.slice(0, maxDisplayUsers);
                 container.innerHTML += '<div class="ini-empty"></div>';
             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);
             }
             }
         });
         });
        // 替换原始pre元素
        preElement.replaceWith(container);
     }
     }
 
});
    // 页面加载时自动执行
    document.addEventListener('DOMContentLoaded', () => {
        document.querySelectorAll('pre.ini-highlight').forEach(highlightINI);
    });
})();

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);
            }
        });
    }
});