Module:Transfers

From TwogPedia
Revision as of 13:10, 23 December 2022 by Couchor (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

local getArgs = require('Module:Arguments').getArgs
local Flags = require('Module:Flags')
local cargo = mw.ext.cargo

local Transfers = {}

function Transfers.main(frame)
	local args = getArgs(frame)
	local parent = mw.html.create('div'):addClass('transferList')
	if args.game ~= nil then
		local tables = 'Transfers'
		local fields = '_pageName, id, joindate, leavedate, inactivedate, newteam, flag, joinref, leaveref, joinrefname, leaverefname'
		local cargoArgs = {
			where = '_pageName LIKE "' .. args.game .. '%"',
			orderBy = 'joindate DESC, leavedate DESC'
		}
		local results = cargo.query(tables, fields, cargoArgs)
		
		if #results > 0 then
			local tableContainer = mw.html.create('table')
				
			local titleRow = mw.html.create('tr')
			titleRow:addClass('headerRow')
		
			local dateCell = mw.html.create('th')
				dateCell:wikitext('Date')
			local idCell = mw.html.create('th')
				idCell:wikitext('ID')
			local oldTeamCell = mw.html.create('th')
				oldTeamCell:wikitext('Old team')
			local newTeamCell = mw.html.create('th')
				newTeamCell:wikitext('New team')
				
			titleRow:node(dateCell):node(idCell):node(oldTeamCell):node(newTeamCell)
			
			tableContainer:node(titleRow)
			for r = 1, #results do
				local result = results[r]
				-- local transfer = mw.html.create('div')
				-- 	:addClass('transferItem')
				
				local transfer = mw.html.create('tr')
				
				if result.leavedate then
					local leavedate = mw.html.create('td')
						:wikitext(result.leavedate)
					transfer:node(leavedate)
				elseif result.joindate then
					local joindate = mw.html.create('td')
						:wikitext(result.joindate)
					transfer:node(joindate)
				end
				
				local player = mw.html.create('td'):addClass('flag')
				-- local id = mw.html.create('td')
				-- 	:addClass('linkID')
				-- 	:node(flagDiv)
				if ( result.flag ) then
					local flag = Flags.icon(result.flag, args.game)
					player:wikitext(flag)
				end
				
				transfer:node(player:wikitext('[[' .. result.id .. ']]'))
				-- Get logo of result _pageName team, if exists
				local oldTeamLogo = mw.html.create('div')
				local tables = 'TeamLogos'
				local fields = '_pageName, logoLight, logoDark, logoAll, start, end'
				local currentDate = os.date('%Y-%m-%d')
				local companyName = mw.text.split(result._pageName, '/')[2] or ''
				local cargoArgs = {
					where = '(_pageName= "' .. result._pageName .. '" OR _pageName= "' .. companyName .. '") AND  (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")'
				}
				local logoResult = cargo.query(tables, fields, cargoArgs)
				
				if #logoResult > 0 then
					if logoResult[1].logoAll then
						oldTeamLogo:node(Transfers.createLogo(logoResult[1].logoAll))
					elseif logoResult[1].logoLight and logoResult[1].logoDark then
						oldTeamLogo:node(Transfers.createLogo(logoResult[1].logoLight, 'light')):node(Transfers.createLogo(logoResult[1].logoDark, 'dark'))
					else 
						local logo = logoResult[1].logoLight or logoResult[1].logoDark
						oldTeamLogo:node(Transfers.createLogo(logo))
					end
				else 
					oldTeamLogo:node(Transfers.createLogo())
				end 
				
				-- If transfer has a leavedate show old teams logo
				local oldTeam = mw.html.create('td')
				local oldTeamDiv = mw.html.create('div'):addClass('d-flex')
				oldTeam:node(oldTeamDiv)
				if result.leavedate then
					oldTeamDiv:node(oldTeamLogo)
				else 
					oldTeamDiv:wikitext('None')
				end
				
				transfer:node(oldTeam)
				
				-- Show new teams logo, if exists
				local newTeam = mw.html.create('td')
				local newTeamDiv = mw.html.create('div'):addClass('d-flex')
				newTeam:node(newTeamDiv)
				local newTeamLogo = mw.html.create('div')
				if result.leavedate then
					if result.newteam then
						-- Get logo of new team
						local newTeamLogo = mw.html.create('div')
						local tables = 'TeamLogos'
						local fields = '_pageName, logoLight, logoDark, logoAll, start, end'
						local currentDate = os.date('%Y-%m-%d')
						local cargoArgs = {
							where = '(_pageName= "' .. result.newteam .. '") AND  (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")'
						}
						local logoResult = cargo.query(tables, fields, cargoArgs)

						if #logoResult > 0 then
							if logoResult[1].logoAll then
								newTeamLogo:node(Transfers.createLogo(logoResult[1].logoAll))
							elseif logoResult[1].logoLight and logoResult[1].logoDark then
								newTeamLogo:node(Transfers.createLogo(logoResult[1].logoLight, 'light')):node(Transfers.createLogo(results[1].logoDark, 'dark'))
							else 
								local logo = logoResult[1].logoLight or logoResult[1].logoDark
								newTeamLogo:node(Transfers.createLogo(logo))
							end
						else 
							newTeamLogo:node(Transfers.createLogo())
						end 
						newTeamDiv:node(newTeamLogo)
					else
						newTeamDiv:wikitext('None')	
					end
				else
					newTeamDiv:node(oldTeamLogo)
				end
				
				transfer:node(newTeam)
				
				if result.leaveref or result.leaverefname then
		        	local refName = result.leaverefname or ''
		        	local ref = result.leaveref or ''
		        	oldTeamDiv:wikitext(frame:preprocess('<ref name='.. refName .. '>' ..ref .. '</ref>'))
				end
	        
				if result.joinref or result.joinrefname then
		        	local refName = result.joinrefname or ''
		        	local ref = result.joinref or ''
		        	newTeamDiv:wikitext(frame:preprocess('<ref name='.. refName .. '>' ..ref .. '</ref>'))
				end
	       
					
				tableContainer:node(transfer)
			end
			parent:node(tableContainer)
		end
	else 
		-- local game = mw.html.create('div')
		-- 	:wikitext('[[File:' .. args.game .. '_logo.png|25px]]')
			
		-- transfer:node(game)
	end
	return parent
end

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

return Transfers