跳转到内容
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('…”
 
无编辑摘要
第1行: 第1行:
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
(function() {
(function() {
    // HTML特殊字符转义函数
     function processPreBlocks() {
    const escapeHtml = str => String(str).replace(/[&<>"']/g, m => ({
         var preElements = document.querySelectorAll('pre');
        '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;'
    }[m]));
 
    // INI语法高亮处理器
     function highlightINI(preElement) {
         const rawContent = preElement.textContent;
        const container = document.createElement('div');
        container.className = 'ini-container';
          
          
         rawContent.split('\n').forEach(line => {
         preElements.forEach(function(pre) {
            line = line.trimRight();
            var rawContent = pre.textContent;
             const escapedLine = escapeHtml(line);
            var lines = rawContent.split('\n').filter(l => l !== '');
             var totalLines = lines.length;
              
              
             // 匹配节头 [section]
             // 创建容器
             if (/^\[.*?\]/.test(escapedLine)) {
             var container = document.createElement('div');
                const section = escapedLine.match(/^\[(.*?)\]/)[1];
            container.style.display = 'flex';
                container.innerHTML += `
                    <div class="ini-section">
                        <span class="bracket">[</span>
                        ${section}
                        <span class="bracket">]</span>
                    </div>`;
              
              
             // 匹配键值对 key=value
             // 添加行号列
             } else if (escapedLine.includes('=')) {
             var lineNumberCol = document.createElement('div');
                const [key, ...vals] = escapedLine.split('=');
            lineNumberCol.className = 'line-number';
                container.innerHTML += `
            for (var i = 1; i <= totalLines + 4; i++) {
                    <div class="ini-line">
                var lineNum = document.createElement('div');
                        <span class="key">${key.trim()}</span>
                lineNum.textContent = i;
                        <span class="equals">=</span>
                lineNumberCol.appendChild(lineNum);
                        <span class="value">${vals.join('=').trim()}</span>
            }
                    </div>`;
              
              
             // 匹配注释 ;comment
             // 添加代码内容
             } else if (escapedLine.startsWith(';')) {
            var codeContent = document.createElement('div');
                 container.innerHTML += `
            codeContent.className = 'code-block';
                    <div class="ini-comment">
             lines.forEach(function(line) {
                        ${escapedLine}
                var lineDiv = document.createElement('div');
                    </div>`;
                lineDiv.className = 'line';
               
                // 处理不同行类型
                if (line.startsWith('[')) {
                    lineDiv.className += ' line-command';
                    lineDiv.innerHTML = line.replace(/\[(.*?)\]/g, '<b>$&</b>');
                } else if (line.startsWith(';')) {
                    lineDiv.className += ' line-comment';
                    lineDiv.textContent = line;
                 } else if (line.includes('=')) {
                    var parts = line.split('=');
                    var key = parts.shift();
                    var rest = parts.join('=');
                   
                    lineDiv.innerHTML = [
                        '<span class="line-key">' + key + '</span>',
                        '<span class="line-equal">=</span>',
                        rest.replace(/;(.*)/, '<span class="line-value-comment">;$1</span>')
                    ].join('');
                } else {
                    lineDiv.textContent = line;
                }
                codeContent.appendChild(lineDiv);
            });
              
              
             // 处理空行
             // 添加额外空行
             } else if (line === '') {
             for (var i = 0; i < 4; i++) {
                 container.innerHTML += '<div class="ini-empty"></div>';
                var emptyLine = document.createElement('div');
                emptyLine.className = 'line';
                 emptyLine.innerHTML = '&nbsp;';
                codeContent.appendChild(emptyLine);
             }
             }
           
            // 组合元素
            container.appendChild(lineNumberCol);
            container.appendChild(codeContent);
           
            // 替换原始pre元素
            pre.parentNode.replaceChild(container, pre);
         });
         });
    }


        // 替换原始pre元素
    // 在页面加载完成后执行
         preElement.replaceWith(container);
    if (window.addEventListener) {
        window.addEventListener('load', processPreBlocks);
    } else if (window.attachEvent) {
         window.attachEvent('onload', processPreBlocks);
     }
     }
    // 页面加载时自动执行
    document.addEventListener('DOMContentLoaded', () => {
        document.querySelectorAll('pre.ini-highlight').forEach(highlightINI);
    });
})();
})();

2025年5月4日 (日) 20:08的版本

/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
(function() {
    function processPreBlocks() {
        var preElements = document.querySelectorAll('pre');
        
        preElements.forEach(function(pre) {
            var rawContent = pre.textContent;
            var lines = rawContent.split('\n').filter(l => l !== '');
            var totalLines = lines.length;
            
            // 创建容器
            var container = document.createElement('div');
            container.style.display = 'flex';
            
            // 添加行号列
            var lineNumberCol = document.createElement('div');
            lineNumberCol.className = 'line-number';
            for (var i = 1; i <= totalLines + 4; i++) {
                var lineNum = document.createElement('div');
                lineNum.textContent = i;
                lineNumberCol.appendChild(lineNum);
            }
            
            // 添加代码内容
            var codeContent = document.createElement('div');
            codeContent.className = 'code-block';
            lines.forEach(function(line) {
                var lineDiv = document.createElement('div');
                lineDiv.className = 'line';
                
                // 处理不同行类型
                if (line.startsWith('[')) {
                    lineDiv.className += ' line-command';
                    lineDiv.innerHTML = line.replace(/\[(.*?)\]/g, '<b>$&</b>');
                } else if (line.startsWith(';')) {
                    lineDiv.className += ' line-comment';
                    lineDiv.textContent = line;
                } else if (line.includes('=')) {
                    var parts = line.split('=');
                    var key = parts.shift();
                    var rest = parts.join('=');
                    
                    lineDiv.innerHTML = [
                        '<span class="line-key">' + key + '</span>',
                        '<span class="line-equal">=</span>',
                        rest.replace(/;(.*)/, '<span class="line-value-comment">;$1</span>')
                    ].join('');
                } else {
                    lineDiv.textContent = line;
                }
                codeContent.appendChild(lineDiv);
            });
            
            // 添加额外空行
            for (var i = 0; i < 4; i++) {
                var emptyLine = document.createElement('div');
                emptyLine.className = 'line';
                emptyLine.innerHTML = '&nbsp;';
                codeContent.appendChild(emptyLine);
            }
            
            // 组合元素
            container.appendChild(lineNumberCol);
            container.appendChild(codeContent);
            
            // 替换原始pre元素
            pre.parentNode.replaceChild(container, pre);
        });
    }

    // 在页面加载完成后执行
    if (window.addEventListener) {
        window.addEventListener('load', processPreBlocks);
    } else if (window.attachEvent) {
        window.attachEvent('onload', processPreBlocks);
    }
})();