Module:Infobox/Fonctions/Division administrative

 Documentation[voir] [modifier] [historique] [purger]

Cette page définit un module d'infobox.


local wikidata = require('Module:Wikidata')
local p = {}

function p.population() -- retourne la table de données population / densité
	local function popnum(localdata)
		local pop, popdate
		if localdata['population'] then 
			pop = localdata['population']
			popdate = localdata['année_pop'] or ''
		elseif localdata.item then
			local popdata = wikidata.getClaims{entity= localdata.item, property = 'P1082'}
			if popdata and popdata[1].mainsnak.snaktype == 'value' then
				pop = popdata[1].mainsnak.datavalue.value.amount
				if popdata[1].qualifiers 
					and popdata[1].qualifiers.P585 
					and popdata[1].qualifiers.P585[1].snaktype == 'value' 
				then
					popdate = popdata[1].qualifiers.P585[1].datavalue.value.time
					popdate = popdate:sub( 2, 5 )
				end
			end
		end
		return tonumber(pop), popdate
	end
	
	local function population(localdata)
		local pop, date = popnum(localdata)
		if pop then
			if date then
				return mw.getContentLanguage():formatNum(pop) .. ' (' .. date .. ')'
			else
				return mw.getContentLanguage():formatNum(pop)
			end
		end
	end

	local function density(localdata)
		local area = tonumber(localdata.superficie)
		local pop = popnum(localdata)
		if area and pop then
			return pop / area
		end
	end
	
	return {
		type = 'table', 
		title = 'Population', 
		rows = {
			{type='mixed', label = 'Population', value = population},
			{type='mixed', label = label, value = density},
		}
	}
end

local function wikidataDivRows()  -- liste de lignes de divisions administrative basée sur des données de Wikidata
	if not localdata.item then
		return nil
	end
	-- on cherche le pays pour être sûr de s'arrêter avant
	local country = wikidata.stringTable{entity = localdata.item, property = "P17", displayformat = "raw"}
	local countryid
	if country then
		countryid = country[1]
	end

	-- récupération des valeurs
	local list = wikidata.transitiveVals(localdata.item, {property = "P131"}, 3, 5, countryid)
	if not list then
		return nil
	end

	-- création des colonnes
	local rows = {}
	for i, div in pairs(list) do
		if (div == countryid) then
			break
		end
		local label = wikidata.formatStatements{
			entity = div,
			property =  "P31",
			numval = 1,
			defaultlinkquery = {property = "P2354"},-- si pas de lien, lier vers la page de liste e.g liste des Etats de Califorie 
			defaultlink = "-", -- si aucun lien Wikipédia, pas de lien Wikidata
			labelformat = function(id)
				local str = wikidata.getLabel(id)
				return removeComplement(str)
			end
		}
		local val = wikidata.formatEntity(div)
		
		table.insert(rows, 1, {type = "row", label = label, value = function() return val end})
	end
	return rows
end


return p