Modul:Sportserie WD
Utseende
Dokumentationen för denna modul kan skapas på Modul:Sportserie WD/dok
p= {}
local sd = require( 'Modul:Sportdata' )
local sd = require( 'Modul:Referenshantering' )
p.iRefcounter=0
p.infobox=function(frame)
local bFinished=false
if (frame.args['id']) then
entityid=frame.args['id']
else
entityid=mw.wikibase.getEntityIdForCurrentPage()
end
if not (entityid==nil) then
iCounter=1
entity=mw.wikibase.getEntity(entityid)
myArgs={}
wdTitle=getLabelByEntity( entityid )
myArgs={titel=wdTitle}
myArgs[txtBodyStyle]="width:" .. "320px" -- iLabelWidth
myArgs[txtLabelStyle]="width:" .. "35%" -- iLabelWidth
myArgs[txtDataStyle]="width:" .. "65%" -- iDataWidth
idPrev=getOneEntityId(entity,'P155')
idNext=getOneEntityId(entity,'P156')
claimInstanceOf=entity:getBestStatements( 'P31' )
bMultisport=false
for k, value in pairs(claimInstanceOf) do
iInstanceOf=read(value,'id')
if (iInstanceOf=='Q167170') then bMultisport=true end
end
claimLeague=entity:getBestStatements( 'P3450' )[1]
if claimLeague then
idLeague=read(claimLeague,'id')
entityLeague=mw.wikibase.getEntity(idLeague)
if not(idPrev) then
idPrev=getPropertyId(claimLeague,'P155')
end
if not(idNext) then
idNext=getPropertyId(claimLeague,'P156')
end
txtPrev=''
if idPrev then
txtSitelink=mw.wikibase.getSitelink(idPrev)
if (txtSitelink) then
txtPrev='← [[' .. txtSitelink .. '|' .. txtPreviousLabel .. ']]'
end
end
txtNext=''
if idNext then
txtSitelink=mw.wikibase.getSitelink(idNext)
if (txtSitelink) then
txtNext='[[' .. txtSitelink .. '|' .. txtNextLabel .. ']] →'
end
end
myArgs[txtHeaderStyle] = txtStyleMain
myArgs[txtLabel .. iCounter]=txtCompetitionLabel
myArgs[txtContent .. iCounter]=firstToUpper(txtWikilink(idLeague)) .. txtEditPen(entityid,'P3450')
iCounter=iCounter+1
entitySport=entityLeague:getBestStatements( 'P641' )
if next(entitySport) then
idSport=read(entitySport[1],'id')
myArgs[txtLabel .. iCounter]=" – " .. txtSportLabel
myArgs[txtContent .. iCounter]='[[' .. firstToUpper(mw.wikibase.getLabel(idSport)) .. ']]'
iCounter=iCounter+1
end
entityClass=entityLeague:getBestStatements( 'P2094' )
if next(entityClass) then
idClass=read(entityClass[1],'id')
myArgs[txtLabel .. iCounter]=" – " .. txtClassLabel
myArgs[txtContent .. iCounter]=firstToUpper(mw.wikibase.getLabel(idClass))
-- Check if it is for any age class, and if so add information about maximum age
entityAgeClass=entityLeague:getBestStatements( 'P4135' )
if next(entityAgeClass) then
fAge=read(entityAgeClass[1],'amount')
myArgs[txtContent .. iCounter]=myArgs[txtContent .. iCounter] .. ' (max ' .. string.sub(fAge,2) .. ' ' .. txtYearLabel .. ')'
end
iCounter=iCounter+1
end
--For area try in the order P131 (administrative area), P17 (country), P30 (continent)
claimsArea=entityLeague:getBestStatements( 'P131' )
if not(next(claimsArea)) then
claimsArea=entityLeague:getBestStatements( 'P17' )
end
if not(next(claimsArea)) then
claimsArea=entityLeague:getBestStatements( 'P30' )
end
bFirstArea=true
txtArea=''
for k, value in pairs(claimsArea) do
idArea=read(value,'id')
if (bFirstArea) then
bFirstArea=false
else
txtArea=txtArea .. txtAnd
end
txtArea=txtArea..firstToUpper(txtWikilink(idArea))
end
if (bFirstArea==false) then
myArgs[txtLabel .. iCounter]=" – " .. txtAreaLabel
myArgs[txtContent .. iCounter]=txtArea
iCounter=iCounter+1
end
claimsOrganiser=entityLeague:getBestStatements( 'P664' )
bHasAtLeastOneOrganiser=false
txtOrganisers=''
for k, value in pairs(claimsOrganiser) do
if (bHasAtLeastOneOrganiser==false) then
bHasAtLeastOneOrganiser=true
else
txtOrganisers=txtOrganisers..', '
end
idOrganiser=read(value,'id')
txtOrganisers=txtOrganisers..'[[' .. firstToUpper(mw.wikibase.getLabel(idOrganiser)) .. ']]'
end
if (bHasAtLeastOneOrganiser) then
myArgs[txtLabel .. iCounter]=" – " .. txtOrganiserLabel
myArgs[txtContent .. iCounter]=txtOrganisers
iCounter=iCounter+1
end
else
txtPrev=''
txtNext=''
end
txtEditionCount=entity:formatPropertyValues( 'P393' )
if txtEditionCount then
myArgs[txtLabel .. iCounter]=txtEditionLabel
myArgs[txtContent .. iCounter]=txtEditionCount.value
iCounter=iCounter+1
end
entityStart=entity:getBestStatements( 'P580' )
if next(entityStart) then
formattedStart=entity:formatPropertyValues( 'P580' )
txtDateFrom=read(entityStart[1],'time')
txtYearFrom=string.sub(txtDateFrom,2,5)
myArgs[txtLabel .. iCounter]=txtPeriodLabel
myArgs[txtContent .. iCounter]=formattedStart['value'] .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,entityStart[1].references,entityid,'P580')) .. txtEditPen(entityid,'P580') .. ' – '
entityEnd=entity:getBestStatements( 'P582' )
if next(entityEnd) then
bFinished=true
txtDateTo=read(entityEnd[1],'time')
txtYearTo=string.sub(txtDateTo,2,5)
formattedEnd=entity:formatPropertyValues( 'P582' )
if (txtDateFrom==txtDateTo) then
myArgs[txtContent .. iCounter]=formattedEnd['value'] .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,entityEnd[1].references,entityid,'P582')) .. txtEditPen(entityid,'P582')
else
if (txtYearFrom==txtYearTo) then
iMonthFrom=string.sub(txtDateFrom,7,8)
iMonthTo=string.sub(txtDateTo,7,8)
formattedStart['value'] =string.sub(formattedStart['value'] ,1,-6)
if (iMonthFrom==iMonthTo) then
iSpaceChar=string.find(formattedStart['value']," ")
formattedStart['value']=string.sub(formattedStart['value'],1,iSpaceChar-1)
end
end
myArgs[txtContent .. iCounter]=formattedStart['value'] .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,entityStart[1].references,entityid,'P580')) .. txtEditPen(entityid,'P580') .. ' – ' .. formattedEnd['value'] .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,entityEnd[1].references,entityid,'P582')) .. txtEditPen(entityid,'P582')
end
end
iCounter=iCounter+1
end
txtNoTeams=entity:formatPropertyValues( 'P1132' )
if txtNoTeams then
myArgs[txtLabel .. iCounter]=txtNoTeamsLabel
myArgs[txtContent .. iCounter]=txtNoTeams.value
iCounter=iCounter+1
end
txtNoGames=entity:formatPropertyValues( 'P1350' )
if txtNoGames then
myArgs[txtLabel .. iCounter]=txtNoGamesLabel
myArgs[txtContent .. iCounter]=txtNoGames.value
iCounter=iCounter+1
end
claimsHosts=entity:getBestStatements( 'P17' )
txtHosts=''
iHostNo=1
iHosts=#(claimsHosts)
txtHostRefs=''
for k, value in pairs(claimsHosts) do
iHost=read(value,'id')
if not (iHostNo==1) then
if not (iHostNo==iHosts) then
txtHosts = txtHosts .. ', '
else
txtHosts = txtHosts .. txtAnd
end
end
txtCountry=getLabelByEntity(iHost);
txtHosts=txtHosts .. frame:expandTemplate{ title = txtFlagIconTemplate , args={txtCountry}} .. ' [[' .. txtCountry .. ']]'
-- txtHostRefs = txtHostRefs .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P17'))
iHostNo=iHostNo+1
end
-- Only show if there is one or several hosts, and that host is not the same as area of the competition
-- i.e. don't show if it is a national competition and the country is repeated as the host
if (iHosts>0 and not (iHosts==1 and iHost==idArea)) then
if (iHosts>1) then
txtTmpLabel=txtHostsLabel
else
txtTmpLabel=txtHostLabel
end
myArgs[txtLabel .. iCounter]= txtTmpLabel .. txtEditPen(entityid,'P17');
myArgs[txtContent .. iCounter]=txtHosts .. txtHostRefs
iCounter=iCounter+1
end
claimsHostCities=entity:getBestStatements( 'P276' )
txtHostCities=''
iHostCityNo=1
iHostCities=#(claimsHostCities)
txtHostCitiesRefs=''
for k, value in pairs(claimsHostCities) do
iHostCity=read(value,'id')
if not (iHostCityNo==1) then
if not (iHostCityNo==iHostCities) then
txtHostCities = txtHostCities .. ', '
else
txtHostCities = txtHostCities .. txtAnd
end
end
txtHostCities=txtHostCities .. txtWikilink(iHostCity)
-- txtHostRefs = txtHostRefs .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P17'))
iHostCityNo=iHostCityNo+1
end
if (iHostCities>0) then
if (iHostCities>1) then
txtTmpLabel=txtHostCityLabel
else
txtTmpLabel=txtHostCitiesLabel
end
myArgs[txtLabel .. iCounter]= txtTmpLabel .. txtEditPen(entityid,'P17');
myArgs[txtContent .. iCounter]=txtHostCities .. txtHostCitiesRefs
iCounter=iCounter+1
end
if (not bMultisport) then -- Only show results if not a multisport event
claimsTeams=entity:getBestStatements( 'P1923' )
first={}
second={}
third={}
refs={}
for k, value in pairs(claimsTeams) do
iTeam=read(value,'id')
iPos=0
if (value.qualifiers) then
iPos=string.sub(readQualifier(value.qualifiers.P1352[1],'amount'),2,-1)
end
if (iPos=="1") then
table.insert(first,iTeam)
refs[iTeam]=txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P1352')) .. txtEditPen(entityid,value.id)
end
if (iPos=="2") then
table.insert(second,iTeam)
refs[iTeam]=txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P1352')) .. txtEditPen(entityid,value.id)
end
if (iPos=="3") then
table.insert(third,iTeam)
refs[iTeam]=txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P1352')) .. txtEditPen(entityid,value.id);
end
end
bSomeoneplaced=false
if ((not(next(first) == nil)) or (not(next(second) == nil)) or (not(next(third) == nil))) then
myArgs[txtHeader .. iCounter]=txtResult
iCounter=iCounter+1
bSomeoneplaced=true
end
if not(next(first) == nil) then
iCounter=iCounter+1
myArgs[txtLabel .. iCounter]=txtWinner
local txtShow=''
for key, value in pairs(first) do
txtShow=txtShow..txtShowTeam(frame,value,txtYearFrom) .. refs[value]
end
myArgs[txtContent .. iCounter]=txtShow
iCounter=iCounter+1
end
if not(next(second) == nil) then
myArgs[txtLabel .. iCounter]=txtSecond
local txtShow=''
for key, value in pairs(second) do
txtShow=txtShow..txtShowTeam(frame,value,txtYearFrom) .. refs[value]
end
myArgs[txtContent .. iCounter]=txtShow
iCounter=iCounter+1
end
if not(next(third) == nil) then
myArgs[txtLabel .. iCounter]=txtThird
local txtShow=''
for key, value in pairs(third) do
txtShow=txtShow..txtShowTeam(frame,value,txtYearFrom) .. refs[value]
end
myArgs[txtContent .. iCounter]=txtShow
iCounter=iCounter+1
end
if (not bSomeoneplaced) then
if (bFinished) then
myArgs[txtContent .. iCounter]=txtNoWinner
else
myArgs[txtContent .. iCounter]=txtNoWinnerYet
end
iCounter=iCounter+1
end
claimsRelegatedTeams=entity:getBestStatements( 'P2882' )
txtRelegatedTeams=''
iRelegatedTeams=0
for k, value in pairs(claimsRelegatedTeams) do
iTeam=read(value,'id')
if (iRelegatedTeams==0) then
iRelegatedTeams=1
else
txtRelegatedTeams = txtRelegatedTeams .. '<br>'
end
txtRelegatedTeams=txtRelegatedTeams .. txtShowTeam(frame,iTeam) .. txtUnpackReference(frame,tblProcessAllRefsForItemWD(frame,value.references,entityid,'P2882')) .. txtEditPen(entityid,value.id);
end
if (iRelegatedTeams>0) then
myArgs[txtLabel .. iCounter]=txtRelegated
myArgs[txtContent .. iCounter]=txtRelegatedTeams
iCounter=iCounter+1
end
end
myArgs[txtContent .. '240']=frame:expandTemplate{ title = 'align' , args ={'left',txtPrev}} .. frame:expandTemplate{ title = 'align' , args ={'right',txtNext}}
myArgs['under']= '[https://www.wikidata.org/wiki/' .. entityid .. ' '.. txtEditComment .. ']'
tmp = frame:expandTemplate{ title = txtInfoboxTemplate , args =myArgs}
return tmp
end
end
function txtShowTeam(frame,iTeam,iYear)
if (isNationalTeam(iTeam,'P31')) then
wdTeam=mw.wikibase.getEntity(iTeam)
wdCountry = getOneValue(wdTeam ,'P1532')
if not wdCountry then
wdCountry = getOneValue(wdTeam ,'P17')
end
txtSitelink=mw.wikibase.getSitelink(iTeam)
if not (txtSitelink) then
txtSitelink=getLabelByEntity(iTeam)
end
return frame:expandTemplate{ title = txtFlagIconTemplate , args={wdCountry}} .. ' [[' .. txtSitelink .. '|' .. wdCountry .. ']]'
else
return txtWikilink(iTeam,iYear)
end
end
p.map = function(frame)
if (frame.args['id']) then
entityid=frame.args['id']
else
entityid=mw.wikibase.getEntityIdForCurrentPage()
end
if not (entityid==nil) then
missing={}
missingcoordinate={}
txtArea=frame.args['area'];
if (frame.args['id']) then
intWidth_px=frame.args['intWidth_px']
else
intWidth_px=370
end
leagueseason=mw.wikibase.getEntity(entityid)
local claims = leagueseason:getBestStatements( 'P1923' )
myArgs={txtArea,width=intWidthpx}
-- myArgs['width']=intWidth_px
-- txt=frame:expandTemplate{ title='Kartposition start', myArgs}
txt='{{Kartposition start |' .. txtArea .. ' |width=' .. intWidth_px .. '}}'
for key, value in pairs( claims ) do
idTeam = read(value,'id')
if (idTeam) then
txtTeam=txtWikilink( idTeam )
team=mw.wikibase.getEntity(idTeam)
claims2 = team:getBestStatements( 'P115' )[1]
if (claims2) then
idArena=read(claims2,'id')
arena=mw.wikibase.getEntity(idArena)
txtArena=txtWikilink( idArena )
claims3 = arena:getBestStatements( 'P625' )[1]
if (claims3) then
-- txt=txt..tmp .. tmp2 .. read(claims3,'longitude') .. ':' .. read(claims3,'latitude')
myArgs={ txtArea, lat=read(claims3,'latitude')}
myArgs['long']=read(claims3,'longitude')
myArgs['plats']='<span style="position:relative;top:0px;">' .. txtTeam .. '</span>'
-- txt=txt..frame:expandTemplate{title = "Kartposition markör", myArgs}
txt=txt .. '{{Kartposition markör|' .. txtArea .. ' |lat=' .. read(claims3,'latitude') .. ' |long=' .. read(claims3,'longitude') .. ' |markör= |plats=<span style="position:relative;top:0px;">' .. txtTeam .. '</span>}}'
-- txt=txt..tmp .. tmp2 .. tprint (claims3)
else
table.insert(missingcoordinate,txtArena)
end
else
table.insert(missing,txtTeam)
end
else
-- txt=txt..'A'
end
end
myArgs={txtArea,undertext='Placering av deltagande lag, elitserien 2020/2021'}
-- myArgs['undertext']="Placering av deltagande lag, elitserien 2020/2021"
txt=txt .. '{{Kartposition slut|Sverige|undertext=Placering av deltagande lag i ' .. getLabelByEntity(entityid) .. '.'
iCounter=0
for key, value in pairs( missing ) do
if (iCounter==0) then
txt = txt .. 'Data om hemmarena saknas för: ' .. value
else
txt = txt .. ', ' .. value
end
iCounter=iCounter+1
end
iCounter=0
for key, value in pairs( missingcoordinate ) do
if (iCounter==0) then
txt = txt .. 'Data om arenans koordinater saknas för: ' .. value
else
txt = txt .. ', ' .. value
end
end
txt = txt .. '}}'
-- txt=txt..frame:expandTemplate{ title="Kartposition slut",myArgs}
-- tmp = frame:expandTemplate{ title = "Faktamall" , args =myArgs}
-- return '<nowiki>' .. txt .. '</nowiki>'
txt=frame:preprocess(txt)
else
txt=''
end
return txt
end
-- Funktion från https://stackoverflow.com/questions/41942289/display-contents-of-tables-in-lua
function tprint (tbl, indent)
if not indent then indent = 0 end
local toprint = string.rep(" ", indent) .. "{\r\n"
indent = indent + 2
for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent)
if (type(k) == "number") then
toprint = toprint .. "[" .. k .. "] = "
elseif (type(k) == "string") then
toprint = toprint .. k .. "= "
end
if (type(v) == "number") then
toprint = toprint .. v .. ",\r\n"
elseif (type(v) == "string") then
toprint = toprint .. "\"" .. v .. "\",\r\n"
elseif (type(v) == "table") then
toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
end
end
toprint = toprint .. string.rep(" ", indent-2) .. "}"
return toprint
end
-- from: https://stackoverflow.com/questions/2421695/first-character-uppercase-lua
function firstToUpper(str)
if (str) then
return (str:gsub("^%l", string.upper))
else
return ''
end
end
function p.Annat()
return mw.wikibase.isValidEntityId('Q1537948')
end
return p