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

MediaWiki:Common.js

来自RA2DIY
九千天华留言 | 贡献2025年5月4日 (日) 20:00的版本 (创建页面,内容为“这里的任何JavaScript将为所有用户在每次页面加载时加载。:​ (function() { // HTML特殊字符转义函数 const escapeHtml = str => String(str).replace(/[&<>"']/g, m => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[m])); // INI语法高亮处理器 function highlightINI(preElement) { const rawContent = preElement.textContent; const container = document.createElement('…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
(function() {
    // HTML特殊字符转义函数
    const escapeHtml = str => String(str).replace(/[&<>"']/g, m => ({
        '&': '&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 => {
            line = line.trimRight();
            const escapedLine = escapeHtml(line);
            
            // 匹配节头 [section]
            if (/^\[.*?\]/.test(escapedLine)) {
                const section = escapedLine.match(/^\[(.*?)\]/)[1];
                container.innerHTML += `
                    <div class="ini-section">
                        <span class="bracket">[</span>
                        ${section}
                        <span class="bracket">]</span>
                    </div>`;
            
            // 匹配键值对 key=value
            } else if (escapedLine.includes('=')) {
                const [key, ...vals] = escapedLine.split('=');
                container.innerHTML += `
                    <div class="ini-line">
                        <span class="key">${key.trim()}</span>
                        <span class="equals">=</span>
                        <span class="value">${vals.join('=').trim()}</span>
                    </div>`;
            
            // 匹配注释 ;comment
            } else if (escapedLine.startsWith(';')) {
                container.innerHTML += `
                    <div class="ini-comment">
                        ${escapedLine}
                    </div>`;
            
            // 处理空行
            } else if (line === '') {
                container.innerHTML += '<div class="ini-empty"></div>';
            }
        });

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

    // 页面加载时自动执行
    document.addEventListener('DOMContentLoaded', () => {
        document.querySelectorAll('pre.ini-highlight').forEach(highlightINI);
    });
})();