Modul:InfoboxTeamSportBio

Modul generic pentru biografiile de practicanți de sporturi de echipă. Dezvoltată în general pentru Proiect:Fotbal și {{Infocaseta Fotbalist}}, cu minime adaptări vizuale poate fi folosită și pentru handbaliști, rugbiști, baschetbaliști etc.

{{Infocaseta Fotbalist}} furnizează un rezumat rapid al detaliilor despre un fotbalist sau antrenor de fotbal pentru a permite cititorului să extragă cele mai des căutate informații fără a trebui să citească articolul.

Utilizare

modificare

Pentru jucători în timpul carierei

{{Infocaseta Fotbalist
|numejucător = 
|imagine =  
|numecomplet = 
|înălțime = 
|greutate = 
|datanașterii = 
|loculnașterii =  
|țaranașterii = 
|naționalitate = 
|echipaactuală = 
|număr = 
|poreclă =
|post = 
|anijuniorat = 
|juniorat = 
|ani =
|echipe =
|apariții(goluri) = 
|anilanațională = 
|echipănațională = 
|aparițiilanațională(goluri) = 
|reîmprospătareechipadeclub = 
|reîmprospătarenațională = 
}}

Pentru foști fotbaliști

{{Infocaseta Fotbalist
|numejucător = 
|imagine =  
|numecomplet = 
|înălțime = 
|greutate = 
|datanașterii = 
|loculnașterii =  
|țaranașterii = 
|datadecesului =
|loculdecesului =
|țaradecesului =
|naționalitate = 
|poreclă =
|post = 
|anijuniorat = 
|juniorat = 
|ani =
|echipe =
|apariții(goluri) = 
|anilanațională = 
|echipănațională = 
|aparițiilanațională(goluri) = 
}}

Pentru jucători care au devenit antrenori

{{Infocaseta Fotbalist
|numejucător = 
|imagine = 
|numecomplet = 
|poreclă = 
|datanașterii = 
|loculnașterii = 
|țaranașterii = 
|datadecesului = 
|loculdecesului = 
|țaradecesului = 
|înălțime = 
|post = 
|echipăactuală = 
|număr = 
|anidetineret = 
|echipedetineret = 
|ani = 
|echipe = 
|apariții(goluri) = 
|anilanațională = 
|echipănațională = 
|aparițiilanațională(goluri) = 
|anideantrenorat = 
|echipeantrenate =
}}

Pentru antrenori care nu au fost și jucători

{{Infocaseta Fotbalist
|numejucător = 
|imagine = 
|numecomplet = 
|poreclă = 
|datanașterii = 
|loculnașterii = 
|țaranașterii = 
|datadecesului = 
|înălțime = 
|echipăactuală = 
|anideantrenorat = 
|echipeantrenate =
}}
Fără separatori de tipul <br>
{{Infocaseta Fotbalist
| nume jucător= 
| imagine= 
| nume complet = 
| data nașterii = 
| locul nașterii= 
| țara nașterii  =
| data decesului =
| locul decesului=
| țara decesului=
| înățime = 
| greutate = 
| post = 
| clubul actual=
| număr=
| anijuniorat1=
| juniorat1=
| anijuniorat2=
| juniorat2=
| anijuniorat3=
| juniorat3=
| ani1 = 
| club1 =
| ap1 = 
| goluri1 = 
| ani2 = 
| club2 = 
| ap2 = 
| goluri2 = 
| ani3 = 
| club3 = 
| ap3 = 
| goluri3 = 
| ani4 =
| club4 = 
| ap4 =
| goluri4 = 
| ani5 =
| club5 =
| ap5 =
| goluri5 =
| totalap =
| totalgoluri = 
| ani națională1 =
| naționala1 =
| naționala ap1 = 
| goluri națională1 = 
| ani națională2 = 
| nationala2 = 
| nationala ap2 =
| goluri națională2 =
| ani națională3 = 
| nationala3 = 
| nationala ap3 =
| goluri națională3 =
| club antrenat1        = 
| club antrenat2        = 
| club antrenat3        = 
| club antrenat4        = 
| club antrenat5        = 
| club antrenat6        = 
| club antrenat7        = 
| club antrenat8        = 
| club antrenat9        = 
| club antrenat10       = 
| ani antrenor1        = 
| ani antrenor2        = 
| ani antrenor3        = 
| ani antrenor4        = 
| ani antrenor5        = 
| ani antrenor6        = 
| ani antrenor7        = 
| ani antrenor8        = 
| ani antrenor9        = 
| ani antrenor10       = 
| actualizare club     =
| actualizare națională=
}}

Parametri

modificare
Obligatorii
  • {{{numejucător}}} — Numele cel mai des folosit al jucătorului
  • {{{datanașterii}}} — Data nașterii, cu wikilink.
  • {{{loculnașterii}}} — Locul nașterii jucătorului
  • {{{țaranașterii}}} — Țara în care s-a născut jucătorul
