local p = {}
local Arguments = require('Module:Arguments')
local function getPageTitle()
return mw.title.getCurrentTitle().text
end
-- 入口:按序读取 prefixN名称 / prefixN,并生成 Tabs/part 展开
-- 参数(frame.args)说明(均为可选):
-- prefix = "换装" -- 前缀,默认 "换装"
-- num = N -- 显式指定要读取的数量(如果不提供,按遇到第一个缺失的 名称 停止)
-- max = 最大扫描上限(默认 200)
function p.main(frame)
frame = frame or mw.getCurrentFrame()
-- 用 Module:Arguments 读取参数(父模板参数也会被合并)
local args = Arguments.getArgs(frame, { parentFirst = true })
local prefix = args.prefix and args.prefix or "换装"
local max_scan = tonumber(args.max) or 200
-- 得到页面名的 Trim_prefix(PAGENAME)
local pageName = getPageTitle()
local role = frame:expandTemplate{ title = "Trim_prefix", args = { pageName } }
local out = {}
-- 决定循环次数:如果提供 num 则按 num,否则按遇到第一个缺失的名称停止
local explicit_num = tonumber(args.num)
local i = 1
while i <= max_scan do
if explicit_num and i > explicit_num then break end
local name_key = prefix .. tostring(i) .. "名称"
local val_key = prefix .. tostring(i)
local name = args[name_key] or ""
local val = args[val_key] or ""
if name == "" then
if not explicit_num then
-- 遇到第一个缺失的名称且未显式指定 num -> 停止循环
break
end
-- explicit_num 存在:跳过空项,但继续循环到 num
else
local bg = frame:expandTemplate{ title = "碧蓝航线人物背景", args = { [1] = role, [2] = val, [3] = name} }
local tabs = frame:expandTemplate{ title = "Tabs/part", args = { [1] = name, [2] = bg } }
if tabs == "" then
tabs = string.format('{{Tabs/part|%s|%s}}', name, bg)
end
table.insert(out, tabs)
end
i = i + 1
end
return table.concat(out)
end
return p