Module:Infobox person: Difference between revisions

From TwogPedia
(Created page with "local getArgs = require('Module:Arguments').getArgs local Links = require('Module:Links') local Header = require('Module:Infobox/Widget/Header') local Subheader = require('Module:Infobox/Widget/Subheader') local LinksWidget = require('Module:Infobox/Widget/Links') local ListWidget = require('Module:Infobox/Widget/List') local LocationWidget = require('Module:Infobox/Widget/Location') local RowWidget = require('Module:Infobox/Widget/Row') local RoleWidget = require('Modul...")
 
No edit summary
 
(20 intermediate revisions by one other user not shown)
Line 6: Line 6:
local ListWidget = require('Module:Infobox/Widget/List')
local ListWidget = require('Module:Infobox/Widget/List')
local LocationWidget = require('Module:Infobox/Widget/Location')
local LocationWidget = require('Module:Infobox/Widget/Location')
local SponsorsWidget = require('Module:Infobox/Widget/Sponsors')
local RowWidget = require('Module:Infobox/Widget/Row')
local RowWidget = require('Module:Infobox/Widget/Row')
local RoleWidget = require('Module:Infobox/Widget/Role')
local RoleWidget = require('Module:Infobox/Widget/Role')
local stringifyDate = require('Module:Functions').stringifyDate
local stringifyDate = require('Module:Functions').stringifyDate
local convertRole = require('Module:GameRoles').convertRole
local Tournaments = require('Module:Infobox/Widget/Tournaments').get
local cargo = mw.ext.cargo


local Infobox = {}
local Infobox = {}


function Infobox.main(frame)
function Infobox.main(frame)
local args = getArgs(frame)
    local args = getArgs(frame)


local headerNode = Header.make(args.title or mw.title.getCurrentTitle(), args.image or '')
    -- local headerNode = Header.make(args.title or mw.title.getCurrentTitle(), args.image)
   
local container = mw.html.create('div')
    local headerNode = Header.make(
:addClass('ib')
        args.title or mw.title.getCurrentTitle(),  
        args.image,  
container:node(headerNode):node(Subheader.make('Player Information'))
        nil,
        nil,
if args.name then
        args.nationality,
container:node(RowWidget.make('Name', args.name))
        args.romanized
end
    )
if args.romanized then
container:node(RowWidget.make('Romanized name', args.romanized))
end
if args.nationality then
local category
if args.team then
category = mw.text.split(args.team, '/')[1] .. '/Players'
else
category = 'Players'
end
container:node(RowWidget.make('Nationality', LocationWidget.make(args.nationality, nil, category)))
end
if args.birthdate then
container:node(RowWidget.make('Birthdate', stringifyDate(args.birthdate)))
end
-- add one for "signature" as in signature characters played
if args.team then
container:node(RowWidget.make('Team', args.team, frame))
end


if args.active_player then
    local container = mw.html.create('div')
container:node(RowWidget.make('Active as a Player', args.active_player))
        :addClass('ib grid-infobox')
end
 
if args.active_coach then
    local titleContainer = mw.html.create('div')
container:node(RowWidget.make('Active as a Coach', args.active_coach))
        :addClass('carousel-image-container')
end
        :node(headerNode)
if args.active_manager then
 
container:node(RowWidget.make('Active as a Manager', args.active_manager))
    container:node(titleContainer)
end
 
if args.active_talent then
    local infoContainer = mw.html.create('div')
container:node(RowWidget.make('Active as a Talent', args.active_talent))
        :addClass('info-container grid')
end
 
    if args.name then
        infoContainer:node(RowWidget.make('Name', args.name))
if args.role then
    end
container:node(RowWidget.make('Role', args.role))
 
end
    if args.romanized then
        infoContainer:node(RowWidget.make('Nickname', args.romanized))
if args.alternativeid then
    end
container:node(RowWidget.make('Alternative IDs', args.alternativeid))
 
end
    if args.nationality then
        local category
        if args.team then
if args.nicknames then  
            category = mw.text.split(args.team, '/')[1] .. '/Players'
