Module:Infobox person: Difference between revisions

From TwogPedia
mNo edit summary
mNo edit summary
 
(12 intermediate revisions by the same 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 convertRole = require('Module:GameRoles').convertRole
local Tournaments = require('Module:Infobox/Widget/Tournaments').get
local cargo = mw.ext.cargo
local cargo = mw.ext.cargo


Line 17: Line 19:
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 container = mw.html.create('div')
Line 57: Line 59:
    }
    }
    transferResults = cargo.query(tables, fields, cargoArgs)
    transferResults = cargo.query(tables, fields, cargoArgs)
    end
    -- Check if player is part of an org
    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
            container:node(RowWidget.make('Org', orgTransferResults[1]._pageName, frame))
            container:node(RowWidget.make('Org role', orgTransferResults[1].position))
        end
     end
     end


Line 66: Line 83:
         local team = args.team or transferResults[1]._pageName
         local team = args.team or transferResults[1]._pageName
    local cargoArgs = {
    local cargoArgs = {
    where = '_pageName = "' .. team .. '" AND region IS NOT NULL'
    where = '_pageName = "' .. team .. '" AND region IS NOT NULL AND region != ""'
    }
    }
    teamResults = cargo.query(tables, fields, cargoArgs)
    teamResults = cargo.query(tables, fields, cargoArgs)
Line 84: Line 101:
         end
         end
end
end
    if args.game_role then
container:node(RowWidget.make('Role', args.game_role))
    else
        if #transferResults > 0 then
            container: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 ''
            container: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 ''
        container:node(RowWidget.make('Past role' .. plural, ListWidget.make(args.past_roles)))
    end


if args.active_player then
if args.active_player then
Line 90: Line 125:
if args.active_coach then
if args.active_coach then
container:node(RowWidget.make('Active as a Coach', args.active_coach))
container:node(RowWidget.make('Active as a Coach', args.active_coach))
end
    if args.active_analyst then
container:node(RowWidget.make('Active as an Analyst', args.active_analyst ))
end
end
if args.active_manager then
if args.active_manager then
Line 97: Line 135:
container:node(RowWidget.make('Active as a Talent', args.active_talent))
container:node(RowWidget.make('Active as a Talent', args.active_talent))
end
end
    if args.active_production then
container:node(RowWidget.make('Active in Production', args.active_production ))
if args.game_role then
container:node(RowWidget.make('Role', args.game_role))
    else
        if #transferResults > 0 then
            container:node(RowWidget.make('Role', convertRole(mw.text.split(transferResults[1]._pageName, '/')[1], transferResults[1].position)))
        end
end
end
if args.alternativeid then
if args.alternativeid then
container:node(RowWidget.make('Alternative IDs', args.alternativeid))
container:node(RowWidget.make('Alternative IDs', args.alternativeid))
end
if args.nicknames then
container:node(RowWidget.make('Nicknames', args.nicknames))
end
end
if args.sponsors then
if args.sponsors then
container:node(RowWidget.make('Sponsors', ListWidget.make(args.sponsors)))
container:node(RowWidget.make('Sponsors', SponsorsWidget.make(args.sponsors, frame) ))
end
end
container:node(Subheader.make('Links'))
-- Check if there is a "links" argument and then do magic to add them all to arguments
-- Check if there is a "links" argument and then do magic to add them all to arguments
Line 130: Line 155:
end
end
end
end
    -- Add dota2 api links if api id added
    if args.api_id then
        args.datdota = args.api_id
        args.dotabuff = args.api_id
        args.stratz = args.api_id
    end
    -- Check if there is a "links" argument and then do magic to add them all to arguments
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
local transformedLinks = Links.transform(args)
local transformedLinks = Links.transform(args)
local fullLinks = LinksWidget.make(transformedLinks, 'player')
local fullLinks = LinksWidget.make(transformedLinks, 'player')
container:node(fullLinks)
if fullLinks then
container:node(Subheader.make('Links'))
container:node(fullLinks)
end
-- Upcoming and live tournaments
container:node(Tournaments(Subheader))
 
return container
return container
end
end


return Infobox
return Infobox

Latest revision as of 15:15, 18 April 2024

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 container = mw.html.create('div')
		:addClass('ib')
		
	container:node(headerNode):node(Subheader.make('Player Information'))
	
	if args.name then
		container:node(RowWidget.make('Name', args.name))
	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

    -- Check if player is active in a team
    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

    -- Check if player is part of an org
    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
            container:node(RowWidget.make('Org', orgTransferResults[1]._pageName, frame))
            container:node(RowWidget.make('Org role', orgTransferResults[1].position))
        end
    end

    -- Check for team region if args.team or active in a team
    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
            container:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(args.team, '/')[1] .. '/Teams')))
        end
		container:node(RowWidget.make('Team', args.team, frame))
    else 
        if #teamResults > 0 then
            container:node(RowWidget.make('Region', LocationWidget.make(teamResults[1].region, nil, mw.text.split(teamResults[1]._pageName, '/')[1] .. '/Teams')))
        end
        if #transferResults > 0 then
            container:node(RowWidget.make('Team', transferResults[1]._pageName, frame))
        end
	end

    if args.game_role then
		container:node(RowWidget.make('Role', args.game_role))
    else
        if #transferResults > 0 then
            container: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 ''
            container: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 ''
        container:node(RowWidget.make('Past role' .. plural, ListWidget.make(args.past_roles)))
    end

	if args.active_player then
		container:node(RowWidget.make('Active as a Player', args.active_player))
	end
	if args.active_coach then
		container:node(RowWidget.make('Active as a Coach', args.active_coach))
	end
    if args.active_analyst then
		container:node(RowWidget.make('Active as an Analyst', args.active_analyst ))
	end
	if args.active_manager then
		container:node(RowWidget.make('Active as a Manager', args.active_manager))
	end
	if args.active_talent then
		container:node(RowWidget.make('Active as a Talent', args.active_talent))
	end
    if args.active_production then
		container:node(RowWidget.make('Active in Production', args.active_production ))
	end
	
	if args.alternativeid then
		container:node(RowWidget.make('Alternative IDs', args.alternativeid))
	end
	
	if args.sponsors then
		container:node(RowWidget.make('Sponsors', SponsorsWidget.make(args.sponsors, frame) ))
	end
	
	-- Check if there is a "links" argument and then do magic to add them all to arguments
	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

    -- Add dota2 api links if api id added
    if args.api_id then
        args.datdota = args.api_id
        args.dotabuff = args.api_id
        args.stratz = args.api_id
    end
	
    -- Check if there is a "links" argument and then do magic to add them all to arguments
	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

	local transformedLinks = Links.transform(args)
	local fullLinks = LinksWidget.make(transformedLinks, 'player')
	
	if fullLinks then
		container:node(Subheader.make('Links'))
		container:node(fullLinks)
	end
	
	-- Upcoming and live tournaments
	container:node(Tournaments(Subheader))

	return container
end

return Infobox