七日内新公告:全站维护公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:技能倍率

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local getArgs = require('Module:Arguments').getArgs
local p = {}

function p.main(frame)
    local args = getArgs(frame, { removeBlanks = false })
    local text = args.text
    local labelTemplate = args.label or 'Lv.$'
    local valueStyle = args.valueStyle or ''

    -- 提取占位符名
    local placeholders = {}
    local placeholderSet = {}  -- 用于快速判断是否为占位符
    for placeholder in text:gmatch('{([^}]+)}') do
        table.insert(placeholders, placeholder)
        placeholderSet[placeholder] = true
    end

    -- 预解析所有占位符参数为列表
    local parsed = {}
    for _, ph in ipairs(placeholders) do
        parsed[ph] = {}
        for val in (args[ph] or ''):gmatch('[^,]+') do
            table.insert(parsed[ph], mw.text.trim(val))
        end
    end

    -- 假设所有占位符列表长度一致
    local tabCount = #parsed[placeholders[1]]

    -- 将参数传递给 Tabs 模板
    local tabArgs = {}
    for k, v in pairs(args) do
        -- 跳过本模块内部使用的参数
        if k ~= 'text' and k ~= 'label' and not placeholderSet[k] then
            tabArgs[k] = v
        end
    end

	-- 构建 Tabs
    for i = 1, tabCount do
        tabArgs['bt' .. i] = labelTemplate:gsub('%$', tostring(i))
        local outText = text
        for _, ph in ipairs(placeholders) do
            local safeVal = parsed[ph][i]:gsub('%%', '%%%%')  -- 将倍率中的 % 替换为 %%,避免被当做转义处理
            outText = outText:gsub('{' .. ph .. '}', '<span style="' .. valueStyle .. '">' .. safeVal .. '</span>')
        end
        tabArgs['tab' .. i] = outText
    end

    return frame:expandTemplate{ title = 'tabs', args = tabArgs }
end

return p