Module:Participants list team: Difference between revisions

From TwogPedia
mNo edit summary
mNo edit summary
Line 149: Line 149:
relativeParent:node(Participants.createLogo(logo))
relativeParent:node(Participants.createLogo(logo))
elseif pValues.team then
elseif pValues.team then
            -- Check if team has org
            local tables = 'Teams'
local fields = 'org'
local cargoArgs = {
where = '_pageName="' .. team .. '"'
}
            local results = cargo.query(tables, fields, cargoArgs)
            local company = ''
            if #results > 0 then company = results[1].org end
-- Look up Cargo table for team images
-- Look up Cargo table for team images
local tables = 'Logos'
tables = 'Logos'
local fields = '_pageName, logoLight, logoDark, logoAll, iconAll, iconLight, iconDark, start, end'
fields = '_pageName, logoLight, logoDark, logoAll, iconAll, iconLight, iconDark, start, end'
local currentDate = os.date('%Y-%m-%d')
currentDate = os.date('%Y-%m-%d')
local cargoArgs = {
cargoArgs = {
where = '(_pageName = "' .. team .. '" OR _pageName="Companies/' .. string.gsub(team, gameCategory .. '/', '') .. '") AND  (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")'
where = '(_pageName = "' .. team .. '" OR _pageName="' .. company .. '") AND  (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")'
}
}
local results = cargo.query(tables, fields, cargoArgs)
results = cargo.query(tables, fields, cargoArgs)
if #results > 0 then
if #results > 0 then
if results[1].iconAll then
if results[1].iconAll then

Revision as of 20:42, 4 October 2023

Documentation for this module may be created at Module:Participants list team/doc

local cargo = mw.ext.cargo

local getArgs = require('Module:Arguments').getArgs
local makeFlag = require('Module:Person/Flag').makeFlag
local Links = require('Module:Links')

