Hoppa till innehållet

Modul:Sportklubb WD

Från Wikipedia

Dokumentation [visa] [redigera] [historik] [rensa sidcachen]


Detta är en modul för att information om sportklubbar och landslag. Modulen hämtar uppgifter från Wikidata och lägger in det i Mall:Faktamall. Modulen anropas genom att lägga in {{#Invoke:Sportklubb WD | club}} i artikeln.

Argument[redigera wikitext]

Vanligen behövs inga andra argument, men modulen kan anropas med nedanstående argument:

  • id - id för en entitet på wikidata, som t.ex. Hylte/Halmstad VBK (Q3143961) för Hylte/Halmstad VBK. Argumentet behövs vanligen inte då modulen läser av det direkt om sidan är länkad till wikidata. Däremot är det användbart om sidan på Wikipedia av en eller annan anledning inte är länkad till wikidata.
  • width_px - bredd (i pixel) för bild eller logotyp som visas. Användbart framförallt om infoboxen annars skulle bli alldeles för bred.

Beskrivning[redigera wikitext]

Modulen består av följande delar:

  • Tränare för klubben. Dessa hämtas från huvudtränare (P286) och sorteras efter tidpunkten då personen startade som tränare.
  • Klubbens namn i olika sammanhang. Denna hämtas från namn (P2561) och sorteras efter tidpunkt då namnet började användas (om det är känt)

För alla delar gäller att de bara visas i infoboxen om det finns några inlagda uppgifter (t.ex. visas inte individuella utmärkelser om det inte finns några inlagda).

Felsökning[redigera wikitext]

Modulen försöker visa ett meddelande direkt i sidan om information saknas på wikidata som gör att den inte kan visa informationen på det sätt som det är tänkt. Detta sker vanliga genom att använda Mediawikis referenssystem (d.v.s. ni ser en siffra i upphöjd format som när ni klickar på den tar er till sidans referensdel där det finns mer information).

Om du får ett meddelande som börjar Luafel i Modul:Sportklubb_WD skriv gärna ett meddelande på modulens diskussionssida.

p = {}

local wd = require( 'Modul:Referenshantering' )
local sd = require( 'Modul:Sportdata' )

p.iRefcounter=0

p.club = function(myframe)
	if (myframe.args['qid']) then
		entityid=myframe.args['qid'] else
		entityid=mw.wikibase.getEntityIdForCurrentPage()
		end
if not (entityid==nil) then	
	--Start with all possible arguments
	if (myframe.args[txtHideable]==txtYes) then
		bHideable=true
		else
		bHideable=false
	end
	if (myframe.args['condensed']=='yes') then
		bCondensed=true
		else
		bCondensed=false
		end
	if myframe.args['txtFoundedDate']~=nil then
		txtFoundedDateLabel=myframe.args.txtFoundedDate
		end
	if myframe.args['txtDissolvedDate']~=nil then
		txtDissolvedDateLabel=myframe.args.txtDissolvedDate
		end
	if myframe.args['txtSeat']~=nil then
		txtSeatLabel=myframe.args.txtSeat
		end
	if myframe.args['txtHomeVenue']~=nil then
		txtHomeVenueLabel=myframe.args.txtHomeVenue
		end
	if myframe.args['txtWebsite']~=nil then
		txtWebsiteLabel=myframe.args.txtWebsite
		end
	if myframe.args['txtClubTeamResultHeader']~=nil then
		txtClubTeamResultHeader=myframe.args.txtClubTeamResultHeader
		end
	if myframe.args['txtClubCoachesHeader']~=nil then
		txtClubCoachesHeader=myframe.args.txtClubCoachesHeader
		end
	if myframe.args['txtNamesHeader']~=nil then
		txtNamesHeader=myframe.args.txtNamesHeader
		end
	if myframe.args['txtNamesDescription']~=nil then
		txtNamesDescription=myframe.args.txtNamesDescription
		end
	if myframe.args['txtCompetitionHeader']~=nil then
		txtCompetitionHeader=myframe.args.txtCompetitionHeader
		end
	if myframe.args['txtNameHeader']~=nil then
		txtNameHeader=myframe.args.txtNameHeader
		end
	if myframe.args['txtSeasonHeader']~=nil then
		txtSeasonHeader=myframe.args.txtSeasonHeader
		end
	if myframe.args['txtPositionHeader']~=nil then
		txtPositionHeader=myframe.args.txtPositionHeader
		end
	if myframe.args['txtInfoboxTemplate']~=nil then
		txtInfoboxTemplate=myframe.args.txtInfoboxTemplate
		end
	if myframe.args['txtFlagIconTemplate']~=nil then
		txtFlagIconTemplate=myframe.args.txtFlagIconTemplate
		end
	if myframe.args['txtHeader']~=nil then
		txtHeader=myframe.args.txtHeader
		end
	if myframe.args['txtLabel']~=nil then
		txtLabel=myframe.args.txtLabel
		end
	if myframe.args['txtContent']~=nil then
		txtContent=myframe.args.txtContent
		end
	if myframe.args['txtTeamHeaderStyle']~=nil then
		txtTeamHeaderStyle=myframe.args.txtTeamHeaderStyle
		end
	if myframe.args['txtLanguageCode']~=nil then
		txtLanguageCode=myframe.args.txtLanguageCode
		end
	if myframe.args['txtEditComment']~=nil then
		txtEditComment=myframe.args.txtEditComment
		end
	if myframe.args['txtStyleMain']~=nil then
		txtStyleMain=myframe.args.txtStyleMain
		end
	if myframe.args['txtStyleLevel2']~=nil then
		txtStyleLevel2=myframe.args.txtStyleLevel2
		end
	if (myframe.args['txtWidth_px']~=nil) and not (myframe.args['txtWidth_px']=='') then
		txtWidth_px=myframe.args.txtWidth_px
		end
	myframe['id']=entityid
--	entity=mw.wikibase.getEntity(entityid) 	
	wdTitle=getLabelByEntity( entityid )
    myArgs={titel=wdTitle,grundstil="width:" .. txtWidth_px}
	img=mw.wikibase.getBestStatements(entityid, 'P18' )
	if (next(img)) then
		myArgs=addImage(entityid,'P18',img,myArgs)
		else
		img=mw.wikibase.getBestStatements(entityid, 'P154' )
		if (next(img)) then
		myArgs=addImage(entityid,'P154',img,myArgs)
		end
	end
    myArgs[txtHeaderStyle] = txtStyleMain
	iCounter=0
	claimFoundedDate=mw.wikibase.getBestStatements(entityid, 'P571' )
	if next(claimFoundedDate) then
    	iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtFoundedDateLabel
    	myArgs[txtContent  .. iCounter]=mw.wikibase.formatValue(claimFoundedDate[1].mainsnak)  .. txtUnpackReference(myframe,tblProcessAllRefsForItemWD(myframe,claimFoundedDate[1].references,entityid,'P571'))
	end
	claimDissolvedDate=mw.wikibase.getBestStatements(entityid, 'P576' )
	if next(claimDissolvedDate) then
    	iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtDissolvedDateLabel
    	myArgs[txtContent  .. iCounter]=mw.wikibase.formatValue(claimDissolvedDate[1].mainsnak) .. txtUnpackReference(myframe,tblProcessAllRefsForItemWD(myframe,claimDissolvedDate[1].references,entityid,'P576'))
	end
	claimPlace=mw.wikibase.getBestStatements(entityid, 'P159' )
	wdPlace=''
	iPlaces=0
    for key, value in pairs( claimPlace ) do
    	iPlaces=iPlaces+1
    	idPlace=value.mainsnak.datavalue.value.id
		wdCountry = readFirstStatement(idPlace,'P17')
		if (iPlaces>1) then
			wdPlace = wdPlace .. ' och '
			end
		wdPlace = wdPlace .. txtWikilink(idPlace)  .. ', ' .. myframe:expandTemplate{ title = txtTemplate .. ':' .. txtFlagIconTemplate , args={wdCountry}} .. ' [[' .. wdCountry .. ']]'
		txtYearfrom,txtYearTo = years(value) 
		if ((not isempty(txtYearfrom)) or not (isempty(txtYearTo))) then
				wdPlace=wdPlace .. ' (' .. txtYears(txtYearfrom,txtYearTo) .. ')'
			end
		wdPlace=wdPlace  .. txtUnpackReference(myframe,tblProcessAllRefsForItemWD(myframe,value.references,entityid,'P159')).. txtEditPen(entityid,value.id)
    	end
	if not (wdPlace=='') then
    	iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtSeatLabel
    	myArgs[txtContent  .. iCounter]=wdPlace
		end
	claimHomeVenue=mw.wikibase.getAllStatements(entityid, 'P115' )
	wdHomeVenue=''
    for key, value in pairs( claimHomeVenue ) do
	    idHomeVenue=value.mainsnak.datavalue.value.id
		wdHomeVenue = wdHomeVenue .. txtWikilink(idHomeVenue)
		claimCapacity=mw.wikibase.getBestStatements(idHomeVenue,'P1083')
		wdCapacity=read(claimCapacity, 'value' ) --['value']
		if not (isempty(wdCapacity)) then
			wdHomeVenue=wdHomeVenue .. ' (' .. wdCapacity .. ' ' .. txtSeats .. ')'
			end
		wdHomeVenue=wdHomeVenue .. txtUnpackReference(myframe,tblProcessAllRefsForItemWD(myframe,value.references,entityid,'P115')) .. txtEditPen(entityid,value.id)
	    end
	if not (wdHomeVenue=='') then
		iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtHomeVenueLabel
		myArgs[txtContent  .. iCounter]=wdHomeVenue
		end
	claimWebsite=mw.wikibase.getBestStatements(entityid, 'P856' )
    if next(claimWebsite) then
		wdWebsite = claimWebsite[1].mainsnak.datavalue.value
		if (#wdWebsite>30) then
			wdWebsite='[' .. wdWebsite .. ' ' .. txtOfficialWebsite .. ']'
			end
    	iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtWebsiteLabel
    	myArgs[txtContent  .. iCounter]=wdWebsite .. txtEditPen(entityid,'P856')
    	end
	if myframe.args['width_px']~=nil then
		txtWidth_px=myframe.args.width_px
	end
	claimNickName=mw.wikibase.getBestStatements(entityid, 'P1449' )
	if next(claimNickName) then
    	iCounter=iCounter+1
	    myArgs[txtLabel .. iCounter]=txtNickNameLabel
    	myArgs[txtContent  .. iCounter]=mw.wikibase.formatValue(claimNickName[1].mainsnak) .. txtUnpackReference(myframe,tblProcessAllRefsForItemWD(myframe,claimNickName[1].references,entityid,'P1449'))
	end
	bHasKit=false
	if ((myframe.args['body1']~=nil and myframe.args['body1']~='') or (myframe.args['pattern_b1']~=nil and myframe.args['pattern_b1']~='')) then
		arrayKit1={pattern_la =myframe.args['pattern_la1'], pattern_b=myframe.args['pattern_b1'], pattern_ra =myframe.args['pattern_ra1'], leftarm =myframe.args['leftarm1'],body= myframe.args['body1'], rightarm =myframe.args['rightarm1'],shorts=myframe.args['shorts1'],socks =myframe.args['socks1'], titel = 'Hemmaställ'}
		kit1 = myframe:expandTemplate{ title = txtTemplate .. ':' .. txtKitTemplate , args =arrayKit1}
		bHasKit=true
		else 
		kit1=''
		end
	if ((myframe.args['body2']~=nil and myframe.args['body2']~='') or (myframe.args['pattern_b2']~=nil and myframe.args['pattern_b2']~='')) then
		arrayKit2={pattern_la =myframe.args['pattern_la2'], pattern_b=myframe.args['pattern_b2'], pattern_ra =myframe.args['pattern_ra2'], leftarm =myframe.args['leftarm2'],body= myframe.args['body2'], rightarm =myframe.args['rightarm2'],shorts=myframe.args['shorts2'],socks =myframe.args['socks2'], titel = 'Bortaställ'}
		kit2 = myframe:expandTemplate{ title = txtTemplate .. ':' .. txtKitTemplate , args =arrayKit2}
		bHasKit=true
		else
		kit2=''
	end
	if ((myframe.args['body3']~=nil and myframe.args['body3']~='') or (myframe.args['pattern_b3']~=nil and myframe.args['pattern_b3']~='')) then
		arrayKit2={pattern_la =myframe.args['pattern_la3'], pattern_b=myframe.args['pattern_b3'], pattern_ra =myframe.args['pattern_ra3'], leftarm =myframe.args['leftarm3'],body= myframe.args['body3'], rightarm =myframe.args['rightarm3'],shorts=myframe.args['shorts3'],socks =myframe.args['socks3'], titel = 'Libero'}
		kit3 = myframe:expandTemplate{ title = txtTemplate .. ':' .. txtKitTemplate , args =arrayKit2}
		bHasKit=true
		else
		kit3=''
	end
	if (bHasKit) then
		iCounter=iCounter+1
	    myArgs[txtContent .. iCounter]='<table bgcolor=#ffffff><tr><td>' ..kit1 .. '</td><td>' .. kit2 .. '</td><td>' .. kit3 .. '</td></tr></table>'
	    myArgs[txtContent .. iCounter .. 'stil']='background:#ffffff'
	    end
	bHasResults,txtTeamresults=teamresults(myframe,entityid)
	if (bHasResults) then
		iCounter=iCounter+1
	    myArgs[txtHeader .. iCounter]=txtClubTeamResultHeader .. ' ' .. txtEditPen(entityid,'P1344','Black_pencil.svg')
		iCounter=iCounter+1
	    myArgs[txtContent .. iCounter]=txtTeamresults 
		end
	bHasCoaches,txtCoaches=teamcoaches(myframe,entityid)	
	if (bHasCoaches) then
		iCounter=iCounter+1
	    myArgs[txtHeader .. iCounter]=txtClubCoachesHeader .. ' ' .. txtEditPen(entityid,'P286','Black_pencil.svg')
		iCounter=iCounter+1
	    myArgs[txtContent .. iCounter]=txtCoaches
		end
    local claimsPlayersCategory = mw.wikibase.getBestStatements(entityid, 'P6112' )
	if next(claimsPlayersCategory) then
		txtPlayerCategorySitelink=mw.wikibase.getSitelink(read(claimsPlayersCategory[1],'id'))
		if txtPlayerCategorySitelink~=nil then
			iCounter=iCounter+1
		    myArgs[txtHeader .. iCounter]=txtPlayersHeaders
			iCounter=iCounter+1
		    myArgs[txtContent .. iCounter]='[[:' .. txtPlayerCategorySitelink .. '|' .. txtPlayersDescription .. ']]'
	    end
	end

	bHasNames,txtNames=teamnames(myframe,entityid)
	if (bHasNames) then
		iCounter=iCounter+1
	    myArgs[txtHeader .. iCounter]=txtNamesHeader
		iCounter=iCounter+1
	    myArgs[txtContent .. iCounter]='\'\''..txtNamesDescription..'\'\''
		iCounter=iCounter+1
	    myArgs[txtContent .. iCounter]=txtNames
		end
	myArgs['under']='[https://www.wikidata.org/wiki/' .. entityid .. ' '.. txtEditComment .. ']'
	--iDataItems
	if (iCounter<2) then
		myArgs['under']=myArgs['under']..'[['..txtCategory .. ':' .. txtFewItems .. ']]'
		end
	tmp = myframe:expandTemplate{ title = txtTemplate .. ':' .. txtInfoboxTemplate , args =myArgs}
	return tmp
	end
	end

function teamresults (myframe,iTeam)
	local out = {}
	local all={}
	local d={}
	local t={}
    local claimsCompetition = mw.wikibase.getBestStatements(iTeam, 'P1344' )
    for key, value in pairs( claimsCompetition ) do
		local tmp={}
		local id = read(value,'id')
		tmp.iSeason=id
		tmp.iTeam=iTeam
		tmp=tblSeasonData(myframe,tmp,value,iTeam)
		if (tmp.iPosition=='') then
			tmp.iPosition=999999
			end
		tmp.iPosition=tonumber(tmp.iPosition)
		tmp.txtCompetition=txtWikilinkWOsitelink(read(value,'id'))
		table.insert(all,tmp)
    end 
    all,txt=showresults(myframe,all,"club")
	return #all>0,txt
end

function teamcoaches (myframe,iTeam)
	local out = {}
	local all={}
    local claimsCoaches= mw.wikibase.getBestStatements(iTeam, 'P286' )
    for key, value in pairs( claimsCoaches ) do
		local tmp={}
		local id = read(value,'id')
		local tmp=tblTeamInfo(myframe,value,iTeam,'P286')
--		tmp.txtCompetition=txtWikilinkWOsitelink(read(value,'id'))
		tmp.txtPerson=txtWikilinkWOsitelink(read(value,'id'))
		table.insert(all,tmp)
    end 
	all=sortPeople(all)
	txt= '<table style="class: biography vcard" width="100%"><tr><th>' .. txtNameHeader .. '</th><th>' .. txtSeasonHeader .. '</th></tr>'
	for i = 1,#all do
		txt=txt .. '<tr>'
		txt=txt .. '<td style="text-align:left;">' .. all[i].txtPerson .. '</td>'
		txt=txt .. '<td style="text-align:left;">' .. txtYears(all[i].yearfrom,all[i].yearto) .. txtUnpackReference(myframe,all[i].hasref,all[i].ref) .. all[i].edit .. '</td></tr>'
    end
	txt=txt .. '</table>'
	return #all>0,txt
end

function sortPeople(posts)
    table.sort(posts, function(a, b) return 
    	(compareDOWN(a.yearfrom,b.yearfrom)) or  
    	(a.yearfrom == b.yearfrom and compareUP(a.yearto,b.yearto)) or
    	(a.yearfrom == b.yearfrom and a.yearto == b.yearto and compareDOWN(a.datefrom,b.datefrom)) or  
    	(a.yearfrom == b.yearfrom and a.yearto == b.yearto and a.datefrom == b.datefrom and compareUP(a.dateto,b.dateto)) 
    end)
	return posts
end

function teamnames (myframe,iTeam)
	local out = {}
	local all={}
	local txt=''
    local claimsNames = mw.wikibase.getBestStatements(iTeam,'P2561' )
    for key, value in pairs( claimsNames ) do
		local tmp=tblTeamInfo(myframe,value,iTeam,'P286')
		tmp.txtName = read(value,'text')
		table.insert(all,tmp)
    end 
    table.sort(all, function(a, b) return a.datefrom > b.datefrom end)
	txt=txt .. '<table style="class: biography vcard" width="100%"><tr><th>' .. txtNameHeader .. '</th><th width="80px">' .. txtSeasonHeader .. '</th></tr>'
	txtCompetitionOld=''
	for i = 1,#all do
		txt=txt .. '<tr>'
		txt=txt .. '<td>' .. all[i].txtName .. '</td>'
		txt=txt .. '<td>' .. txtYears(all[i].yearfrom,all[i].yearto)  .. txtUnpackReference(myframe,all[i].hasref,all[i].ref) .. all[i].edit .. '</td></tr>'
    end
	txt=txt .. '</table>'
	return #all>0,txt
end

local function getSnakValue(snak, parameter)
	if snak.snaktype == "value" then
		-- call the respective snak parser
		if snak.datavalue.type == "string" then return snak.datavalue.value
		elseif snak.datavalue.type == "globecoordinate" then return printDatavalueCoordinate(snak.datavalue.value, parameter)
		elseif snak.datavalue.type == "quantity" then return printDatavalueQuantity(snak.datavalue.value, parameter)
		elseif snak.datavalue.type == "time" then return printDatavalueTime(snak.datavalue.value, parameter)
		elseif snak.datavalue.type == "wikibase-entityid" then return printDatavalueEntity(snak.datavalue.value, parameter)
		elseif snak.datavalue.type == "monolingualtext" then return printDatavalueMonolingualText(snak.datavalue.value, parameter)
		end
	end
	return mw.wikibase.renderSnak(snak)
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