模块:ExampleTable

Raxter留言 | 贡献2025年10月16日 (四) 09:15的版本

此模块的文档可以在模块:ExampleTable/doc创建

local p = {}
local getArgs = require('Module:Arguments').getArgs

function p.main(frame)
    local args = getArgs(frame)
    
    -- 获取输入和输出参数
    local input = args[1] or ""
    local output = args[2]
    
    -- 如果 output 未提供,则移除左侧的 <nowiki> 标签并渲染内容
    if not output then
        -- 检查输入是否包含 <nowiki> 标签
        local has_nowiki = input:match("</?nowiki>")
        
        if has_nowiki then
            -- 移除 <nowiki> 标签并渲染内容
            local nowiki_content = input:gsub("</?nowiki>", "")
            output = frame:preprocess(nowiki_content)
        else
            -- 如果输入没有 <nowiki> 标签,则直接使用输入作为输出
            output = input
        end
    end
    
    -- 清理输出中的多余空格和换行
    output = output:gsub("\n+", "\n"):gsub("^%s*(.-)%s*$", "%1")
    
    -- 创建表格HTML
    local tableHtml = mw.html.create('table')
        :addClass('wikitable')
        :tag('tr')
            :tag('th')
                :css('width', '50%')
                :wikitext('输入')
            :done()
            :tag('th')
                :css('width', '50%')
                :wikitext('输出')
            :done()
        :done()
        :tag('tr')
            :tag('td')
                :css({
                    ['vertical-align'] = 'middle',
                    width = '50%'
                })
                :tag('pre')
                    :css('white-space', 'pre-wrap')
                    :wikitext(input)  -- 左侧显示原始输入(包括 <nowiki> 标签)
                :done()
            :done()
            :tag('td')
                :css({
                    ['vertical-align'] = 'middle',
                    width = '50%'
                })
                :wikitext(output)  -- 右侧显示输出内容
            :done()
        :done()
    
    return tostring(tableHtml)
end

return p