Module:Infobox Player
Appearance
Documentation for this module may be created at Module:Infobox Player/doc
local infobox = require('Module:Infobox')
local p = {}
local function humanLabel(key)
key = mw.ustring.gsub(key, "%-", " ")
return mw.ustring.upper(mw.ustring.sub(key,1,1))
.. mw.ustring.sub(key,2)
end
local sections = {
["Basic Information"] = { "season-joined", "nationality", "discord" },
}
function p.infobox(frame)
local args = frame:getParent().args
local used = {} -- mark which keys we've output
local outArgs = { title = args.username }
local rowCount = 0
local catCount = 0
for sectionName, keys in pairs(sections) do
local has = false
for _, k in ipairs(keys) do
if args[k] and args[k] ~= "" then has = true; break end
end
if has then
catCount = catCount + 1
outArgs["category" .. catCount] = sectionName
for _, k in ipairs(keys) do
local v = args[k]
if v and v ~= "" then
rowCount = rowCount + 1
outArgs["label" .. rowCount] = humanLabel(k)
outArgs["data" .. rowCount] = v
used[k] = true
end
end
end
end
-- gather any truly “extra” params
local extra = {}
for k, v in pairs(args) do
if k ~= "username"
and not used[k]
and not mw.ustring.match(k, "^category")
and v and v ~= ""
then
table.insert(extra, k)
end
end
if #extra > 0 then
catCount = catCount + 1
outArgs["category" .. catCount] = "Additional Data"
table.sort(extra)
for _, k in ipairs(extra) do
rowCount = rowCount + 1
outArgs["label" .. rowCount] = humanLabel(k)
outArgs["data" .. rowCount] = args[k]
end
end
outArgs.rows = rowCount
outArgs.categories = catCount
return infobox.infobox{
getParent = function() return { args = outArgs } end
}
end
return p