Aller au contenu

Module:Tableau qualificateurs2

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[créer] [purger]
local wikidata = require 'Module:Wikidata'

local p = {}


function sortTypeFromWikibaseType(type)
	local map = {
		['quantity'] = 'number',
		['time'] = 'date', --TODO: check?
		['url'] = 'url'
	}

	if map[type] ~= nil then
		return map[type]
	else
		return nil
	end
end

function propertyLabel(propertyId, options)
	local i = 0
	while options[propertyId] ~= nil and i < 10 do
		propertyId = options[propertyId]
		i = i + 1
	end
	if propertyId:match('P%d+') then
		return mw.wikibase.label(propertyId)
	else
		return propertyId
	end
end

function claimsToArray(claims, options)
	local headers = {}
	local types = {}
	local rows = {{}}

	--Parse options in order to create columns
	local newCol = 1
	for i, property in pairs(options) do
		if type(i) == 'number' then
			property = propertyLabel(property, options)
			headers[property] = newCol
			newCol = newCol + 1
		end
	end

	--Add rows
	for i, claim in pairs(claims) do
		rows[i + 1] = {}

		property = propertyLabel(claim.mainsnak.property, options)
		if headers[property] ~= nil then
			types[property] = sortTypeFromWikibaseType(claim.mainsnak.datatype)
			rows[i + 1][headers[property]] = wikidata.formatSnak(claim.mainsnak, {})
		end
		
		if claim.qualifiers ~= nil then
			for _, qs in pairs(claim.qualifiers) do
				for _, qualifier in pairs(qs) do
					property = propertyLabel(qualifier.property, options)
					if headers[property] ~= nil then
						types[property] = sortTypeFromWikibaseType(qualifier.datatype)

						if rows[i + 1][headers[property]] ~= nil then
							rows[i + 1][headers[property]] = rows[i + 1][headers[property]] .. '<br />' .. wikidata.formatSnak(qualifier, {})
						else
							rows[i + 1][headers[property]] = wikidata.formatSnak(qualifier, {})
						end
					end
				end
			end
		end
	end

	for property, i in pairs(headers) do
		if types[property] ~= nil then
			rows[1][i] = ' data-sort-type="' .. types[property] .. '" | ' .. property
		else
			rows[1][i] = property
		end
	end

	return rows
end

function formatArray(rows)
	local str = '{| class="wikitable sortable alternance" style="text-align:left;"'

	for i,row in pairs(rows) do
		str = str .. '\n|-'

		for j,_ in pairs(rows[1]) do
			if row[j] == nil then
				str = str .. '\n|'
			else
				if i == 1 or j == 1 then
					str = str .. '\n!'
				else
					str = str .. '\n|'
				end
				str = str .. ' ' .. row[j]
			end
		end
	end

	--return string.gsub(string.gsub(string.gsub(str, "aéroport de ", ""),"aéroport d'",""),"aéroport international de","") .. '\n|}\n'
	return str .. '\n|}\n'
end

function p.tableau(frame)
	local args = frame:getParent().args
	local claims = wikidata.getClaims(args)
	if not claims then
		return ''
	end
	local rows = claimsToArray(claims, args)
	return formatArray(rows)
end

return p