Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
Revision as of 00:34, 25 January 2026 by Esportsamaze (talk | contribs) (Created page with "local p = {} local cargo = mw.ext.cargo local html = mw.html -- Helper to get Rank local function getKraftonRank(playerName) local tables = "Krafton_Rankings" local fields = "rank" local queryArgs = { where = "name = '" .. playerName .. "' AND type='Player'", limit = 1 } local results = cargo.query(tables, fields, queryArgs) if #results > 0 then return "#" .. results[1].rank else return "Unranked" end end...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

local p = {}
local cargo = mw.ext.cargo
local html = mw.html

-- Helper to get Rank
local function getKraftonRank(playerName)
    local tables = "Krafton_Rankings"
    local fields = "rank"
    local queryArgs = {
        where = "name = '" .. playerName .. "' AND type='Player'",
        limit = 1
    }
    local results = cargo.query(tables, fields, queryArgs)
    if #results > 0 then
        return "#" .. results[1].rank
    else
        return "Unranked"
    end
end

-- Helper to Build Rows
local function addRow(container, label, value)
    if value and value ~= "" then
        local row = container:tag('div'):addClass('infobox-row')
        row:tag('div'):addClass('infobox-label'):wikitext(label)
        row:tag('div'):addClass('infobox-data'):wikitext(value)
    end
end

-- MAIN 1: Player Infobox
function p.infobox(frame)
    local args = frame:getParent().args
    local pageName = mw.title.getCurrentTitle().text
    local id = args.id or pageName
    local image = args.image or ""
    
    local root = html.create('div'):addClass('infobox')
    
    -- Header
    root:tag('div'):addClass('infobox-header'):wikitext(id)
    
    -- Image
    if image ~= "" then
        root:tag('div'):addClass('infobox-image'):wikitext('[[File:' .. image .. '|200px]]')
    end
    
    -- Data Container
    local data = root:tag('div'):addClass('infobox-data-container')
    
    -- Basic Info
    addRow(data, "Real Name", args.real_name)
    addRow(data, "Nationality", args.nationality)
    addRow(data, "Born", args.birth_date)
    addRow(data, "Game", args.game)
    
    -- Team Info Header
    data:tag('div')
        :addClass('infobox-header')
        :css('font-size','1em')
        :css('margin-top','10px')
        :css('border-radius','6px')
        :wikitext('Team Info')
        
    if args.current_team then
        addRow(data, "Current Team", '[[' .. args.current_team .. ']]')
    end
    
    -- Status Logic
    if args.status then
        local color = "#333"
        local s = args.status:lower()
        if s == "active" then color = "green"
        elseif s == "inactive" or s == "banned" then color = "red" end
        
        local row = data:tag('div'):addClass('infobox-row')
        row:tag('div'):addClass('infobox-label'):wikitext("Status")
        row:tag('div'):addClass('infobox-data'):css('font-weight','bold'):css('color', color):wikitext(args.status)
    end
    
    -- Auto-Rank
    addRow(data, "Krafton Rank", getKraftonRank(id))
    addRow(data, "Role", args.role)
    
    -- History Section (Auto-Generated)
    data:tag('div')
        :addClass('infobox-header')
        :css('font-size','1em')
        :css('margin-top','10px')
        :css('border-radius','6px')
        :wikitext('History')
        
    local historyDiv = data:tag('div'):css('padding','5px 10px'):css('font-size','0.9em')
    
    -- Query Former Teams
    local hTables = "Player_Former_Teams"
    local hFields = "team, join_date, leave_date"
    local hArgs = {
        where = "player_id = '" .. pageName .. "'",
        orderBy = "join_date DESC",
        limit = 20
    }
    local history = cargo.query(hTables, hFields, hArgs)
    
    if #history > 0 then
        local tbl = historyDiv:tag('table'):css('width','100%'):css('border-collapse','collapse')
        for _, hRow in ipairs(history) do
            local tr = tbl:tag('tr'):css('border-bottom','1px solid var(--border-light)')
            tr:tag('td')
                :css('text-align','left'):css('font-weight','bold'):css('padding','4px 0')
                :wikitext('[[' .. hRow.team .. ']]')
            tr:tag('td')
                :css('text-align','right'):css('color','var(--text-muted)'):css('font-size','0.85em')
                :wikitext( (hRow.join_date and mw.getContentLanguage():formatDate('M Y', hRow.join_date) or '?') .. ' – ' .. (hRow.leave_date and mw.getContentLanguage():formatDate('M Y', hRow.leave_date) or 'Present') )
        end
    else
        historyDiv:css('text-align','center'):css('color','#888'):wikitext('No history recorded')
    end
    
    -- Social Media
    if args.instagram or args.youtube then
        data:tag('div'):addClass('infobox-header'):css('font-size','1em'):css('margin-top','10px'):css('border-radius','6px'):wikitext('Social Media')
        local socialRow = data:tag('div'):addClass('infobox-row'):css('justify-content','center'):css('gap','10px')
        if args.instagram then socialRow:wikitext('• [' .. args.instagram .. ' Instagram]') end
        if args.youtube then socialRow:wikitext('• [' .. args.youtube .. ' YouTube]') end
    end

    return tostring(root)
end

-- MAIN 2: Team Former Players Table
function p.formerPlayers(frame)
    local args = frame:getParent().args
    local team = args.team or mw.title.getCurrentTitle().text
    
    local tables = "Player_Former_Teams, Players"
    local join = "Player_Former_Teams.player_id = Players._pageName"
    local fields = "Player_Former_Teams.player_id=id, Players.real_name=Name, Player_Former_Teams.role=role, Player_Former_Teams.join_date=join_date, Player_Former_Teams.leave_date=leave_date"
    local queryArgs = {
        joinOn = join,
        where = "Player_Former_Teams.team = '" .. team .. "' AND Player_Former_Teams.leave_date != ''",
        orderBy = "Player_Former_Teams.leave_date DESC"
    }
    
    local results = cargo.query(tables, fields, queryArgs)
    
    local root = html.create('table'):addClass('wikitable sortable'):css('width','100%')
    local header = root:tag('tr')
    header:tag('th'):wikitext('ID')
    header:tag('th'):wikitext('Name')
    header:tag('th'):wikitext('Role')
    header:tag('th'):wikitext('Duration')
    
    if #results > 0 then
        for _, row in ipairs(results) do
            local tr = root:tag('tr')
            tr:tag('td'):css('font-weight','bold'):wikitext('[[' .. row.id .. ']]')
            tr:tag('td'):wikitext(row.Name)
            tr:tag('td'):wikitext(row.role)
            
            local joinStr = row.join_date and mw.getContentLanguage():formatDate('M Y', row.join_date) or '?'
            local leaveStr = row.leave_date and mw.getContentLanguage():formatDate('M Y', row.leave_date) or '?'
            tr:tag('td'):attr('data-sort-value', row.leave_date):wikitext(joinStr .. ' – ' .. leaveStr)
        end
    else
        return '<div style="font-style:italic; color:var(--text-muted);">No former players found for this team.</div>'
    end
    
    return tostring(root)
end

return p