Jump to content

📢 Please make sure to read our Style Guide before editing. For questions, suggestions, or technical issues, please contact Noah.

Module:Infobox Player: Difference between revisions

From CrabCraft Wiki
Revert to 18:11, 21 June 2025 (store categories in lua script)
Adds player stats to infobox
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local p = {}
local p = {}


local function humanLabel(name)
local infobox = require("Module:Infobox")
    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)
function p.infobox(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     local used = {} -- track which keys we’ve output
     -- Determine which identifier to use for the head image: prefer UUID if provided
     local out = {}
     local head_id = args.uuid and args.uuid ~= '' and args.uuid or args.username
 
    -- 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
     local player_args = {
         addHeader("Additional Data")
         {'t',      args.username},
         table.sort(extra)
        {'i',      'https://mc-heads.net/player/' .. head_id .. '/110.png'},
         for _, k in ipairs(extra) do
        {'s',      'Biography'},
            addRow(k)
        {'f',      'Username',      args.username},
        end
        {'f',      'Alias',          args.alias},
     end
        {'f',      'Season Joined',  args.seasonjoined},
        {'f',      'Nationality',    args.nationality},
        {'f',      'Discord',        args.discord},
        {'s',      'Personality'},
        {'f',      'Quote',          args.quote},
        {'f',      'Favourite Item',  args.favouriteitem},
        {'f',      'Favourite Block', args.favouriteblock},
        {'s',      'Government'},
        {'f',      'Minister Role',  args.ministerrole},
        {'f',      'Assumed Office',  args.assumedoffice},
         {'f',      'Preceded By',    args.precededby},
         {'s',      'Links'},
        {'f', 'Player Stats', args.uuid and args.uuid ~= '' and ('[https://www.crabcraft.net/stats/' .. args.uuid .. ' Link]') or nil},
     }


     -- close up
     return infobox.infobox {
    table.insert(out, '|}')
        getParent = function() return { args = player_args } end
     return table.concat(out, "\n")
     }
end
end


return p
return p

Latest revision as of 21:14, 30 March 2026

Documentation for this module may be created at Module:Infobox Player/doc

local p = {}

local infobox = require("Module:Infobox")

function p.infobox(frame)
    local args = frame:getParent().args
    -- Determine which identifier to use for the head image: prefer UUID if provided
    local head_id = args.uuid and args.uuid ~= '' and args.uuid or args.username

    local player_args = {
        {'t',       args.username},
        {'i',       'https://mc-heads.net/player/' .. head_id .. '/110.png'},
        {'s',       'Biography'},
        {'f',       'Username',       args.username},
        {'f',       'Alias',          args.alias},
        {'f',       'Season Joined',  args.seasonjoined},
        {'f',       'Nationality',     args.nationality},
        {'f',       'Discord',        args.discord},
        {'s',       'Personality'},
        {'f',       'Quote',           args.quote},
        {'f',       'Favourite Item',  args.favouriteitem},
        {'f',       'Favourite Block', args.favouriteblock},
        {'s',       'Government'},
        {'f',       'Minister Role',   args.ministerrole},
        {'f',       'Assumed Office',  args.assumedoffice},
        {'f',       'Preceded By',     args.precededby},
        {'s',       'Links'},
        {'f', 'Player Stats', args.uuid and args.uuid ~= '' and ('[https://www.crabcraft.net/stats/' .. args.uuid .. ' Link]') or nil},
    }

    return infobox.infobox {
        getParent = function() return { args = player_args } end
    }
end

return p