container:node(RowWidget.make('Nicknames', args.nicknames))
        else
end
            category = 'Players'
        end
if args.sponsors then
        infoContainer:node(RowWidget.make('Nationality', LocationWidget.make(args.nationality, nil, category)))
container:node(RowWidget.make('Sponsors', ListWidget.make(args.sponsors)))
    end
end
 
    if args.birthdate then
container:node(Subheader.make('Links'))
        infoContainer:node(RowWidget.make('Birthdate', stringifyDate(args.birthdate)))
    end
-- Check if there is a "links" argument and then do magic to add them all to arguments
 
if args.links then
    local transferResults = {}
local splitLinks = mw.text.split(args.links, ',')
    if not args.team or not args.game_role then
for i = 1, #splitLinks do
        local tables = 'Transfers'
local split = mw.text.split(splitLinks[i], '=')
        local fields = '_pageName, position'
args[split[1]] = split[2]
        local cargoArgs = {
end
            where = 'id= "' .. mw.title.getCurrentTitle().text .. '" AND leavedate IS NULL AND inactivedate IS NULL'
end
        }
        transferResults = cargo.query(tables, fields, cargoArgs)   
local transformedLinks = Links.transform(args)
    end
local fullLinks = LinksWidget.make(transformedLinks, 'team')
 
    if not args.team and #transferResults == 0 then
container:node(fullLinks)
        local tables = 'Org_transfers'
return container
        local fields = '_pageName, position'
        local cargoArgs = {
            where = 'id= "' .. mw.title.getCurrentTitle().text .. '" AND leavedate IS NULL AND inactivedate IS NULL'
        }
        orgTransferResults = cargo.query(tables, fields, cargoArgs)
 
        if #orgTransferResults > 0 then
            infoContainer:node(RowWidget.make('Org', orgTransferResults[1]._pageName, frame))
            infoContainer:node(RowWidget.make('Org role', orgTransferResults[1].position))
        end
    end
 
    local teamResults = {}
    if args.team or #transferResults > 0 then
        local tables = 'Teams'
        local fields = '_pageName, region'
        local team = args.team or transferResults[1]._pageName
        local cargoArgs = {
            where = '_pageName = "' .. team .. '" AND region IS NOT NULL AND region != ""'
        }
        teamResults = cargo.query(tables, fields, cargoArgs)
    end
 
    if args.team then
        if #teamResults > 0 then
            infoContainer:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(args.team, '/')[1] .. '/Teams')))
        end
        infoContainer:node(RowWidget.make('Team', args.team, frame))
    else
        if #teamResults > 0 then
            infoContainer:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(teamResults[1]._pageName, '/')[1] .. '/Teams')))
        end
        if #transferResults > 0 then
            infoContainer:node(RowWidget.make('Team', transferResults[1]._pageName, frame))
        end
    end
 
    if args.game_role then
        infoContainer:node(RowWidget.make('Role', args.game_role))
    else
        if #transferResults > 0 then
            infoContainer:node(RowWidget.make('Role in team', convertRole(mw.text.split(transferResults[1]._pageName, '/')[1], transferResults[1].position)))
        elseif args.active_roles then
            local roleSplit = mw.text.split(args.active_roles, ',')
            local plural = #roleSplit > 1 and 's' or ''
            infoContainer:node(RowWidget.make('Active role' .. plural, ListWidget.make(args.active_roles)))
        end
    end
 
    if args.past_roles then
        local roleSplit = mw.text.split(args.past_roles, ',')
        local plural = #roleSplit > 1 and 's' or ''
        infoContainer:node(RowWidget.make('Past role' .. plural, ListWidget.make(args.past_roles)))
    end
 
    if args.active_player then
        infoContainer:node(RowWidget.make('Active as a Player', args.active_player))
    end
    if args.active_coach then
        infoContainer:node(RowWidget.make('Active as a Coach', args.active_coach))
    end
    if args.active_analyst then
        infoContainer:node(RowWidget.make('Active as an Analyst', args.active_analyst))
    end
    if args.active_manager then
        infoContainer:node(RowWidget.make('Active as a Manager', args.active_manager))
    end
    if args.active_talent then
        infoContainer:node(RowWidget.make('Active as a Talent', args.active_talent))
    end
    if args.active_production then
        infoContainer:node(RowWidget.make('Active in Production', args.active_production))
    end
   
    if args.alternativeid then
        infoContainer:node(RowWidget.make('Alternative IDs', args.alternativeid))
    end
   
    if args.sponsors then
        infoContainer:node(RowWidget.make('Sponsors', SponsorsWidget.make(args.sponsors, frame)))
    end
   
    if args.links then
        local splitLinks = mw.text.split(args.links, ',')
        for i = 1, #splitLinks do
            local split = mw.text.split(splitLinks[i], '=')
            args[split[1]] = split[2]
        end
    end
 
    if args.api_id then
        args.datdota = args.api_id
        args.dotabuff = args.api_id
        args.stratz = args.api_id
    end
   
    local transformedLinks = Links.transform(args)
    local fullLinks = LinksWidget.make(transformedLinks, 'player')
 
    local linksContainer = mw.html.create('div')
        :addClass('ib-links-container')
 
    if fullLinks then
        linksContainer:node(fullLinks)
    end
 
    container:node(infoContainer)
    container:node(linksContainer)
 
    container:node(Tournaments(Subheader))
 
    return container