local Participants = {}


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

	local currentTitleSplit = mw.text.split(mw.title.getCurrentTitle().text, '/')    

	local container = mw.html.create('div'):addClass('p-team-container')

    local wrapper = mw.html.create('div')

    if args.showToggle then
		local toggle = mw.html.create('div')
			:attr('id', 'team-toggle')
			:wikitext('Show Players')
		wrapper:node(toggle)
	end
	
	local teamsize = args.teamsize

	local currentTitle = mw.title.getCurrentTitle().text
	local gameCategory = mw.text.split(currentTitle, '/')[1]
	
	for key, value in ipairs (args) do
		local pValues = mw.text.jsonDecode(value)

        -- If pValues is title, then create a header and new container

        if pValues.title then
            local title = mw.html.create('h3'):wikitext(pValues.title)
            local clone = mw.clone(container)
            if key == 1 then
                wrapper:node(title)
            else 
                wrapper:node(clone):node(title)
                container = mw.html.create('div'):addClass('p-team-container')
            end
            
        else
		local participant = mw.html.create('div')
		local team = nil
		
		if pValues.team then
			-- Check if shorthand of a team was used
			local tables = 'Teams'
			local fields = '_pageName, shorthand'
			local cargoArgs = {
				where = '_pageName LIKE "' .. gameCategory .. '/%" AND shorthand = "' .. pValues.team .. '"'
			}
			local results = cargo.query(tables, fields, cargoArgs)
			if #results > 0 then team = results[1]._pageName else team = gameCategory .. '/' .. pValues.team end

			local teamName = mw.html.create('div')
				:addClass('tc fw-600')
				:wikitext('[['.. team ..']]')
			if pValues.notes then
				local notesList = mw.text.split(pValues.notes, ',')
				for i, v in ipairs (notesList) do
					v = mw.text.trim(v)
					teamName:node(mw.html.create('sup'):attr('title', 'Note ' .. v):wikitext(v))
				end
			end
			participant:node(teamName)
		end
		
		-- Create list of players
		local playerList = mw.html.create('table')
			:addClass('table-bordered players')
		
		local players = {}
		local playersDb = ''
		for i = 1, teamsize, 1 do
			if pValues['p'.. i] then
				local playerId = 'People/' .. pValues['p'.. i] .. '|' .. pValues['p'.. i]
				if pValues['p'.. i .. 'link'] then
					playerId = pValues['p'.. i .. 'link'] .. '|' .. pValues['p'.. i]
				end
				playersDb = playersDb .. (pValues['p'.. i .. 'link'] or 'People/' .. pValues['p'.. i]) .. ','
				local flag = makeFlag(pValues['p'.. i .. 'flag'], pValues['p'.. i .. 'link'] or 'People/' .. pValues['p'.. i], gameCategory)

				players['p'.. i] = mw.html.create('tr')
					:node(mw.html.create('th'):wikitext(i))
				
				local td = mw.html.create('td')

				if flag then
					td:wikitext(flag)
				end
				
				td:wikitext('[['.. playerId ..']]')
				players['p'.. i]:node(td)
				playerList:node(players['p'.. i])
			end
		end
		
		if team ~= nil and string.len(playersDb) > 0 then
			frame:callParserFunction{name = '#cargo_store:', args = {_table = 'Participants', team = team, players = playersDb}}
		end

		if pValues.s then
			local playerId = 'People/' .. pValues.s .. '|' .. pValues.s
			if pValues['slink'] then
				playerId = pValues['slink'] .. '|' .. pValues.s
			end
			local flag = makeFlag(pValues['sflag'], pValues['slink'] or 'People/' .. pValues.s, gameCategory)
			
			local sub = mw.html.create('tr')
				:node(mw.html.create('th'):node(mw.html.create('abbr'):attr('title', 'Substitute'):wikitext('S')))
				:node(mw.html.create('td'):wikitext(flag):wikitext('[['.. playerId ..']]'))
			playerList:node(sub)
		end
		
		
        local coaches = 1
        while pValues['c' .. coaches] do
			local playerId = 'People/' .. pValues['c' .. coaches] .. '|' .. pValues['c' .. coaches]
			if pValues['clink'] then
				playerId = pValues['clink'] .. '|' .. pValues['c' .. coaches]
			end
			
			local flag = makeFlag(pValues['cflag'], pValues['clink'] or 'People/' .. pValues['c' .. coaches], gameCategory)

			local coach = mw.html.create('tr')
				:node(mw.html.create('th'):node(mw.html.create('abbr'):attr('title', 'Coach'):wikitext('C')))
				:node(mw.html.create('td'):wikitext(flag):wikitext('[['.. playerId ..']]'))
			playerList:node(coach)
            coaches = coaches + 1
        end
		
		
		local relativeParent = mw.html.create('div')
			:addClass('team-list')
			:node(playerList)
		

		if pValues.logoAll then
			relativeParent:node(Participants.createLogo(pValues.logoAll))
		elseif pValues.logoLight and pValues.logoDark then
			relativeParent:node(Participants.createLogo(pValues.logoLight, 'light')):node(Participants.createLogo(pValues.logoDark, 'dark'))
		elseif pValues.logoLight or pValues.logoDark then
			local logo = pValues.logoLight or pValues.logoDark
			relativeParent:node(Participants.createLogo(logo))
		elseif pValues.team then
            -- Check if team has org
            local tables = 'Teams'
			local fields = 'org'
			local cargoArgs = {
				where = '_pageName="' .. team .. '"'
			}
            local results = cargo.query(tables, fields, cargoArgs)
            local company = ''
            if #results > 0 then company = results[1].org end
			-- Look up Cargo table for team images
			tables = 'Logos'
			fields = '_pageName, logoLight, logoDark, logoAll, iconAll, iconLight, iconDark, start, end'
			currentDate = os.date('%Y-%m-%d')
			cargoArgs = {
				where = '(_pageName = "' .. team .. '" OR _pageName="' .. company .. '") AND  (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")'
			}
			results = cargo.query(tables, fields, cargoArgs)
			if #results > 0 then
				if results[1].iconAll then
					relativeParent:node(Participants.createLogo(results[1].iconAll))
				elseif results[1].iconLight and results[1].iconDark then
					relativeParent:node(Participants.createLogo(results[1].iconLight, 'light')):node(Participants.createLogo(results[1].iconDark, 'dark'))
				elseif results[1].logoAll then
					relativeParent:node(Participants.createLogo(results[1].logoAll))
				elseif results[1].logoLight and results[1].logoDark then
					relativeParent:node(Participants.createLogo(results[1].logoLight, 'light')):node(Participants.createLogo(results[1].logoDark, 'dark'))
				else  
					local logo = results[1].iconLight or results[1].iconDark or results[1].logoLight or results[1].logoDark
					relativeParent:node(Participants.createLogo(logo))
				end
			else 
				relativeParent:node(Participants.createLogo())
			end
		end
		
		participant:node(relativeParent)
		
		if pValues.qualifier then
			local qualifier = mw.html.create('div')
				:addClass('team-list-qualifier')
				:wikitext(pValues.qualifier)
			participant:node(qualifier)
		end
		
		container:node(participant)
        end
	end
	
    wrapper:node(container)	
	
	return wrapper
end

function Participants.createLogo(url, class)
	local className = class and class .. ' h-100' or 'h-100'
	local logoURL = url and url or 'Team_placeholder_dark.png'
	local logoContainer = mw.html.create('div')
		:addClass(className)
	local logo = mw.html.create('div')
		:addClass('team-list-logo')
		:node('[[File:' .. logoURL .. '|190px]]')
	logoContainer:node(logo)
	return logoContainer
end

return Participants