Tämä moduuli on osittain suojattu muutoksilta.

Moduuli:Wd

Wikipediasta
Siirry navigaatioon Siirry hakuun

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Wd/ohje

-- Ajatuksena apumoduuli Wikidatasta tietojen noutamiseen
-- Tällä hetkellä tuettuna asuakasluvun näyttäminen

-- Population: P1082
-- Qualifier point in time P585


local p = {}

function p.population( frame )

	local fallbackValue = frame.args[1] or ""
	
	local entity = mw.wikibase.getEntityObject()
	
	if entity == nil or entity.claims == nil then
		return fallbackValue
	end
	
	if entity.claims.P1082 == nil then 
		return fallbackValue 
	end
	
	local population = entity.claims.P1082[1]
	
	if population == nil then 
		return fallbackValue
	end
	
	if population.qualifiers == nil then
		return fallbackValue
	end
	-- got value
	local populationvalue = population.mainsnak.datavalue.value
	
	-- Check if there is set point in time qualifier. IF not return just population
	if population.qualifiers.P585[1] == nil then
		return formatPositiveInteger(populationvalue.amount)
	end
	
	-- Ok, point in time qualifier exists, let's return smthng like 32 000 (1.1.2013)
	local pointInTime = population.qualifiers.P585[1].datavalue.value
	
	return formatPositiveInteger(populationvalue.amount) .. " (" .. formatDate(pointInTime.time) .. ")"
end

function formatPositiveInteger(int) 
	numberStr = tostring(int)
	
	-- strip the plus sign
	numberStr = string.gsub(numberStr, "\+", "")
	
	-- separate thousands with space
	return numberStr:reverse():gsub("%d%d%d", "%1 "):reverse():gsub("^,", "")
end

function formatDate(date) 
	-- +00000002013-01-01T00:00:00Z -> 1.1.2013
	local dt = {}
	
    dt.year = string.sub(date, 2, 5)
    dt.month = string.sub(date, 7, 8)
    dt.day = string.sub(date, 10 , 11)

    return string.format("%d.%d.%d", dt.day, dt.month, dt.year)
end

-- suamennoksia
p.asukasluku = p.population

return p