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

MediaWiki:Common.js

来自RA2DIY
九千天华留言 | 贡献2025年5月4日 (日) 20:28的版本

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
// 处理<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);
    }
})();