Modul:InfoboxFootballBio

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

Scop[modificare sursă]

{{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 sursă]

Model 1[modificare sursă]

Pentru jucători în timpul carierei

{{Infocaseta Fotbalist
|numejucător = Petru Postollachi
|imagine = 
|numecomplet = Petru Postolachi 
|înălțime = 1.77
|greutate = 75 kg
|datanașterii =12 iulie 1994 
|loculnașterii =  Pelinia Riscani 
|țaranașterii = Republica Moldova 
|naționalitate = moldoveneasca
|echipaactuală = CS Costesti
|număr = 10
|poreclă =
|post = mijlocaș central 
|anijuniorat = 
|juniorat = LPS PIATRA NEAMȚ 
|ani =2011-2013
|echipe =Speranta Drochia 
|apariții(goluri) =12 (1) 
|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 =
}}

Model 2[modificare sursă]

Fără separatori de tipul <br>
{{Infocaseta Fotbalist
| nume jucător=Petru Postolachi 
| imagine= 
| nume complet = Petru Nicolai Postolachi 
| data nașterii = 12 iulie 1994
| locul nașterii= Pelinia, Riscani
| țara nașterii  =Republica Moldova
| data decesului =
| locul decesului=
| țara decesului=
| înățime =1.77 m 
| greutate = 75 kg
| post = mijlocaș central 
| clubul actual= CS Costești 
| număr= 23
| anijuniorat1=2008-2010
| juniorat1= ȘS Riscani
| anijuniorat2=2010
| juniorat2=LPS Bihorul Oradea 
| anijuniorat3=2011-2013
| juniorat3=LPS PIATRA NEAMȚ 
| ani1 = 2013-2014
| club1 =Speranta Drochia 
| ap1 = 12
| goluri1 = 1
| ani2 = 2014
| club2 = CF Riscani
| ap2 = 2
| goluri2 = 0
| ani3 = 2015
| club3 = Olhionia
| ap3 = 4
| goluri3 = 1
| ani4 =2015
| club4 = CS Costești 
| ap4 =14
| goluri4 = 8
| ani5 =2016
| club5 =Kolos Pelinia 
| ap5 =14
| goluri5 =8
| 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 sursă]

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 =

Exemple[modificare sursă]

Alfredo Di Stéfano
Informații generale
Nume complet Alfredo Di Stéfano Laulhé
Data nașterii (91 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 Bianco con striscia Rossa.png Club Atlético River Plate 65 (49)
1946 Flag of None.svg Club Atlético Huracán 25 (0)
1949–1953 Flag of None.svg Millonarios 101 (23)
1953–1964 600px Bianco viola reale.png Real Madrid 282 (216)
1964–1966 Flag of None.svg Espanyol Barcelona 47 (11)
Echipa națională
1947 Flag of Argentina.svg Argentina 6 (6)
1949 Flag of Colombia.svg Columbia 4 (0)
1957–1961 Flag of Spain.svg Spania 31 (23)
Echipe antrenate
1967–1967 600px Bianco Con Striscia Verde.png Elche
1969–1970 600px Blu e Giallo (Bordato) con stelle Gialle.png Boca Juniors
1970–1974 600px Bianco e Nero Valenciano.png Valencia
1974–1974 600px Bianco e Verde orizzontale con leone Dorato.png Sporting
1975–1976 Bianco con striscia Rossa.png Rayo Vallecano
1976–1977 Flag of None.svg CD Castellón
1979–1980 600px Bianco e Nero Valenciano.png Valencia
1981–1982 Bianco con striscia Rossa.png Club Atlético River Plate
1982–1984 600px Bianco viola reale.png Real Madrid
1985 600px Blu e Giallo (Bordato) con stelle Gialle.png Boca Juniors
1986–1988 600px Bianco e Nero Valenciano.png Valencia
1990–1991 600px Bianco viola reale.png Real Madrid
* Apariții și goluri pentru echipa de club doar în cadrul campionatului național
† Apariții (Goluri).
{{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 p = {}

local text_seniorclubs = "Cluburi de seniori*"

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)
	end
	return nil
end

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

local function processArguments(args)
	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='white-space: nowrap; 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',
		doc='Modul:InfoboxFootballBio',
		wikidata='yes'}
	processedArgs.above = args['name'] or args['playername'] or args['numejucător'] or args['nume jucător'] or wikidata.findLabel(nil, nil)
	processedArgs.aboveclass = args['aboveclass'] 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['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']
	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({ '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 embedded = {}
	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 == '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 = extractCapsAndGoals(argV)
					if #capsAndGoals > 0 then seniorclubs[presumedCapsParamNumber].caps = capsAndGoals[1] end
					if #capsAndGoals > 1 then seniorclubs[presumedCapsParamNumber].goals = capsAndGoals[#capsAndGoals] end
				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
		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
		end
		local presumedNtYearsParamName, presumedNtYearsParamNumber = extractDataAndNumberFromMultiParam(argN, {"nationalyears", "ani nationala", "ani națională", "anilanaț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)", "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 = extractCapsAndGoals(argV)
				if #capsAndGoals > 0 then nationalteams[presumedNtCapsParamNumber].caps = capsAndGoals[1] end
				if #capsAndGoals > 1 then nationalteams[presumedNtCapsParamNumber].goals = capsAndGoals[#capsAndGoals] end
			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ă"})
			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
			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
			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
		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')
		end
		for teamClaimIdx = 1,#teamClaimsReversed do
			table.insert(teamClaims, 1, teamClaimsReversed[teamClaimIdx])
		end
		for teamClaimIdx = 1,#teamClaims do
			if teamClaims[teamClaimIdx].mainsnak.datatype == 'wikibase-item' then
				local teamId = teamClaims[teamClaimIdx].mainsnak.datavalue.value['numeric-id']
				local teamTypeIds = wikidata.getEntityIdsList('Q' .. teamId, 'P31')
				local teamEntity = mw.wikibase.getEntityObject('Q' .. teamId)
				local teamArticleName = teamEntity:getSitelink()
				local teamName = teamEntity:getLabel()
				local team = {}
				
				local isNationalTeam = false
				for teamTypeIdN, teamTypeIdV in pairs(teamTypeIds) do
					-- verify if item is instance of "association football national team"
					if tostring(teamTypeIdV) == '6979593' or tostring(teamTypeIdV) == '21945604' then isNationalTeam = true end
					local teamTypeSuperClasses = wikidata.getEntityIdsList(StringUtils.prependIfMissing({tostring(teamTypeIdV), 'Q'}), 'P279')
					if teamTypeSuperClasses then for _,eachTeamTypeSuperClass in pairs(teamTypeSuperClasses) do
						if tostring(eachTeamTypeSuperClass) == '6979593' or tostring(eachTeamTypeSuperClass) == '21945604' then isNationalTeam = true end
					end end
				end
				if isNationalTeam then
					-- echipă națională
					team.name = wikidata.findLinkToItemWithLabelFromAnyClaim(teamId, true, { 'P1813', 'P1532' })
					
					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
							team.name = '[[Fișier:' .. countryFlag .. '|20px|border]]&nbsp;' .. team.name
						end
					end
				else 
					-- team.name = wikidata.findLinkToItemWithLabelFromClaim(teamId, true, 'P1813')
					team.name = fc.byItemFromArgs(StringUtils.prependIfMissing({tostring(teamId), 'Q'}))
				end
				team.startTime = nil
				team.endTime = nil
				if teamClaims[teamClaimIdx].qualifiers then
					team.startTime = extractYearFromQualifier(teamClaims[teamClaimIdx].qualifiers['P580'])
					team.endTime = 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)
					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
					mw.logObject(teamClaims[teamClaimIdx].qualifiers['P1642'], 'acq transaction')
					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
				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
				table.insert(isNationalTeam and nationalteams or seniorclubs, team)
			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'
		processedArgs['data' .. tostring(lineIndex) .. 'a'] = "'''Club'''"
		processedArgs['data' .. tostring(lineIndex) .. 'b'] = "'''Ap<sup>†</sup>'''"
		processedArgs['data' .. tostring(lineIndex) .. 'c'] = "'''(G)<sup>†</sup>'''"
		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) .. 'a'] = seniorclubs[clubIdx].name
				if seniorclubs[clubIdx].loan then 
					processedArgs['data' .. tostring(lineIndex) .. 'a'] = '→ ' .. processedArgs['data' .. tostring(lineIndex) .. 'a']
				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) .. ')'
					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
		if args['totalyears'] or args['totalcaps'] then
			processedArgs['label' .. tostring(lineIndex)] = args['totalyears'] or args['totalcaps'] and 'Total'
			processedArgs['data' .. tostring(lineIndex) .. 'a'] = 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)] = "Echipa națională" .. ((args['ntupdate'] or args['nationalteam-update']) and '<sup>‡</sup>' or '')
		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) .. 'a'] = 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'] = '(' .. tostring(nationalteams[clubIdx].goals) .. ')'
					processedArgs['doc-colspan'] = '4'
				end
				lineIndex = lineIndex + 1
			end
		end
	end

	if table.maxn(managerclubs) > 0 then
		processedArgs['header' .. tostring(lineIndex)] = "Echipe antrenate"
		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 ''} }
	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 = '&#42; Apariții și goluri pentru echipa de club doar în cadrul campionatului național'
		if clubUpdate then
			clubnote = clubnote .. ' la data de ' .. clubUpdate
		end
		table.insert(belowparts, clubnote)
	end
	if table.maxn(seniorclubs) + table.maxn(nationalteams) > 0 then
		table.insert(belowparts, '† Apariții (Goluri).')
	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