end
end


return Infobox
return Infobox

Latest revision as of 03:13, 25 April 2025

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

local getArgs = require('Module:Arguments').getArgs
local Links = require('Module:Links')
local Header = require('Module:Infobox/Widget/Header')
local Subheader = require('Module:Infobox/Widget/Subheader')
local LinksWidget = require('Module:Infobox/Widget/Links')
local ListWidget = require('Module:Infobox/Widget/List')
local LocationWidget = require('Module:Infobox/Widget/Location')
local SponsorsWidget = require('Module:Infobox/Widget/Sponsors')
local RowWidget = require('Module:Infobox/Widget/Row')
local RoleWidget = require('Module:Infobox/Widget/Role')
local stringifyDate = require('Module:Functions').stringifyDate
local convertRole = require('Module:GameRoles').convertRole
local Tournaments = require('Module:Infobox/Widget/Tournaments').get
local cargo = mw.ext.cargo

local Infobox = {}

function Infobox.main(frame)
    local args = getArgs(frame)

    -- local headerNode = Header.make(args.title or mw.title.getCurrentTitle(), args.image)
    
    local headerNode = Header.make(
        args.title or mw.title.getCurrentTitle(), 
        args.image, 
        nil,
        nil,
        args.nationality,
        args.romanized
    )

    local container = mw.html.create('div')
        :addClass('ib grid-infobox')

    local titleContainer = mw.html.create('div')
        :addClass('carousel-image-container')
        :node(headerNode)

    container:node(titleContainer)

    local infoContainer = mw.html.create('div')
        :addClass('info-container grid')

    if args.name then
        infoContainer:node(RowWidget.make('Name', args.name))
    end

    if args.romanized then
        infoContainer:node(RowWidget.make('Nickname', args.romanized))
    end

    if args.nationality then
        local category
        if args.team then
            category = mw.text.split(args.team, '/')[1] .. '/Players'
        else 
            category = 'Players'
        end
        infoContainer:node(RowWidget.make('Nationality', LocationWidget.make(args.nationality, nil, category)))
    end

    if args.birthdate then
        infoContainer:node(RowWidget.make('Birthdate', stringifyDate(args.birthdate)))
    end

    local transferResults = {}
    if not args.team or not args.game_role then
        local tables = 'Transfers'
        local fields = '_pageName, position'
        local cargoArgs = {
            where = 'id= "' .. mw.title.getCurrentTitle().text .. '" AND leavedate IS NULL AND inactivedate IS NULL'
        }
        transferResults = cargo.query(tables, fields, cargoArgs)    
    end

    if not args.team and #transferResults == 0 then
        local tables = 'Org_transfers'
        local fields = '_pageName, position'
        local cargoArgs = {
            where = 'id= "' .. mw.title.getCurrentTitle().text .. '" AND leavedate IS NULL AND inactivedate IS NULL'
        }
        orgTransferResults = cargo.query(tables, fields, cargoArgs)

        if #orgTransferResults > 0 then
            infoContainer:node(RowWidget.make('Org', orgTransferResults[1]._pageName, frame))
            infoContainer:node(RowWidget.make('Org role', orgTransferResults[1].position))
        end
    end

    local teamResults = {}
    if args.team or #transferResults > 0 then
        local tables = 'Teams'
        local fields = '_pageName, region'
        local team = args.team or transferResults[1]._pageName
        local cargoArgs = {
            where = '_pageName = "' .. team .. '" AND region IS NOT NULL AND region != ""'
        }
        teamResults = cargo.query(tables, fields, cargoArgs)
    end

    if args.team then
        if #teamResults > 0 then
            infoContainer:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(args.team, '/')[1] .. '/Teams')))
        end
        infoContainer:node(RowWidget.make('Team', args.team, frame))
    else 
        if #teamResults > 0 then
            infoContainer:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(teamResults[1]._pageName, '/')[1] .. '/Teams')))
        end
        if #transferResults > 0 then
            infoContainer:node(RowWidget.make('Team', transferResults[1]._pageName, frame))
        end
    end

    if args.game_role then
        infoContainer:node(RowWidget.make('Role', args.game_role))
    else
        if #transferResults > 0 then
            infoContainer:node(RowWidget.make('Role in team', convertRole(mw.text.split(transferResults[1]._pageName, '/')[1], transferResults[1].position)))
        elseif args.active_roles then
            local roleSplit = mw.text.split(args.active_roles, ',')
            local plural = #roleSplit > 1 and 's' or ''
            infoContainer:node(RowWidget.make('Active role' .. plural, ListWidget.make(args.active_roles)))
        end
    end

    if args.past_roles then
        local roleSplit = mw.text.split(args.past_roles, ',')
        local plural = #roleSplit > 1 and 's' or ''
        infoContainer:node(RowWidget.make('Past role' .. plural, ListWidget.make(args.past_roles)))
    end

    if args.active_player then
        infoContainer:node(RowWidget.make('Active as a Player', args.active_player))
    end
    if args.active_coach then
        infoContainer:node(RowWidget.make('Active as a Coach', args.active_coach))
    end
    if args.active_analyst then
        infoContainer:node(RowWidget.make('Active as an Analyst', args.active_analyst))
    end
    if args.active_manager then
        infoContainer:node(RowWidget.make('Active as a Manager', args.active_manager))
    end
    if args.active_talent then
        infoContainer:node(RowWidget.make('Active as a Talent', args.active_talent))
    end
    if args.active_production then
        infoContainer:node(RowWidget.make('Active in Production', args.active_production))
    end
    
    if args.alternativeid then
        infoContainer:node(RowWidget.make('Alternative IDs', args.alternativeid))
    end
    
    if args.sponsors then
        infoContainer:node(RowWidget.make('Sponsors', SponsorsWidget.make(args.sponsors, frame)))
    end
    
    if args.links then
        local splitLinks = mw.text.split(args.links, ',')
        for i = 1, #splitLinks do
            local split = mw.text.split(splitLinks[i], '=')
            args[split[1]] = split[2]
        end
    end

    if args.api_id then
        args.datdota = args.api_id
        args.dotabuff = args.api_id
        args.stratz = args.api_id
    end
    
    local transformedLinks = Links.transform(args)
    local fullLinks = LinksWidget.make(transformedLinks, 'player')

    local linksContainer = mw.html.create('div')
        :addClass('ib-links-container')

    if fullLinks then
        linksContainer:node(fullLinks)
    end

    container:node(infoContainer)
    container:node(linksContainer)

    container:node(Tournaments(Subheader))

    return container
end

return Infobox