Modul:InfoboxTeamSportBio
Utilizează Lua: |
Format internaționalizat. Acceptă și parametrii infocasetei de pe Wikipedia engleză. |
Scop
modificareModul 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
modificareModel 1
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 = }} |
Model 2
modificare- 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 =
Exemple
modificareAlfredo 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 | |||
Modifică date / text |
{{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]] ' .. 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 = ', '})
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)">* 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