Opționali
  • {{{numecomplet}}} — Numele complet al jucătorului.
  • {{{imagine}}} — O fotografie a jucătorului, ideal ar fi să fie prezentat pe teren în tricoul celei mai recente echipe.
  • {{{înălțime}}} — Înălțimea jucătorului, în sistem metric.
  • {{{post}}} — Postul pe care este folosit cel mai des jucătorul. Dacă un jucător joacă pe posturi diferite atunci autorul articolului îl va alege pe cel mai semnificativ și va explica mai detaliat în corpul articolului.
  • {{{echipaactuală}}} — Clubul la care joacă în prezent. Se lasă liber dacă s-a retras
  • {{{număr}}} — Numărul de pe tricou de la clubul la care joacă.
  • {{{ani}}} — O listă a anilor cât a fost sub contract de profesionist cu fiecare club, separați prin cu <br />.
  • {{{echipe}}} — O listă a cluburilor profesioniste la care a activat, separate prin <br />.
  • {{{apariții(goluri)}}} — O listă a prezențelor și golurilor marcate în meciurile de ligă națională pentru fiecare club profesionist, separate prin <br /> (notă: Meciurile de baraj nu sunt numărate ca meciuri de ligă de către majoritatea surselor de statistici (ex. Soccerbase și Sky Sports (Rothmans) Football Yearbook, deci nici ele nu trebuie să fie incluse în infobox).
  • {{{anijuniorat}}} — O listă a anilor în care a activat la fiecare club ca junior, separați de <br />.
  • {{{juniorat}}} — O listă a cluburilor la care a jucat în anii de juniorat, separate de <br />.
  • {{{anilanațională}}} — O listă a anilor în care a jucat la fiecare echipă națională, separați de <br />.
  • {{{echipănațională}}} — O listă a echipelor naționale la care a jucat, separate prin <br />. Se pot trece și echipe care nu sunt de seniori, cum ar fi U21.
  • {{{aparițiilanațională(goluri)}}} — O listă a prezențelor și golurilor marcate pentru fiecare echipă națională, separate de <br />. Se numără toate competițiile și meciurile amicale.
  • {{{actualizare club}}} — Data ultimei actualizări a datelor despre jocurile la echipa de club.
  • {{{actualizare națională}}} — Data ultimei actualizări a datelor despre prezențele în națională.
Alți parametri

| anijuniorat1=
| juniorat1=
................................
| anijuniorat5=
| juniorat5=
| ani1 =
| club1 =
| ap1 =
| goluri1 =
................................
| ani26 =
| club26 =
| ap26 =
| goluri26 =
| totalap =
| totalgoluri =
| ani națională1 =
| nationala1 =
| nationala ap1 =
| goluri națională1 =
...............................
| ani națională8 =
| nationala8 =
| nationala ap8 =
| goluri națională8 =
| club antrenat1 =
| ani antrenor1 =
...............................
| club antrenat26 =
| ani antrenor26 =

Alfredo Di Stéfano
Informații generale
Nume complet Alfredo Di Stéfano Laulhé
Data nașterii (98 de ani)
Locul nașterii Buenos Aires, Argentina
Înălțime 1,78 m
Post Mijlocaș ofensiv
Cluburi de seniori*
Ani Club Ap (G)
1945–1949 River Plate 65 (49)
1946 Club Atlético Huracán 25 (0)
1949–1953 Millonarios 101 (90)
1953–1964 Real Madrid 282 (216)
1964–1966 Espanyol Barcelona 47 (11)
Echipa națională
Ani Țară Ap (G)
1947 Argentina 6 (6)
1949 Columbia 4 (0)
1957–1961 Spania 31 (23)
Echipe antrenate
1967–1967 Elche
1969–1970 Boca Juniors
1970–1974 Valencia
1974–1974 Sporting
1975–1976 Rayo Vallecano
1976–1977 CD Castellón
1979–1980 Valencia
1981–1982 River Plate
1982–1984 Real Madrid
1985 Boca Juniors
1986–1988 Valencia
1990–1991 Real Madrid
* Apariții și goluri pentru echipa de club doar în cadrul campionatului intern
{{Infocaseta Biografie fotbal
| playername = Alfredo Di Stéfano
| image =
| fullname = Alfredo Di Stéfano Laulhé
| height = {{height|m=1.78}}
| dateofbirth = {{birth date and age|1926|7|4|df=y}}
| cityofbirth = [[Buenos Aires Province|Buenos Aires]]
| countryofbirth = [[Argentina]]
| position = [[Mijlocaș (fotbal)|Mijlocaș ofensiv]]
| ani1 = 1945–1949
| club1 = {{ClubFotbal|River Plate}}
| ap1 = 65
| goluri1 = 49
| ani2 = 1946
| club2 = → {{ClubFotbal|Club Atlético Huracán}}
| ap2 = 25
| goluri2 = 10
| ani3 = 1949–1953
| club3 = {{ClubFotbal|Millonarios}}
| ap3 = 101
| goluri3 = 90
| ani4 = 1953–1964
| club4 =  {{ClubFotbal|Real Madrid}}
| ap4 = 282
| goluri4 = 216
| ani5 = 1964–1966
| club5 =  {{ClubFotbal|Espanyol Barcelona}}
| ap5 = 47
| goluri5 = 11
| totalap = 520
| totalgoluri = 376
| ani națională1 = 1947
| nationala1 = {{ARGf}}
| nationala ap1 = 6
| goluri națională1 = 6
| ani națională2 = 1949
| nationala2 = {{COLf}}
| nationala ap2 = 4
| goluri națională2 = 0
| ani națională3 = 1957–1961
| nationala3 = {{SPAf}}
| nationala ap3 = 31
| goluri națională3 = 23
| club antrenat1        = {{ClubFotbal|Elche}}
| club antrenat2        = {{ClubFotbal|Boca Juniors}}
| club antrenat3        = {{ClubFotbal|Valencia}}
| club antrenat4        = {{ClubFotbal|Sporting}}
| club antrenat5        = {{ClubFotbal|Rayo Vallecano}}
| club antrenat6        = {{ClubFotbal|CD Castellón}}
| club antrenat7        = {{ClubFotbal|Valencia}}
| club antrenat8        = {{ClubFotbal|River Plate}}
| club antrenat9        = {{ClubFotbal|Real Madrid}}
| club antrenat10       = {{ClubFotbal|Boca Juniors}}
| club antrenat11       = {{ClubFotbal|Valencia}}
| club antrenat12       = {{ClubFotbal|Real Madrid}}
| ani antrenor1        = 1967–1967
| ani antrenor2        = 1969–1970
| ani antrenor3        = 1970–1974
| ani antrenor4        = 1974–1974
| ani antrenor5        = 1975–1976
| ani antrenor6        = 1976–1977
| ani antrenor7        = 1979–1980
| ani antrenor8        = 1981–1982
| ani antrenor9        = 1982–1984
| ani antrenor10       = 1985
| ani antrenor11       = 1986–1988
| ani antrenor12       = 1990–1991
}}

local getArgs = require('Modul:Arguments').getArgs
local infobox3cols = require('Modul:Infobox3cols')
local wikidata = require('Modul:Wikidata')
local infoboxImage = require('Modul:InfoboxImage').InfoboxImage
local join = require('Modul:Separated entries').main
local StringUtils = require('Modul:StringUtils')
local DateUtils = require('Modul:DateUtils')
local lc = require('Modul:LocationAndCountry')
local bda = require('Modul:BirthDateAndAge')
local TableTools = require('Modul:TableTools')
local EditAtWikidata = require('Modul:EditAtWikidata')
local fc = require('Modul:FootballClub')
local zeroTemplate = mw.getCurrentFrame():expandTemplate{title='0', args={}}
local WDU_F = require('Modul:WikidataUtils/Football')
local allSportsData = mw.loadData('Modul:InfoboxTeamSportBio/data')

local p = {}

local text_seniorclubs = "Cluburi de seniori*"
local text_managerclubs = "Echipe antrenate"
local text_nationalteam = "Echipa națională"
local text_nationalteam_ext = ""

local function computeTeamDescriptor(teamId, endTimeFull)
	local teamIsNational = WDU_F.isNationalTeam(teamId)
	if teamIsNational then
		-- echipă națională
		local teamName = wikidata.findLinkToItemWithCallback(teamId, true, nil, WDU_F.getNationalTeamName)
		
		local countryIds = wikidata.getBestEntityIdsList(StringUtils.prependIfMissing({tostring(teamId), 'Q'}), 'P1532')
		if countryIds and #countryIds > 0 then
			local countryFlag = wikidata.findOneValueNoRef('P41', StringUtils.prependIfMissing({tostring(countryIds[1]), 'Q'}))
			if countryFlag and mw.text.trim(countryFlag) ~= '' then
				return '[[Fișier:' .. countryFlag .. '|20px|border]]&nbsp;' .. teamName
			end
		end
	else 
		return fc.byItemFromArgs(teamId, endTimeFull)
	end
end

local function computeTimeDescriptor(team)
	if team.startTime then
		team.years = mw.ustring.sub(team.startTime, -4)
		if team.endTime then 
			if mw.ustring.sub(team.endTime, -4) ~= team.startTime then 
				team.years = team.years .. '-' .. mw.ustring.sub(team.endTime, -4)
			end
		else
			team.years = team.years .. '-'
		end
	end
end

local function extractDataAndNumberFromMultiParam(argName, paramNames)
	local actualParamName = nil
	local actualParamNumber
	for paramIndex = 1, #paramNames do
		local paramIndexWithEscapedBrackets = mw.ustring.gsub(mw.ustring.gsub(paramNames[paramIndex], '%(', '%%('), '%)', '%%)')
		local nlStart, nlEnd = mw.ustring.find(argName, paramIndexWithEscapedBrackets)
		if nlStart == 1 then
			actualParamName = mw.ustring.sub(argName, 1, nlEnd)
			local presumedIndex = mw.ustring.find(argName, "%d+$") or (1 + #argName)
			local indexStr = mw.text.trim(mw.ustring.sub(argName, presumedIndex, #argName) or "")
			if indexStr == "" then actualParamNumber = 1 else actualParamNumber = 1 + tonumber(indexStr) end
		end
	end
	if not actualParamName then return nil, nil end
	return actualParamName, actualParamNumber
end

local function extractTimeFromQualifier(qualifier)
	local wdStartTimes = qualifier
	if wdStartTimes and wdStartTimes[1] and wdStartTimes[1].datatype == 'time' then
		return wikidata.printSnak(wdStartTimes[1])
	end
	return nil
end

local function extractYearFromQualifier(qualifier)
	local wdStartTimes = qualifier
	if wdStartTimes and wdStartTimes[1] and wdStartTimes[1].datatype == 'time' then
		local dateFromSnak = DateUtils.extractDateFromWikidataSnak(wdStartTimes[1])
		return dateFromSnak and tostring(dateFromSnak.year), dateFromSnak
	end
	return nil
end

local function extractCapsAndGoals(argV)
	if not argV then return {} end
	local argWithout0 = mw.ustring.gsub(argV, zeroTemplate, '')
	local refs = {}
	mw.ustring.gsub(argWithout0, mw.ustring.char(0x007f) .. '.*' .. mw.ustring.char(0x007f), function(instance) table.insert(refs, instance) end)
	argWithout0 = mw.text.unstrip(argWithout0)
	if not mw.ustring.find(argWithout0, '%(') then return {argV}, refs end
	local capsAndGoals = {}
	mw.ustring.gsub(argWithout0, '%d+', function(instance) table.insert(capsAndGoals, tostring(tonumber(instance))) end )
	return capsAndGoals, refs
end

local function processArguments(args)
	local sportsData = allSportsData and allSportsData[args['sport']] or nil
	local processedArgs = {bgcolor='b0c4de',
		fgcolor='000',
		bodystyle='line-height: 1.2em',
		titlestyle='line-height: 1.5em',
		labelstyle='white-space: nowrap; vertical-align: baseline; text-align: left',
		datastyle='vertical-align: baseline',
		datastylea='white-space: nowrap; vertical-align: baseline',
		multidatastyle='white-space: nowrap; vertical-align: baseline',
		datastyleb='white-space: nowrap; vertical-align: baseline; text-align: right',
		datastylec='white-space: nowrap; vertical-align: baseline; text-align: right',
		headerstyle='line-height: 1.5em',
		wikidata='yes'}
	processedArgs.doc = sportsData and sportsData.mainTemplate or 'Modul:InfoboxTeamSportBio'
	processedArgs.above = args['name'] or args['nume'] or args['playername'] or args['numejucător'] or args['nume jucător'] or StringUtils._emptyToNil({wikidata.findLabel(nil, nil)}) or mw.title.getCurrentTitle().text
	processedArgs.aboveclass = args['aboveclass'] or (sportsData and sportsData.header) or 'fotbal2'
	local imgName, imgCaption = (args['image'] or args['imagine']), args['imagine_descriere']
	local imgExists = false
	if imgName and mw.text.trim(imgName) ~= '' then
		if StringUtils._startsWithAny({mw.text.trim(imgName), '[['}) then
			imgName = StringUtils._substringBefore({mw.text.trim(imgName), ']]', '|'})
			imgName = StringUtils._removeStart({imgName, '[['})
		end
		imgName = StringUtils._removeStart({mw.text.trim(imgName), 'File:'})
		imgName = StringUtils._removeStart({imgName, 'Fișier:'})
		imgName = StringUtils._removeStart({imgName, 'Fişier:'})
		imgName = StringUtils._removeStart({imgName, 'Image:'})
		imgName = StringUtils._removeStart({imgName, 'Imagine:'})
		imgName = StringUtils._removeStart({imgName, 'Media:'})
		local imgTitle = mw.title.new(imgName, 6)
		if imgTitle and imgTitle.file and imgTitle.file.exists then
			imgExists = true
		end
	end
	if not imgExists then
		imgName, imgCaption = wikidata.findImageAndCaption()
	end
	if imgName and imgName ~= '' then
		processedArgs.image = infoboxImage{image=imgName, size = args['image_size'] or args['mărime'], sizedefault = frameless, alt = args['alt'], suppressplaceholder='yes'}
		processedArgs.caption = imgCaption or ''
	end
	local lineIndex = 1
	processedArgs['header' .. tostring(lineIndex)] = 'Informații generale'
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Nume complet'
	processedArgs['data' .. tostring(lineIndex)] = args['fullname'] or args['nume complet'] or args['numecomplet'] or wikidata.findOneValue('P1477')
	processedArgs['class' .. tostring(lineIndex)] = 'nickname'
	lineIndex = lineIndex + 1

	processedArgs['label' .. tostring(lineIndex)] = 'Data nașterii'
	processedArgs['data' .. tostring(lineIndex)] = args['dateofbirth'] or args['birth_date'] or args['datanașterii'] or args['data nașterii'] or bda._getBdaByWikidata{link='y'}
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Locul nașterii'
	local birthPlace = args['birth_place'] or args['cityofbirth'] or args['loculnașterii'] or args['locul nașterii']
	local birthCountry
	if birthPlace == nil then
		birthPlace = lc.displayFromParams('P19', nil, 'P569', 1, ', ')
	end
	if birthCountry == nil then
		birthCountry = args['countryofbirth'] or args['țaranașterii'] or args['țara nașterii']
	end
	if birthPlace == birthCountry then
		birthCountry = nil
	end
	processedArgs['data' .. tostring(lineIndex)] = join({birthPlace, birthCountry, separator = ',&#32;'})
	processedArgs['class' .. tostring(lineIndex)] = 'birthplace'
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Data decesului'
	processedArgs['data' .. tostring(lineIndex)] = args['dateofdeath'] or args['death_date'] or args['datadecesului'] or args['data decesului'] or bda._getDdaByWikidata{link='y'}
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Locul decesului'

	processedArgs['data' .. tostring(lineIndex)] = args['death_place'] or args['cityofdeath'] or args['loculdecesului'] or args['locul decesului'] or lc.displayFromParams('P20', nil, 'P570', 1, ', ')
	if args['countryofdeath'] or args['țaradecesului'] or args['țara decesului'] then
		processedArgs['data' .. tostring(lineIndex)] = processedArgs['data' .. tostring(lineIndex)] .. ', ' .. (args['countryofdeath'] or args['țaradecesului'] or args['țara decesului'])
	end
	processedArgs['class' .. tostring(lineIndex)] = 'deathplace'
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Naționalitate'
	processedArgs['data' .. tostring(lineIndex)] = args['nationality'] or args['naționalitate']
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Înălțime'
	processedArgs['data' .. tostring(lineIndex)] = args['height'] or args['înălțime'] or wikidata.findOneValue('P2048')
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Greutate'
	processedArgs['data' .. tostring(lineIndex)] = args['weight'] or args['greutate'] or args['weigth'] or wikidata.findOneValue('P2067')
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Poreclă'
	processedArgs['data' .. tostring(lineIndex)] = args['nickname'] or args['poreclă'] or args['porecla'] or wikidata.findOneValue('P1449')
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Post'
	processedArgs['data' .. tostring(lineIndex)] = args['position'] or args['post']
	if not args['position'] and not args['post'] then
		local wdPositions = wikidata._getValueListWithSeparator({tostring(mw.html.create('br')), 'P413', nil})
 		processedArgs['data' .. tostring(lineIndex)] = wdPositions
	end
	processedArgs['class' .. tostring(lineIndex)] = 'role'
	lineIndex = lineIndex + 1
	
	local currentClub = args['currentclub'] or args['echipaactuală'] or args['echipăactuală'] or args ['clubul actual'] or args['echipa actuală']
	if not currentClub or mw.text.trim(currentClub) == '' then
		local clubsClaims = wikidata.findBestClaimsForProperty(nil, 'P54') -- member of sports team
		if clubsClaims and #clubsClaims > 0 and clubsClaims[1].rank == 'preferred' then
			if clubsClaims[1].mainsnak.snaktype == 'value' and clubsClaims[1].mainsnak.datavalue.type == 'wikibase-entityid' then
				local clubId = clubsClaims[1].mainsnak.datavalue.value['numeric-id']
				currentClub = fc.byItemFromArgs(StringUtils.prependIfMissing({tostring(clubId), 'Q'}))
			end
		end
	end
	if currentClub and currentClub ~= '' then
		processedArgs['header' .. tostring(lineIndex)] = 'Informații despre echipă'
		lineIndex = lineIndex + 1
	end
	
	processedArgs['label' .. tostring(lineIndex)] = 'Echipa actuală'
	processedArgs['data' .. tostring(lineIndex)] = currentClub
	processedArgs['class' .. tostring(lineIndex)] = 'org'
	lineIndex = lineIndex + 1
	
	processedArgs['label' .. tostring(lineIndex)] = 'Număr'
	processedArgs['data' .. tostring(lineIndex)] = args['clubnumber'] or args['număr'] or args['numărtricou'] or StringUtils._appendToString({wikidata.loadOneValueInChain({ 'P1618' }), EditAtWikidata.displayMessage('P1618')}) or StringUtils._appendToString({wikidata.loadOneValueInChain({ 'P54', '_P1618' }), EditAtWikidata.displayMessage('P54')})
	if not processedArgs['data' .. tostring(lineIndex)] or processedArgs['data' .. tostring(lineIndex)] == '' then processedArgs['data' .. tostring(lineIndex)] = wikidata.findOneValue('P1618') end
	lineIndex = lineIndex + 1
	
	local youthclubs = {}
	local seniorclubs = {}
	local managerclubs = {}
	local nationalteams = {}
	local titles = {}
	local embedded = {}
	local hasseniorgoals = false
	local hasnationalgoals = false
	for argN,argV in pairs(args) do
		local presumedYouthYearsParamName, presumedYouthYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"youthyears", "anijuniorat", "anidetineret"})
		if presumedYouthYearsParamName and presumedYouthYearsParamNumber and type(presumedYouthYearsParamNumber) == 'number' then
			if not youthclubs[presumedYouthYearsParamNumber] then youthclubs[presumedYouthYearsParamNumber] = {} end
			youthclubs[presumedYouthYearsParamNumber].years = argV
		end
		local presumedYouthClubParamName, presumedYouthClubParamNumber = extractDataAndNumberFromMultiParam(argN, {"youthclubs", "juniorat", "echipedetineret"})
		if presumedYouthClubParamName and presumedYouthClubParamNumber and type(presumedYouthClubParamNumber) == 'number' then
			if not youthclubs[presumedYouthClubParamNumber] then youthclubs[presumedYouthClubParamNumber] = {} end
			youthclubs[presumedYouthClubParamNumber].name = argV
		end
		
		if argN == 'title' or argN == 'titlu' or mw.ustring.find(argN, 'title%d+') then
			local presumedTitleParamName, presumedTitleParamNumber = extractDataAndNumberFromMultiParam(argN, {"title", "titlu"})
			if presumedTitleParamName and presumedTitleParamNumber and type(presumedTitleParamNumber) == 'number' then
				if not titles[presumedTitleParamNumber] then titles[presumedTitleParamNumber] = {} end
				titles[presumedTitleParamNumber].name = argV
			end
		end
		
		local presumedTitleYearsParamName, presumedTitleYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"titleyears", "anititlu"})
		if presumedTitleYearsParamName and presumedTitleYearsParamNumber and type(presumedTitleYearsParamNumber) == 'number' then
			if not titles[presumedTitleYearsParamNumber] then titles[presumedTitleYearsParamNumber] = {} end
			titles[presumedTitleYearsParamNumber].years = argV
		end

		if argN == 'club' or mw.ustring.find(argN, 'clubs?%d+') == 1 or argN == 'clubs' or argN == 'echipe' or mw.ustring.find(argN, 'echipe%d+') then
			local presumedClubParamName, presumedClubParamNumber = extractDataAndNumberFromMultiParam(argN, {"club", "clubs", "echipe"})
			if presumedClubParamName and presumedClubParamNumber and type(presumedClubParamNumber) == 'number' then
				if not seniorclubs[presumedClubParamNumber] then seniorclubs[presumedClubParamNumber] = {} end
				seniorclubs[presumedClubParamNumber].name = argV
			end
		end
		
		if argN == 'ani' or mw.ustring.find(argN, 'ani%d+') == 1 or mw.ustring.find(argN, 'ani', 1, true) ~= 1 then
			local presumedYearsParamName, presumedYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"years", "ani"})
			if presumedYearsParamName and presumedYearsParamNumber and type(presumedYearsParamNumber) == 'number' then
				if not seniorclubs[presumedYearsParamNumber] then seniorclubs[presumedYearsParamNumber] = {} end
				seniorclubs[presumedYearsParamNumber].years = argV
			end
		end
		
		if mw.ustring.find(argN, 'ap%d+') == 1 or mw.ustring.find(argN, 'apariții%(goluri%)%d*') == 1 or mw.ustring.find(argN, 'ap') ~= 1 then
			local presumedCapsParamName, presumedCapsParamNumber = extractDataAndNumberFromMultiParam(argN, {"caps", "caps(goals)", "apariții(goluri)", "ap"})
			if presumedCapsParamName and presumedCapsParamNumber and type(presumedCapsParamNumber) == 'number' then
				if not seniorclubs[presumedCapsParamNumber] then seniorclubs[presumedCapsParamNumber] = {} end
				if mw.ustring.find(argV, '<') then
					seniorclubs[presumedCapsParamNumber].caps = mw.ustring.gsub(argV, zeroTemplate, '')
				else
					local capsAndGoals, capsRefs = extractCapsAndGoals(argV)
					if #capsAndGoals > 0 then seniorclubs[presumedCapsParamNumber].caps = capsAndGoals[1] end
					if #capsAndGoals > 1 then seniorclubs[presumedCapsParamNumber].goals = capsAndGoals[#capsAndGoals] end
					if capsRefs and #capsRefs > 0 then seniorclubs[presumedCapsParamNumber].refs = table.concat(capsRefs) end
					hasseniorgoals = true
				end
			end
		end

		local presumedGoalsParamName, presumedGoalsParamNumber = extractDataAndNumberFromMultiParam(argN, {"goals", "goluri"})
		if presumedGoalsParamName and presumedGoalsParamNumber and type(presumedGoalsParamNumber) == 'number' then
			if not seniorclubs[presumedGoalsParamNumber] then seniorclubs[presumedGoalsParamNumber] = {} end
			seniorclubs[presumedGoalsParamNumber].goals = argV
			hasseniorgoals = true
		end

		local presumedNtGoalsParamName, presumedNtGoalsParamNumber = extractDataAndNumberFromMultiParam(argN, {"nationalgoals", "goluri nationala", "goluri națională"})
		if presumedNtGoalsParamName and presumedNtGoalsParamNumber and type(presumedNtGoalsParamNumber) == 'number' then
			if not nationalteams[presumedNtGoalsParamNumber] then nationalteams[presumedNtGoalsParamNumber] = {} end
			nationalteams[presumedNtGoalsParamNumber].goals = argV
			hasnationalgoals = true
		end
		local presumedNtYearsParamName, presumedNtYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"nationalyears", "ani nationala", "ani națională", "anilanațională", "ani la națională"})
		if presumedNtYearsParamName and presumedNtYearsParamNumber and type(presumedNtYearsParamNumber) == 'number' then
			if not nationalteams[presumedNtYearsParamNumber] then nationalteams[presumedNtYearsParamNumber] = {} end
			nationalteams[presumedNtYearsParamNumber].years = argV
		end
		local presumedNtCapsParamName, presumedNtCapsParamNumber = extractDataAndNumberFromMultiParam(argN, {"nationalcaps", "nationala ap", "naționala ap", "aparițiilanațională(goluri)", "selecții (goluri)", "nationalcaps(goals)"})
		if presumedNtCapsParamName and presumedNtCapsParamNumber and type(presumedNtCapsParamNumber) == 'number' then
			if not nationalteams[presumedNtCapsParamNumber] then nationalteams[presumedNtCapsParamNumber] = {} end
			if mw.ustring.find(argV, '<') then
				nationalteams[presumedNtCapsParamNumber].caps = mw.ustring.gsub(argV, zeroTemplate, '')
			else
				local capsAndGoals, capsRefs = extractCapsAndGoals(argV)
				if #capsAndGoals > 0 then nationalteams[presumedNtCapsParamNumber].caps = capsAndGoals[1] end
				if #capsAndGoals > 1 then nationalteams[presumedNtCapsParamNumber].goals = capsAndGoals[#capsAndGoals] end
				if capsRefs and #capsRefs > 0 then nationalteams[presumedNtCapsParamNumber].refs = table.concat(capsRefs) end
				hasnationalgoals = true
			end
		end
		if not mw.ustring.find(argN, "nationala ap") and not mw.ustring.find(argN, "nationalteam%-update") then
			local presumedNtTeamParamName, presumedNtTeamParamNumber = extractDataAndNumberFromMultiParam(argN, {"nationalteam", "nationala", "naționala", "echipănațională", "națională"})
			if presumedNtTeamParamName and presumedNtTeamParamNumber and type(presumedNtTeamParamNumber) == 'number' then
				if not nationalteams[presumedNtTeamParamNumber] then nationalteams[presumedNtTeamParamNumber] = {} end
				nationalteams[presumedNtTeamParamNumber].name = argV
			end
		end
		local presumedMgrYearsParamName, presumedMgrYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"manageryears", "anideantrenorat", "aniantrenorat", "ani antrenor"})
		if presumedMgrYearsParamName and presumedMgrYearsParamNumber and type(presumedMgrYearsParamNumber) == 'number' then
			if not managerclubs[presumedMgrYearsParamNumber] then managerclubs[presumedMgrYearsParamNumber] = {} end
			managerclubs[presumedMgrYearsParamNumber].years = argV
		end
		if argN ~= 'echipedetineret' then
			local presumedMgrClubParamName, presumedMgrClubParamNumber = extractDataAndNumberFromMultiParam(argN, {"managerclubs", "echipeantrenate", "club antrenat"})
			if presumedMgrClubParamName and presumedMgrClubParamNumber and type(presumedMgrClubParamNumber) == 'number' then
				if not managerclubs[presumedMgrClubParamNumber] then managerclubs[presumedMgrClubParamNumber] = {} end
				managerclubs[presumedMgrClubParamNumber].name = argV
			end
		end
		if mw.ustring.find(argN, 'embedded%d+') == 1 then
			local embeddedParamName, embeddedNo = extractDataAndNumberFromMultiParam(argN, {"embedded"})
			embedded[embeddedNo] = argV
		end
	end
	processedArgs['doc-colspan'] = '3'
	if table.maxn(youthclubs) == 1 and youthclubs[1].name then
		local youthclubnameslist = mw.text.split(youthclubs[1].name, "%s*<br%s*/?>%s*")
		local youthclubyearslist = mw.text.split(youthclubs[1].years or '', "%s*<br%s*/?>%s*")
		for youthclubindex = 1, table.maxn(youthclubnameslist) do
			youthclubs[youthclubindex] = {}
			youthclubs[youthclubindex].name = youthclubnameslist[youthclubindex]
			youthclubs[youthclubindex].years = youthclubyearslist[youthclubindex]
		end
	end
	if table.maxn(seniorclubs) == 1 and seniorclubs[1].name then
		local seniorclubnameslist = mw.text.split(seniorclubs[1].name or '', "%s*<%s*br%s*/?>%s*")
		local seniorclubyearslist = mw.text.split(seniorclubs[1].years or '', "%s*<%s*br%s*/?>%s*")
		local seniorclubcapslist = mw.text.split(seniorclubs[1].caps or '', "%s*<%s*br%s*/?>%s*")
		for seniorclubindex = 1, table.maxn(seniorclubyearslist) do
			local capsAndGoals = extractCapsAndGoals(seniorclubcapslist[seniorclubindex])
			if mw.ustring.lower(seniorclubyearslist[seniorclubindex]) == 'total' then
				if #capsAndGoals > 0 then args['totalcaps'] = tonumber(capsAndGoals[1]) end
				if #capsAndGoals > 1 then args['totalgoals'] = tonumber(capsAndGoals[#capsAndGoals]) end
				if args['totalcaps'] or args['totalgoals'] then hasseniorgoals = true end
			else
				if seniorclubs[seniorclubindex] == nil then seniorclubs[seniorclubindex] = {} end
				seniorclubs[seniorclubindex].name = seniorclubnameslist[seniorclubindex]
				seniorclubs[seniorclubindex].years = seniorclubyearslist[seniorclubindex]
				if #capsAndGoals > 0 then seniorclubs[seniorclubindex].caps = tonumber(capsAndGoals[1]) end
				if #capsAndGoals > 1 then seniorclubs[seniorclubindex].goals = tonumber(capsAndGoals[#capsAndGoals]) end
				if seniorclubs[seniorclubindex].caps or seniorclubs[seniorclubindex].goals then hasseniorgoals = true end
			end
		end
	end
	if table.maxn(nationalteams) == 1 and nationalteams[1].name then
		local nationalteamnameslist = mw.text.split(nationalteams[1].name or '', "%s*<br%s*/?>%s*")
		local nationalteamyearslist = mw.text.split(nationalteams[1].years or '', "%s*<br%s*/?>%s*")
		local nationalteamcapslist = mw.text.split(nationalteams[1].caps or '', "%s*<br%s*/?>%s*")
		for nationalteamindex = 1, table.maxn(nationalteamnameslist) do
			local eachyouthclub = {}
			if nationalteams[nationalteamindex] == nil then nationalteams[nationalteamindex] = {} end
			nationalteams[nationalteamindex].name = nationalteamnameslist[nationalteamindex]
			nationalteams[nationalteamindex].years = nationalteamyearslist[nationalteamindex]
			local capsAndGoals = extractCapsAndGoals(nationalteamcapslist[nationalteamindex])
			if #capsAndGoals > 0 then nationalteams[nationalteamindex].caps = tonumber(capsAndGoals[1]) end
			if #capsAndGoals > 1 then nationalteams[nationalteamindex].goals = tonumber(capsAndGoals[#capsAndGoals]) end
			if nationalteams[nationalteamindex].caps or nationalteams[nationalteamindex].goals then hasnationalgoals = true end
		end
	end
	if table.maxn(managerclubs) == 1 and managerclubs[1].name then
		local managerclubnameslist = mw.text.split(managerclubs[1].name or '', "%s*<br%s*/?>%s*")
		local managerclubyearslist = mw.text.split(managerclubs[1].years or '', "%s*<br%s*/?>%s*")
		for managerclubindex = 1, table.maxn(managerclubnameslist) do
			managerclubs[managerclubindex] = {}
			managerclubs[managerclubindex].name = managerclubnameslist[managerclubindex]
			managerclubs[managerclubindex].years = managerclubyearslist[managerclubindex]
		end
	end

	-- extract teams from wikidata
	if table.maxn(nationalteams) + table.maxn(seniorclubs) == 0 then
		local teamClaimsReversed = wikidata.findSortedClaimsForProperty(nil, 'P54') --member of sports team
		local teamClaims = {}
		if #teamClaimsReversed > 0 then
			text_seniorclubs = text_seniorclubs .. ' ' .. EditAtWikidata.displayMessage('P54')
			text_nationalteam_ext = ' ' .. EditAtWikidata.displayMessage('P54')
		end
		for teamClaimIdx = 1,#teamClaimsReversed do
			table.insert(teamClaims, 1, teamClaimsReversed[teamClaimIdx])
		end
		for teamClaimIdx = 1,#teamClaims do
			if teamClaims[teamClaimIdx].mainsnak.snaktype == 'value' and teamClaims[teamClaimIdx].mainsnak.datatype == 'wikibase-item' then
				local teamId = teamClaims[teamClaimIdx].mainsnak.datavalue.value.id
				local team = {}
				
				team.startTime = nil
				team.endTime = nil
				local startTimeFull, endTimeFull
				if teamClaims[teamClaimIdx].qualifiers then
					team.startTime, startTimeFull = extractYearFromQualifier(teamClaims[teamClaimIdx].qualifiers['P580'])
					team.endTime, endTimeFull = extractYearFromQualifier(teamClaims[teamClaimIdx].qualifiers['P582'])
					if teamClaims[teamClaimIdx].qualifiers['P1350'] and teamClaims[teamClaimIdx].qualifiers['P1350'][1] and teamClaims[teamClaimIdx].qualifiers['P1350'][1].datatype == 'quantity' then
						team.caps = tonumber(teamClaims[teamClaimIdx].qualifiers['P1350'][1].datavalue.value.amount)
						if WDU_F.isNationalTeam(teamId) then 
							hasnationalgoals = true 
						else 
							hasseniorgoals = true
						end
					end
					if teamClaims[teamClaimIdx].qualifiers['P1351'] and teamClaims[teamClaimIdx].qualifiers['P1351'][1] and teamClaims[teamClaimIdx].qualifiers['P1351'][1].datatype == 'quantity' then
						team.goals = tonumber(teamClaims[teamClaimIdx].qualifiers['P1351'][1].datavalue.value.amount)
					end
					if teamClaims[teamClaimIdx].qualifiers['P1642'] and teamClaims[teamClaimIdx].qualifiers['P1642'][1] and teamClaims[teamClaimIdx].qualifiers['P1642'][1].datatype == 'wikibase-item' then --acquisition transaction
						if teamClaims[teamClaimIdx].qualifiers['P1642'][1].datavalue.value['numeric-id'] == 2914547 then -- loan
							team.loan = true
						end
					end
				end

				team.name = computeTeamDescriptor(teamId, endTimeFull)
				computeTimeDescriptor(team)
				table.insert(WDU_F.isNationalTeam(teamId) and nationalteams or seniorclubs, team)
			end
		end
	end
	
	if table.maxn(managerclubs) == 0 then
		local teamClaimsReversed = wikidata.findSortedClaimsForProperty(nil, 'P6087')
		if #teamClaimsReversed > 0 then
			text_managerclubs = text_managerclubs .. ' ' .. EditAtWikidata.displayMessage('P6087')
		end
		if teamClaimsReversed then
			local teamClaims = {}
			for teamClaimIdx,eachTeamClaim in ipairs(teamClaimsReversed) do
				table.insert(teamClaims, 1, teamClaimsReversed[teamClaimIdx])
			end
			for teamClaimIdx,eachTeamClaim in ipairs(teamClaims) do
				if eachTeamClaim.mainsnak.datatype == 'wikibase-item' and eachTeamClaim.mainsnak and eachTeamClaim.mainsnak.snaktype == 'value' then
					local teamId = eachTeamClaim.mainsnak.datavalue.value.id
					local team = {}
					
					team.startTime = nil
					team.endTime = nil
					local startTimeFull, endTimeFull
					if teamClaims[teamClaimIdx].qualifiers then
						team.startTime, startTimeFull = extractYearFromQualifier(teamClaims[teamClaimIdx].qualifiers['P580'])
						team.endTime, endTimeFull = extractYearFromQualifier(teamClaims[teamClaimIdx].qualifiers['P582'])
					end
					team.name = computeTeamDescriptor(teamId, endTimeFull)
					computeTimeDescriptor(team)
					table.insert(managerclubs, team)
				end
			end
		end
	end

	--enter teams into precessed args
	if table.maxn(youthclubs) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = 'Cluburi de juniori'
		lineIndex = lineIndex + 1
		processedArgs['label' .. tostring(lineIndex)] = 'Ani'
		processedArgs['data' .. tostring(lineIndex)] = "'''Club'''"
		lineIndex = lineIndex + 1
		for youthclubIdx = 1,table.maxn(youthclubs) do
			if youthclubs[youthclubIdx] then
				local youthclubspan = mw.html.create('span')
				youthclubspan:css('font-weight', 'normal')
				processedArgs['label' .. tostring(lineIndex)] = tostring(youthclubspan:wikitext(youthclubs[youthclubIdx].years or ''))
				processedArgs['data' .. tostring(lineIndex)] = youthclubs[youthclubIdx].name or ''
				lineIndex = lineIndex + 1
			end
		end
	end
	if table.maxn(seniorclubs) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = text_seniorclubs
		lineIndex = lineIndex + 1
		processedArgs['label' .. tostring(lineIndex)] = 'Ani'
		clubSuffix = ''
		if hasseniorgoals == true then
			processedArgs['data' .. tostring(lineIndex) .. 'b'] = "'''Ap'''"
			processedArgs['data' .. tostring(lineIndex) .. 'c'] = "'''(G)'''"
			clubSuffix = 'a'
		end
		processedArgs['data' .. tostring(lineIndex) .. clubSuffix] = "'''Club'''"
		lineIndex = lineIndex + 1
		for clubIdx = 1,table.maxn(seniorclubs) do
			local clubspan = mw.html.create('span'):css('font-weight', 'normal')
			if seniorclubs[clubIdx] then
				processedArgs['label' .. tostring(lineIndex)] = tostring(clubspan:wikitext(seniorclubs[clubIdx].years or ''))
				processedArgs['data' .. tostring(lineIndex) .. clubSuffix] = seniorclubs[clubIdx].name
				if seniorclubs[clubIdx].loan then 
					processedArgs['data' .. tostring(lineIndex) .. clubSuffix] = '→ ' .. processedArgs['data' .. tostring(lineIndex) .. clubSuffix]
				end
				processedArgs['data' .. tostring(lineIndex) .. 'b'] = tostring(nil == seniorclubs[clubIdx].caps and '' or seniorclubs[clubIdx].caps)
				if seniorclubs[clubIdx].goals ~= nil then
					processedArgs['data' .. tostring(lineIndex) .. 'c'] = '(' .. tostring(seniorclubs[clubIdx].goals) .. ')' .. (seniorclubs[clubIdx].refs or '')
					processedArgs['doc-colspan'] = '4'
				end
				lineIndex = lineIndex + 1
			end
		end
		if args['totalcaps(goals)'] then
			local capsAndGoals = extractCapsAndGoals(args['totalcaps(goals)'])
			if #capsAndGoals > 0 then args['totalcaps'] = tonumber(capsAndGoals[1]) end
			if #capsAndGoals > 1 then args['totalgoals'] = tonumber(capsAndGoals[#capsAndGoals]) end
		end
		natSuffix = ''
		if args['totalyears'] or args['totalcaps'] then
			processedArgs['label' .. tostring(lineIndex)] = args['totalyears'] or args['totalcaps'] and 'Total'
			processedArgs['data' .. tostring(lineIndex) .. clubSuffix] = args['totalyears'] and args['totalcaps'] and "'''Total'''"
			processedArgs['data' .. tostring(lineIndex) .. 'b'] = tostring(args['totalcaps'])
			if args['totalgoals'] ~= nil then
				processedArgs['data' .. tostring(lineIndex) .. 'c'] = '(' .. tostring(args['totalgoals']) .. ')'
				processedArgs['doc-colspan'] = '4'
			end
			lineIndex = lineIndex + 1
		end
	end
	if table.maxn(nationalteams) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = text_nationalteam .. ((args['ntupdate'] or args['nationalteam-update']) and '<sup>#</sup>' or '') .. text_nationalteam_ext
		lineIndex = lineIndex + 1
		processedArgs['label' .. tostring(lineIndex)] = 'Ani'
		nationSuffix = ''
		if hasnationalgoals == true then
			processedArgs['data' .. tostring(lineIndex) .. 'b'] = "'''Ap'''"
			processedArgs['data' .. tostring(lineIndex) .. 'c'] = "'''(G)'''"
			nationSuffix = 'a'
		end
		processedArgs['data' .. tostring(lineIndex) .. nationSuffix] = "'''Țară'''"
		lineIndex = lineIndex + 1
		for clubIdx = 1,table.maxn(nationalteams) do
			local clubspan = mw.html.create('span'):css('font-weight', 'normal')
			if nationalteams[clubIdx] then
				processedArgs['label' .. tostring(lineIndex)] = tostring(clubspan:wikitext(nationalteams[clubIdx].years or ''))
				processedArgs['data' .. tostring(lineIndex) .. nationSuffix] = nationalteams[clubIdx].name
				processedArgs['data' .. tostring(lineIndex) .. 'b'] = tostring(nil == nationalteams[clubIdx].caps and '' or nationalteams[clubIdx].caps)
				if nationalteams[clubIdx].goals ~= nil then
					processedArgs['data' .. tostring(lineIndex) .. 'c'] = StringUtils._encloseString({tostring(nationalteams[clubIdx].goals), '(', ')'}) .. (nationalteams[clubIdx].refs or '')
					processedArgs['doc-colspan'] = '4'
				end
				lineIndex = lineIndex + 1
			end
		end
	end
	if table.maxn(titles) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = "Titluri"
		lineIndex = lineIndex + 1
		for titleIdx = 1,table.maxn(titles) do
			if titles[titleIdx] then
				processedArgs['label' .. tostring(lineIndex)] = titles[titleIdx].years
				processedArgs['data' .. tostring(lineIndex)] = titles[titleIdx].name
				lineIndex = lineIndex + 1
			end
		end
	end

	if table.maxn(managerclubs) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = text_managerclubs
		lineIndex = lineIndex + 1
		for clubIdx = 1,table.maxn(managerclubs) do
			local clubspan = mw.html.create('span'):css('font-weight', 'normal')
			if managerclubs[clubIdx] then
				processedArgs['label' .. tostring(lineIndex)] = tostring(clubspan:wikitext(managerclubs[clubIdx].years or ''))
				processedArgs['data' .. tostring(lineIndex)] = managerclubs[clubIdx].name
				lineIndex = lineIndex + 1
			end
		end
	end
	
	embedded = TableTools.compressSparseArray(embedded)
	for embeddedIdx = 1, #embedded do
		processedArgs['data' .. tostring(lineIndex)] = embedded[embeddedIdx]
		lineIndex = lineIndex + 1
	end
	
	processedArgs['header' .. tostring(lineIndex)] = mw.getCurrentFrame():expandTemplate{title = 'Infobox medal templates', args = { title = args['medaltemplates-title'] or 'Palmares', medals = args['medaltemplates'] or '', expand = args['medaltemplates-expand'] or 'yes'} }
	lineIndex = lineIndex + 1
	
	processedArgs['header' .. tostring(lineIndex)] = args['module']
	lineIndex = lineIndex + 1
	
	processedArgs['belowstyle'] = 'color:darkslategray; font-size:95%'
	local belowparts = {}
	if table.maxn(seniorclubs) > 0 then
		local clubUpdate = args['pcupdate'] or args['club-update'] or args['reîmprospătareechipadeclub'] or args['actualizare club']
		local clubnote = '<span style="color:var(--color-subtle, darkslategray)">&#42; Apariții și goluri pentru echipa de club doar în cadrul campionatului intern</span>'
		if clubUpdate then
			clubnote = clubnote .. ' la data de ' .. clubUpdate
		end
		table.insert(belowparts, clubnote)
	end
	local ntUpdate = args['ntupdate'] or args['nationalteam-update'] or args['reîmprospătarenațională'] or args['actualizare națională']
	if table.maxn(nationalteams) > 0 and ntUpdate then
		table.insert(belowparts, '# Selecții și goluri la națională până la data de ' .. ntUpdate)
	end
	if #belowparts > 0 then
		processedArgs['below'] = table.concat(belowparts, tostring(mw.html.create('br')))
	end
	
	return processedArgs
end

p.infobox = function(frame)
	local args = getArgs(frame)
	return p._infobox(args)
end

p._infobox = function(args)
	local infoboxArgs = processArguments(args)
	return infobox3cols.infobox(infoboxArgs)
end

return p