模块:Utils:修订间差异
来自Mindustry中文wiki
无编辑摘要 |
Mdtwikibot(留言 | 贡献) (MDTWikiTools #843: publish [b18fe9d2f9c0bc73]) |
||
| (未显示1个用户的22个中间版本) | |||
| 第44行: | 第44行: | ||
end | end | ||
if #cells == 0 then return "no arg" end | if #cells == 0 then return "no arg" end | ||
-- | -- 目标表容器 | ||
return '<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">目标列表 <span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n! 目标 !! 注释\n|-\n| ' .. table.concat(cells, '\n|-\n| ') .. '\n|}\n</div>\n</div>' | return '<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">目标列表 <span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n! 目标 !! 注释\n|-\n| ' .. table.concat(cells, '\n|-\n| ') .. '\n|}\n</div>\n</div>\n</div>' | ||
end | end | ||
-- 波次列表:支持中英文分隔符,校验单位映射后生成链接 | |||
function p.renderWaves(frame) | function p.renderWaves(frame) | ||
local args = frame.args | local args = frame.args | ||
| 第55行: | 第56行: | ||
local waves = {} | local waves = {} | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
local num = key:match("^波次(%d+)$") | local num = tostring(key):match("^波次(%d+)$") | ||
if num then | if num then | ||
waves[tonumber(num)] = value | waves[tonumber(num)] = value | ||
end | end | ||
end | end | ||
-- | -- 保持与区块页相同的布局容器 | ||
local result = '<div class="mdtLayout mdtLight mdtWrapRail">\n<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">波次列表<span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n' | local result = '<div class="mdtLayout mdtLight mdtWrapRail">\n<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">波次列表<span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n' | ||
-- 开始遍历波次内容 | -- 开始遍历波次内容 | ||
| 第70行: | 第71行: | ||
if waveText == nil then break end | if waveText == nil then break end | ||
waveText = waveText:gsub(",", ","):gsub("、", ","):gsub(";", ","):gsub(";", ","):gsub("×", "*") | |||
local parts = {} | local parts = {} | ||
for item in string.gmatch(waveText, "[^, | for item in string.gmatch(waveText, "[^,]+") | ||
do | do | ||
local name, count = string.match(item, "(. | local name, count = string.match(item, "^%s*(.-)%s*[%*xX]%s*(%d+)%s*$") | ||
if name and tonumber(count) > 0 then | |||
-- 去除首尾空格 | -- 去除首尾空格 | ||
name = name:gsub("^%s*(.-)%s*$", "%1") | name = name:gsub("^%s*(.-)%s*$", "%1") | ||
| 第79行: | 第82行: | ||
-- 配图标 | -- 配图标 | ||
local icon = picture._lookup(name) | local icon = picture._lookup(name) | ||
table.insert(parts,count.."x"..'[[File:'..icon..'.png|18px|link='..name..']]'..'[['..name..']]') | if icon ~= 'ohno' then | ||
table.insert(parts,count.."x"..'[[File:'..icon..'.png|18px|link='..name..']]'..'[['..name..']]') | |||
else | |||
table.insert(parts, '<span style="color:red;">未知单位: ' .. mw.text.nowiki(name) .. '</span>') | |||
end | |||
else | |||
table.insert(parts, '<span style="color:red;">格式错误: ' .. mw.text.nowiki(item) .. '</span>') | |||
end | |||
end | end | ||
local partsStr = table.concat(parts," || ") | local partsStr = table.concat(parts," || ") | ||
| 第85行: | 第95行: | ||
i = i + 1 | i = i + 1 | ||
end | end | ||
local chunksStr = table.concat(chunks,'\n|-') | local chunksStr = table.concat(chunks,'\n|-\n') | ||
return result..chunksStr..'\n|}\n</div>\n</div>' | return result..chunksStr..'\n|}\n</div>\n</div>\n</div>\n</div>' | ||
end | end | ||
return p | return p | ||
2026年10月17日 (六) 15:07的最新版本
用途
供区块页面显示目标和波次列表。
renderGoals
命名参数“是否启用目标栏”非空时显示;顺序参数以目标、注释成对传入。
renderWaves
命名参数“是否启用波次栏”非空时显示。使用波次1、波次2等连续编号;缺少一个编号时停止读取。单组格式为单位名称*数量,各组可用英文逗号、中文逗号、顿号或分号分隔,乘号也接受 ×、x、X。
{{#invoke:Utils|renderWaves|是否启用波次栏=是|波次1=尖刀*1,星辉*2|波次2=尖刀×3}}
未知名称或格式错误显示提示,不创建伪词条链接。数量为正整数。
-- 引入Picture模块
local picture = require('Module:Picture')
local p = {}
-- 辅助函数:去除字符串尾部的所有空白字符(空格、换行、回车等)
local function trimTrailing(str)
if str then
return str:gsub("%s+$", "")
end
return str
end
-- 条件函数,用法:{{#invoke:utils|ifeq|条件|为真输出|为假输出}}
function p.ifeq(frame)
local cond = frame.args[1] or ''
if cond ~= '' then
return frame.args[2]
else
return frame.args[3]
end
end
-- 一个用来打表的函数,会自动适配内容数量,用法:{{#invoke:utils|renderGoals|是否显示(有值为是,空则为否)|目标1|注释1|...}}
function p.renderGoals(frame)
local args = frame.args
local cells = {}
-- if判断是否输出目标栏
if not args["是否启用目标栏"] or args["是否启用目标栏"] == "" then return "" end
local i = 1
while true do
local val1 = args[i]
if val1 == nil then break end
val1 = trimTrailing(val1)
i = i + 1
local val2 = args[i]
if val2 == nil then break end
val2 = trimTrailing(val2)
table.insert(cells,val1.." || "..val2)
i = i + 1
end
if #cells == 0 then return "no arg" end
-- 目标表容器
return '<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">目标列表 <span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n! 目标 !! 注释\n|-\n| ' .. table.concat(cells, '\n|-\n| ') .. '\n|}\n</div>\n</div>\n</div>'
end
-- 波次列表:支持中英文分隔符,校验单位映射后生成链接
function p.renderWaves(frame)
local args = frame.args
if not args["是否启用波次栏"] or args["是否启用波次栏"] == "" then return "" end
local waves = {}
for key, value in pairs(args) do
local num = tostring(key):match("^波次(%d+)$")
if num then
waves[tonumber(num)] = value
end
end
-- 保持与区块页相同的布局容器
local result = '<div class="mdtLayout mdtLight mdtWrapRail">\n<div class="mdtMain">\n<div class="mdtHome">\n<div class="mdtPanel mdtHomeSection">\n<h2 class="mdtFoldHeading" style="margin:0 0 8px 0;">波次列表<span class="mdtFold"></span></h2>\n{| class="mdtSideTable"\n'
-- 开始遍历波次内容
local i = 1
local chunks = {}
while true
do
local waveText = waves[i]
if waveText == nil then break end
waveText = waveText:gsub(",", ","):gsub("、", ","):gsub(";", ","):gsub(";", ","):gsub("×", "*")
local parts = {}
for item in string.gmatch(waveText, "[^,]+")
do
local name, count = string.match(item, "^%s*(.-)%s*[%*xX]%s*(%d+)%s*$")
if name and tonumber(count) > 0 then
-- 去除首尾空格
name = name:gsub("^%s*(.-)%s*$", "%1")
count = count:gsub("^%s*(.-)%s*$", "%1")
-- 配图标
local icon = picture._lookup(name)
if icon ~= 'ohno' then
table.insert(parts,count.."x"..'[[File:'..icon..'.png|18px|link='..name..']]'..'[['..name..']]')
else
table.insert(parts, '<span style="color:red;">未知单位: ' .. mw.text.nowiki(name) .. '</span>')
end
else
table.insert(parts, '<span style="color:red;">格式错误: ' .. mw.text.nowiki(item) .. '</span>')
end
end
local partsStr = table.concat(parts," || ")
table.insert(chunks,'! rowspan="1" | 波次'..i..'\n|'..partsStr)
i = i + 1
end
local chunksStr = table.concat(chunks,'\n|-\n')
return result..chunksStr..'\n|}\n</div>\n</div>\n</div>\n</div>'
end
return p
