Modul:Sportskategorier

Documentation icon Moduldokumentation[vis] [redigér] [historik] [opfrisk]

Dette modul bruges af Skabelon:Sportskategorier til finde sætte kategorier for deltagelse på sportshold i artikler om sportsudøvere. Kategorierne findes ud fra oplysninger på Wikidata. Først bruges medlem af sportshold (P54) for at finde hvilke sportshold som personen er eller har været på, dernæst bruges kategori for sportsfolk på hold (P6112) for hvert af de fundne sportshold til at finde kategorien for deltagere på holdet.

Brug

Indgangsfunktionen er p.sportskategorier. Brug {{#invoke:Sportskategorier|sportskategorier}} i den kaldende skabelon.

Normalt bruges ingen parametre, men alle eventuelle parametre overføres automatisk fra den kaldende skabelon. Til testning kan bruges følgende parametre:

  • q: Angiver wikiemne for sportsudøveren (Qxxxxxxxx). Standard er at bruge Wikiemnet-emnet som artiklen er knyttet til.
  • test: Hvis denne parameter har værdien "ja", laves en liste med links til de fundne kategorier i stedet for at placere artiklen i kategorierne.

Sporingskategori

require('Modul:No globals')
local p = {}

local categories = {}

local addTrackingCategory = function(cat)
	if cat == 'More than one member category' then
		categories[#categories + 1] = '[[Kategori:Sportshold har mere end en medlemskategori angivet på Wikidata]]'
	end
end

p.sportskategorier = function(frame)
	local args = (frame == mw.getCurrentFrame()) and frame:getParent().args or frame.args
	local qid = args.q ~= '' and args.q or mw.wikibase.getEntityIdForCurrentPage()
	if not qid then
		return
	end
	local teams = mw.wikibase.getAllStatements(qid, 'P54') -- P54 is 'member of sports team'
	for _, team in pairs(teams) do
		if team.mainsnak.snaktype == 'value' then
			local teamID = team.mainsnak.datavalue.value.id
			local cats = mw.wikibase.getBestStatements(teamID, 'P6112') -- P6112 is 'category for members of a team'
			local catID = nil
			for _, cat in pairs(cats) do
				if cat.mainsnak.snaktype == 'value' then
					if catID then
						-- If already set, this is a duplicate category.
						addTrackingCategory('More than one member category')
					end
					catID = cat.mainsnak.datavalue.value.id
					local catLink = mw.wikibase.getSitelink(catID)
					if catLink then
						categories[#categories + 1] = '[[' .. catLink .. ']]'
					end
				end
			end
		end
	end
	if args.test == 'ja' then
		-- Line breaks between categories. Add colons to links, and discard second return value from gsub
		return (string.gsub(table.concat(categories, '<br/>'), '%[%[', '[[:'))
	else
		return table.concat(categories)
	end
end

return p