Module:Infobox Player
Appearance
Documentation for this module may be created at Module:Infobox Player/doc
local p = {}
local function humanLabel(name)
local s = mw.ustring.gsub(name, "%-", " ")
return mw.ustring.upper(mw.ustring.sub(s,1,1)) .. mw.ustring.sub(s,2)
end
local sections = {
["Basic Information"] = {
"season-joined",
"nationality",
"discord",
},
}
function p.infobox(frame)
local args = frame:getParent().args
local used = {} -- track which keys we’ve output
local out = {}
-- start the table
table.insert(out, '{| class="infobox" style="width:250px;"')
-- title row
if args.username and args.username ~= "" then
table.insert(out, '|-\n! colspan="2" style="font-size:120%; background:#ccc;" | ' .. args.username)
end
-- helper to output a section header
local function addHeader(text)
table.insert(out, '|-\n! colspan="2" style="background:#F4BB44;" | ' .. text)
end
-- helper to output one row
local function addRow(key)
local val = args[key]
if val and val ~= "" then
table.insert(out, '|-\n| ' .. humanLabel(key) .. ' || ' .. val)
used[key] = true
end
end
-- first, emit all fixed sections in order
for section, keys in pairs(sections) do
-- check if any of those keys exist
local has = false
for _, k in ipairs(keys) do
if args[k] and args[k] ~= "" then
has = true; break
end
end
if has then
addHeader(section)
for _, k in ipairs(keys) do
addRow(k)
end
end
end
-- gather anything the user passed that’s not in 'sections' or 'username'
local extra = {}
for key, val in pairs(args) do
if key ~= 'username' and val and val ~= '' and not used[key] then
table.insert(extra, key)
end
end
if #extra > 0 then
addHeader("Additional Data")
table.sort(extra)
for _, k in ipairs(extra) do
addRow(k)
end
end
-- close up
table.insert(out, '|}')
return table.concat(out, "\n")
end
return p