Modul:Sportscompetition WD

Från Wikipedia

Dokumentationen för denna modul kan skapas på Modul:Sportscompetition WD/dok

p= {}
local sd = require( 'Modul:Sportdata' )
local sd = require( 'Modul:Referenshantering' )

txtSerie="Serie"
txtSport="sport"
txtEdition="Upplaga"
txtResult="Resultat"
txtPeriod='Spelades'
txtWinner="Vinnare"
txtSecond="Tvåa"
txtThird="Trea"
txtInfoboxTemplate='Faktamall'

--Parameternames for the infobox tempate
txtLabel='etikett'
txtContent='innehåll'
txtHeader='rubrik'

--Help text
txtEditComment='Redigera uppgifter i faktarutan'

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

p.infobox=function(frame)
	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}
 		claimLeague=entity:getBestStatements( 'P3450' )[1]
	    if claimLeague then
		    idLeague=read(claimLeague,'id')
		    entityLeague=mw.wikibase.getEntity(idLeague)
		    idPrev=getPropertyId(claimLeague,'P155')
		    if idPrev then
	     		txtPrev=txtWikilink(idPrev)
	     		else
	     		txtPrev=''
	     		end
		    idNext=getPropertyId(claimLeague,'P156')
		    if idNext then
	     		txtNext=txtWikilink(idNext)
	     		else
	     		txtNext=''
	     		end
			entitySport=entity:getBestStatements( 'P641' )[1]
		    if next(entitySport) then
			    idSport=read(entitySport,'id')
			    myArgs[txtLabel .. iCounter]=txtSerie .. " (" .. txtSport .. ")"
		    	myArgs[txtContent  .. iCounter]=firstToUpper(txtWikilink(idLeague)) .. " (" .. firstToUpper(txtWikilink(idSport)) .. ")"
				else
			    myArgs[txtLabel .. iCounter]=txtSerie
		    	myArgs[txtContent  .. iCounter]=firstToUpper(txtWikilink(idLeague))
				end
			iCounter=iCounter+1
	    	else
	    	txtPrev=''
	    	txtNext=''
			end

		txtEditionCount=entity:formatPropertyValues( 'P393' )
	    if txtEditionCount then
		    myArgs[txtLabel .. iCounter]=txtEdition
	    	myArgs[txtContent  .. iCounter]=txtEditionCount.value
			iCounter=iCounter+1
			end
		formattedStart=entity:formatPropertyValues( 'P580' )
	    if formattedStart then
		    myArgs[txtLabel .. iCounter]=txtPeriod
	    	myArgs[txtContent  .. iCounter]=formattedStart['value'] .. ' - '
			formattedEnd=entity:formatPropertyValues( 'P582' )
		    if formattedEnd then
		    	myArgs[txtContent  .. iCounter]=myArgs[txtContent  .. iCounter] .. formattedEnd['value']
				end
			iCounter=iCounter+1
			end
		claimsTeams=entity:getBestStatements( 'P1923' )
		first=0
		second=0
		third=0
		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
				first=iTeam
				end
			if (iPos=="2") then
				second=iTeam
				end
			if (iPos=="3") then
				third=iTeam
				end
			end
		if (first>"0") then		
	    	myArgs[txtHeader  .. iCounter]=txtResult 
			iCounter=iCounter+1
		    myArgs[txtLabel .. iCounter]=txtWinner
	    	myArgs[txtContent  .. iCounter]=txtWikilink(first) 
			iCounter=iCounter+1
			if (second>"0") then		
			    myArgs[txtLabel .. iCounter]=txtSecond
		    	myArgs[txtContent  .. iCounter]=txtWikilink(second) 
				iCounter=iCounter+1
				if (third>"0") then		
				    myArgs[txtLabel .. iCounter]=txtThird
			    	myArgs[txtContent  .. iCounter]=txtWikilink(third) 
					iCounter=iCounter+1
				end
			end
		end
		myArgs['under']='[https://www.wikidata.org/wiki/' .. entityid .. ' '.. txtEditComment .. ']<br>'.. frame:expandTemplate{ title = 'align' , args ={'left','&larr; ' .. txtPrev}} .. frame:expandTemplate{ title = 'align' , args ={'right',txtNext .. ' &rarr;'}}
		tmp = frame:expandTemplate{ title = txtInfoboxTemplate , args =myArgs}
		return tmp
		end
	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


return p