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)
new non-chatgpt player infobox
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)
Line 18: Line 7:
     local used = {} -- track which keys we’ve output
     local used = {} -- track which keys we’ve output
     local out = {}
     local out = {}
   
    local player_args = {
    {'t', args.username},
    {'s', 'About'},
    {'f', nationality, args.nationality},
    {'f', seasonjoined, args.seasonjoined},
    {'s', 'Socials'},
    {'f', discord, args.discord},
    }


     -- start the table
     local newFrame = {
    table.insert(out, '{| class="infobox" style="width:250px;"')
getParent = function()
    -- title row
return { args = player_args }
    if args.username and args.username ~= "" then
end
        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
end


return p
return p

Revision as of 19:37, 21 June 2025

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
    local used = {} -- track which keys we’ve output
    local out = {}
    
    local player_args = {
    	{'t', args.username},
    	{'s', 'About'},
    	{'f', nationality, args.nationality},
    	{'f', seasonjoined, args.seasonjoined},
    	{'s', 'Socials'},
    	{'f', discord, args.discord},
    }

    local newFrame = {
		getParent = function()
			return { args = player_args }
		end
	}
end

return p