Модуль:Песочница/GAN/Infobox/Fonctions/Compétition sportive

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {}
local item = require( 'Модуль:Песочница/GAN/Infobox/Localdata' ).item
local wikidata = require "Модуль:Песочница/GAN/Wikidata" 
local countrymod = require "Модуль:Песочница/GAN/Country data"
local typeofteam = require "Модуль:Песочница/GAN/Dictionnaire Wikidata/Typeofteam"

function oldStringTable(args) -- copié du module Wikidata mais return nil au lieu deu {}, {} si aucune correspondance n'est trouvée dans wikidata
	local claims = args.claims
	if not claims then
		claims = wikidata.getClaims(args)
	end
	if not claims or claims == {} then
		return nil
	end
	local props = {} -- liste des propriétés associété à chaque string pour catégorisation et linkback
	for i, j in pairs(claims) do
		claims[i] = wikidata.formatStatement(j, args)
		table.insert(props, j.mainsnak.property)
	end
	if args.removedupes and (args.removedupes ~= '-') then
		claims = wikidata.addNewValues({}, claims) -- devrait aussi supprimer de props celles qui ne sont pas utilisées
	end
	return claims, props
end

-- date de la course pour adapter les drapeaux et nationalités des participants
local raceDate = wikidata.formatStatements{
	entity = item, 
	property = {'P580', 'P585'}, 
	numval = 1, 
	displayformat = 'raw'
}

local function formatPerson(person) -- retourne le nom d'une personne précédé du ou des drapeaux appropriés

	local str = wikidata.formatEntity(person)

	-- récupère la nationalité telle que stockée dans P27 (personnes) ou P17 (équipes)
	local nationalities = wikidata.stringTable{entity = person, property = {'P27', 'P17'}, atdate = raceDate, displayformat = 'raw'}
	if not nationalities then
		return str
	end
	
	local flags = {}
	for i, nation in pairs(nationalities) do
		local flag, success = countrymod.standarddisplay(nation, {label = '-', date = 'default'})
		if success then
			str = flag .. ' ' .. str
		end
	end
	return str
end

function p.winnerRow(label, winnertype)
	
	local function wikidataval(winnertype)
		-- si l'on ne connait pas le qualificatif, ne pas utiliser Wikidata
		if not winnertype then
			return nil
		end
		local winners = wikidata.stringTable{
			entity = item,
			property = 'P1346',
			displayformat = 'raw',
			excludespecial = true,
			qualifier = 'P642',
			qualifiervalue = winnertype
		}
		if not winners then
			return nil
		end
		for i, winner in pairs(winners) do
			winners[i] = formatPerson(winner)
		end
		local str = table.concat(winners, '<br />')
		-- ajout rétrolien et cat
		str = wikidata.formatAndCat{value = str, entity = entity, property = 'P1346'}
		return str
	end
		 
	return {type = 'row', label = label, value = param, wikidata = function() return wikidataval(winnertype) end}
end

function p.winnerRow2(label, param, winnertype)
	
	local function wikidataval()
		-- si l'on ne connait pas le qualificatif, ne pas utiliser Wikidata
		if not winnertype then
			return nil
		end
		local winners = oldStringTable{
			entity = item, 
			property = 'P1346', 
			displayformat = 'raw', 
			excludespecial = true, 
			qualifier = 'P642', 
			qualifiervalue = winnertype
		}
		if not winners then
			return nil
		end
		for i, winner in pairs(winners) do
			winners[i] = formatPerson(winner)
		end
		local str = table.concat(winners, '<br />')
		-- ajout rétrolien et cat
		str = wikidata.formatAndCat{value = str, entity = entity, property = 'P1346'}
		return str
	end
	if wikidataval == nil then
		return nil
	else
		return {type = 'row', label = label, value = param, wikidata = wikidataval}
	end
end

function p.typeofteam()
	return {
		type = 'row', 
		value = 'compet',
		wikidata = {
			property = 'P31',
			showdate = true,
			conjtype = '<br />',
			sorttype = 'chronological',
			speciallabels = typeofteam,
		}, 
		label = 'Statut',
		plurallabel = 'Statuts'
	}
end

return p