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

MediaWiki:Common.js:修订间差异

来自RA2DIY
无编辑摘要
无编辑摘要
第1行: 第1行:
/* 添加样式 */
// 处理<mco>标签的脚本
(function() {
(function() {
     var styles = [
     function escapeHtml(unsafe) {
        '.mco-ini-container { display: flex; }',
         return unsafe
         '.mco-ini-line:hover { background-color: #E8E8FF !important; }',
            .replace(/&/g, "&amp;")
        '.mco-ini-line-numbers {',
            .replace(/</g, "&lt;")
        '    background-color: #e4e4e4;',
            .replace(/>/g, "&gt;")
        '    color: black;',
            .replace(/"/g, "&quot;")
        '    width: 39px;',
            .replace(/'/g, "&#039;");
        '    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;


        // 创建容器
    function processMcoElements() {
         var $container = $('<div>').addClass('mco-ini-container');
         var mcoElements = document.getElementsByTagName('mco');
          
          
         // 添加行号
         Array.prototype.forEach.call(mcoElements, function(mco) {
        var $lineNumbers = $('<div>').addClass('mco-ini-line-numbers');
            var content = mco.textContent.trim();
        for (var i = 1; i <= codeBlockLines; i++) {
            var lines = content.split('\n');
            $lineNumbers.append($('<div>').text(i));
            var totalLines = lines.length;
        }
           
        $container.append($lineNumbers);
            // 创建容器
 
            var container = document.createElement('div');
        // 添加代码内容
            container.className = 'mco-container';
        var $codeBlock = $('<div>').addClass('mco-ini-code');
           
        lines.forEach(function(line) {
            // 添加行号列
             line = line.replace(/\r$/, '').trimRight();
            var lineNumberDiv = document.createElement('div');
            var $lineDiv = $('<div>').addClass('mco-ini-line');
            lineNumberDiv.className = 'line-number';
            for (var i = 1; i <= totalLines + 4; i++) {
                lineNumberDiv.innerHTML += '<div>' + i + '</div>';
            }
            container.appendChild(lineNumberDiv);
           
            // 添加代码块
            var codeBlock = document.createElement('div');
             codeBlock.className = 'code-block';
              
              
             if (line === '') {
             lines.forEach(function(line) {
                $lineDiv.html('<br>');
                var lineDiv = document.createElement('div');
            } else if (line.startsWith('[')) {
                lineDiv.className = 'line';
                $lineDiv.addClass('mco-ini-section').html('<b>' + line.escapeHTML() + '</b>');
                line = line.trimRight();
            } else if (line.startsWith(';')) {
               
                $lineDiv.html('<span class="mco-ini-comment">' + line.escapeHTML() + '</span>');
                if (line === '') {
            } else {
                    lineDiv.innerHTML = '<br>';
                var equalIdx = line.indexOf('=');
                } else if (line.startsWith('[')) {
                if (equalIdx !== -1) {
                    lineDiv.style.backgroundColor = '#F2F4FF';
                     var key = line.substr(0, equalIdx);
                    lineDiv.innerHTML = '<span style="color:#8000FF;font-weight:bold">' + escapeHtml(line) + '</span>';
                     var rest = line.substr(equalIdx + 1);
                } else if (line.startsWith(';')) {
                     var commentIdx = rest.indexOf(';');
                    lineDiv.innerHTML = '<span style="color:#008000">' + escapeHtml(line) + '</span>';
                    var value = commentIdx !== -1 ? rest.substr(0, commentIdx) : rest;
                } else if (line.includes('=')) {
                    var comment = commentIdx !== -1 ? rest.substr(commentIdx) : '';
                    var eqIndex = line.indexOf('=');
                     var key = escapeHtml(line.substring(0, eqIndex));
                     var rest = escapeHtml(line.substring(eqIndex + 1));
                     var semicolonIndex = rest.indexOf(';');
                      
                      
                     var html = '<span class="mco-ini-key">' + key.escapeHTML() + '</span>' +
                     if (semicolonIndex !== -1) {
                              '<span class="mco-ini-equal">=</span>' +
                        var value = rest.substring(0, semicolonIndex);
                              value.escapeHTML();
                        var comment = rest.substring(semicolonIndex);
                     if (comment) {
                        lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
                         html += '<span class="mco-ini-value-comment">' + comment.escapeHTML() + '</span>';
                            '<span style="color:#FF0000">=</span>' +
                            value +
                            '<span style="color:#006400">' + comment + '</span>';
                     } else {
                         lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
                            '<span style="color:#FF0000">=</span>' +
                            rest;
                     }
                     }
                    $lineDiv.html(html);
                 } else {
                 } else {
                     $lineDiv.text(line.escapeHTML());
                     lineDiv.textContent = line;
                 }
                 }
                codeBlock.appendChild(lineDiv);
            });
           
            // 添加空行
            for (var i = 0; i < totalLines + 3 - lines.length; i++) {
                var emptyLine = document.createElement('div');
                emptyLine.className = 'line';
                emptyLine.innerHTML = '<br>';
                codeBlock.appendChild(emptyLine);
             }
             }
             $codeBlock.append($lineDiv);
              
            container.appendChild(codeBlock);
            mco.parentNode.replaceChild(container, mco);
         });
         });
    }


        // 补充空行
    // 在页面加载时运行
        for (var i = totalLines; i < codeBlockLines; i++) {
    if (window.addEventListener) {
            $codeBlock.append($('<div>').addClass('mco-ini-line').html('<br>'));
        window.addEventListener('load', processMcoElements);
        }
    } else if (window.attachEvent) {
        $container.append($codeBlock);
         window.attachEvent('onload', processMcoElements);
 
    }
        // 替换原始元素
})();
        $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:28的版本

// 处理<mco>标签的脚本
(function() {
    function escapeHtml(unsafe) {
        return unsafe
            .replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;")
            .replace(/"/g, "&quot;")
            .replace(/'/g, "&#039;");
    }

    function processMcoElements() {
        var mcoElements = document.getElementsByTagName('mco');
        
        Array.prototype.forEach.call(mcoElements, function(mco) {
            var content = mco.textContent.trim();
            var lines = content.split('\n');
            var totalLines = lines.length;
            
            // 创建容器
            var container = document.createElement('div');
            container.className = 'mco-container';
            
            // 添加行号列
            var lineNumberDiv = document.createElement('div');
            lineNumberDiv.className = 'line-number';
            for (var i = 1; i <= totalLines + 4; i++) {
                lineNumberDiv.innerHTML += '<div>' + i + '</div>';
            }
            container.appendChild(lineNumberDiv);
            
            // 添加代码块
            var codeBlock = document.createElement('div');
            codeBlock.className = 'code-block';
            
            lines.forEach(function(line) {
                var lineDiv = document.createElement('div');
                lineDiv.className = 'line';
                line = line.trimRight();
                
                if (line === '') {
                    lineDiv.innerHTML = '<br>';
                } else if (line.startsWith('[')) {
                    lineDiv.style.backgroundColor = '#F2F4FF';
                    lineDiv.innerHTML = '<span style="color:#8000FF;font-weight:bold">' + escapeHtml(line) + '</span>';
                } else if (line.startsWith(';')) {
                    lineDiv.innerHTML = '<span style="color:#008000">' + escapeHtml(line) + '</span>';
                } else if (line.includes('=')) {
                    var eqIndex = line.indexOf('=');
                    var key = escapeHtml(line.substring(0, eqIndex));
                    var rest = escapeHtml(line.substring(eqIndex + 1));
                    var semicolonIndex = rest.indexOf(';');
                    
                    if (semicolonIndex !== -1) {
                        var value = rest.substring(0, semicolonIndex);
                        var comment = rest.substring(semicolonIndex);
                        lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
                            '<span style="color:#FF0000">=</span>' +
                            value +
                            '<span style="color:#006400">' + comment + '</span>';
                    } else {
                        lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
                            '<span style="color:#FF0000">=</span>' +
                            rest;
                    }
                } else {
                    lineDiv.textContent = line;
                }
                codeBlock.appendChild(lineDiv);
            });
            
            // 添加空行
            for (var i = 0; i < totalLines + 3 - lines.length; i++) {
                var emptyLine = document.createElement('div');
                emptyLine.className = 'line';
                emptyLine.innerHTML = '<br>';
                codeBlock.appendChild(emptyLine);
            }
            
            container.appendChild(codeBlock);
            mco.parentNode.replaceChild(container, mco);
        });
    }

    // 在页面加载时运行
    if (window.addEventListener) {
        window.addEventListener('load', processMcoElements);
    } else if (window.attachEvent) {
        window.attachEvent('onload', processMcoElements);
    }
})();