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

MediaWiki:Common.js:修订间差异

来自RA2DIY
无编辑摘要
无编辑摘要
第1行: 第1行:
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 添加样式 */
(function() {
(function() {
     function processPreBlocks() {
     var styles = [
         var preElements = document.querySelectorAll('pre');
        '.mco-ini-container { display: flex; }',
        '.mco-ini-line:hover { background-color: #E8E8FF !important; }',
        '.mco-ini-line-numbers {',
        '    background-color: #e4e4e4;',
        '    color: black;',
        '    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() {
    $('.mco-ini-content').each(function() {
         var $pre = $(this);
        var content = $pre.text().trim();
        var lines = content.split('\n');
        var totalLines = lines.length;
        var codeBlockLines = totalLines + 4;
 
        // 创建容器
        var $container = $('<div>').addClass('mco-ini-container');
          
          
         preElements.forEach(function(pre) {
         // 添加行号
            var rawContent = pre.textContent;
        var $lineNumbers = $('<div>').addClass('mco-ini-line-numbers');
            var lines = rawContent.split('\n').filter(l => l !== '');
        for (var i = 1; i <= codeBlockLines; i++) {
            var totalLines = lines.length;
             $lineNumbers.append($('<div>').text(i));
              
        }
            // 创建容器
        $container.append($lineNumbers);
            var container = document.createElement('div');
 
            container.style.display = 'flex';
        // 添加代码内容
           
        var $codeBlock = $('<div>').addClass('mco-ini-code');
            // 添加行号列
        lines.forEach(function(line) {
            var lineNumberCol = document.createElement('div');
            line = line.replace(/\r$/, '').trimRight();
            lineNumberCol.className = 'line-number';
            var $lineDiv = $('<div>').addClass('mco-ini-line');
            for (var i = 1; i <= totalLines + 4; i++) {
                var lineNum = document.createElement('div');
                lineNum.textContent = i;
                lineNumberCol.appendChild(lineNum);
            }
              
              
             // 添加代码内容
             if (line === '') {
            var codeContent = document.createElement('div');
                 $lineDiv.html('<br>');
            codeContent.className = 'code-block';
            } else if (line.startsWith('[')) {
            lines.forEach(function(line) {
                $lineDiv.addClass('mco-ini-section').html('<b>' + line.escapeHTML() + '</b>');
                 var lineDiv = document.createElement('div');
            } else if (line.startsWith(';')) {
                lineDiv.className = 'line';
                $lineDiv.html('<span class="mco-ini-comment">' + line.escapeHTML() + '</span>');
               
            } else {
                // 处理不同行类型
                var equalIdx = line.indexOf('=');
                if (line.startsWith('[')) {
                if (equalIdx !== -1) {
                    lineDiv.className += ' line-command';
                     var key = line.substr(0, equalIdx);
                    lineDiv.innerHTML = line.replace(/\[(.*?)\]/g, '<b>$&</b>');
                    var rest = line.substr(equalIdx + 1);
                } else if (line.startsWith(';')) {
                    var commentIdx = rest.indexOf(';');
                    lineDiv.className += ' line-comment';
                     var value = commentIdx !== -1 ? rest.substr(0, commentIdx) : rest;
                    lineDiv.textContent = line;
                     var comment = commentIdx !== -1 ? rest.substr(commentIdx) : '';
                } else if (line.includes('=')) {
                     var parts = line.split('=');
                     var key = parts.shift();
                     var rest = parts.join('=');
                      
                      
                     lineDiv.innerHTML = [
                     var html = '<span class="mco-ini-key">' + key.escapeHTML() + '</span>' +
                        '<span class="line-key">' + key + '</span>',
                              '<span class="mco-ini-equal">=</span>' +
                        '<span class="line-equal">=</span>',
                              value.escapeHTML();
                        rest.replace(/;(.*)/, '<span class="line-value-comment">;$1</span>')
                    if (comment) {
                     ].join('');
                        html += '<span class="mco-ini-value-comment">' + comment.escapeHTML() + '</span>';
                    }
                     $lineDiv.html(html);
                 } else {
                 } else {
                     lineDiv.textContent = line;
                     $lineDiv.text(line.escapeHTML());
                 }
                 }
                codeContent.appendChild(lineDiv);
            });
           
            // 添加额外空行
            for (var i = 0; i < 4; i++) {
                var emptyLine = document.createElement('div');
                emptyLine.className = 'line';
                emptyLine.innerHTML = '&nbsp;';
                codeContent.appendChild(emptyLine);
             }
             }
              
             $codeBlock.append($lineDiv);
            // 组合元素
            container.appendChild(lineNumberCol);
            container.appendChild(codeContent);
           
            // 替换原始pre元素
            pre.parentNode.replaceChild(container, pre);
         });
         });
    }


    // 在页面加载完成后执行
        // 补充空行
    if (window.addEventListener) {
        for (var i = totalLines; i < codeBlockLines; i++) {
        window.addEventListener('load', processPreBlocks);
            $codeBlock.append($('<div>').addClass('mco-ini-line').html('<br>'));
     } else if (window.attachEvent) {
        }
         window.attachEvent('onload', processPreBlocks);
        $container.append($codeBlock);
    }
 
})();
        // 替换原始元素
        $pre.replaceWith($container);
     });
};
 
/* HTML转义 */
window.escapeHTML = function(str) {
    return str.toString()
        .replace(/&/g, '&amp;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
         .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;');
};
 
/* 页面加载后执行 */
$(document).ready(function() {
    processMcoIniBlocks();
});

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

/* 添加样式 */
(function() {
    var styles = [
        '.mco-ini-container { display: flex; }',
        '.mco-ini-line:hover { background-color: #E8E8FF !important; }',
        '.mco-ini-line-numbers {',
        '    background-color: #e4e4e4;',
        '    color: black;',
        '    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() {
    $('.mco-ini-content').each(function() {
        var $pre = $(this);
        var content = $pre.text().trim();
        var lines = content.split('\n');
        var totalLines = lines.length;
        var codeBlockLines = totalLines + 4;

        // 创建容器
        var $container = $('<div>').addClass('mco-ini-container');
        
        // 添加行号
        var $lineNumbers = $('<div>').addClass('mco-ini-line-numbers');
        for (var i = 1; i <= codeBlockLines; i++) {
            $lineNumbers.append($('<div>').text(i));
        }
        $container.append($lineNumbers);

        // 添加代码内容
        var $codeBlock = $('<div>').addClass('mco-ini-code');
        lines.forEach(function(line) {
            line = line.replace(/\r$/, '').trimRight();
            var $lineDiv = $('<div>').addClass('mco-ini-line');
            
            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 {
                var equalIdx = line.indexOf('=');
                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++) {
            $codeBlock.append($('<div>').addClass('mco-ini-line').html('<br>'));
        }
        $container.append($codeBlock);

        // 替换原始元素
        $pre.replaceWith($container);
    });
};

/* HTML转义 */
window.escapeHTML = function(str) {
    return str.toString()
        .replace(/&/g, '&amp;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;');
};

/* 页面加载后执行 */
$(document).ready(function() {
    processMcoIniBlocks();
});