Přeskočit na obsah

Modul:Wikidata/Formatters/quantity

Tuto stránku mohou editovat jen zavedení uživatelé a správci.
Z Wikipedie, otevřené encyklopedie

require 'Modul:No globals'

local p = {}

local lib = require 'Modul:Wikidata/lib'

local function formatNumber(number)
	local integer, decimal
	if mw.ustring.find(number, '%.') then
		integer, decimal = mw.ustring.match(number, '^(.+)%.(.+)$')
	else
		integer = number
	end
	local length = mw.ustring.len(integer)
	local i = length % 3
	if i == 0 then
		i = 3
	end
	local formatted_num = mw.ustring.sub(integer, 1, i)
	while i < length do
		formatted_num = formatted_num .. '&nbsp;' .. mw.ustring.sub(integer, i + 1, i + 3)
		i = i + 3
	end
	if decimal then
		local length = mw.ustring.len(decimal)
		local i = 3
		formatted_num = formatted_num .. ',' .. mw.ustring.sub(decimal, 1, 3)
		while i < length do
			formatted_num = formatted_num .. '&nbsp;' .. mw.ustring.sub(decimal, i + 1, i + 3)
			i = i + 3
		end
	end
	return formatted_num
end

function p.getRawValue(value, options)
	return tonumber(value.amount)
end

function p.formatValue(value, options)
	local amount = tonumber(value.amount)
	local margin
	if lib.IsOptionTrue(options, 'showmargin') then
		margin = tonumber(value.upperBound or amount) - amount
		if margin == 0 then
			margin = nil
		end
	end
	local prefix = ''
	if amount < 0 then
		amount = tonumber(mw.ustring.sub(amount, 2))
		prefix = '−'
	end
	amount = prefix .. formatNumber(amount)
	if margin then
		amount = amount .. '±' .. formatNumber(margin)
	end
	if tostring(options.showunit) ~= 'false' then
		local ItemFormatter = require 'Modul:Wikidata/item'
		local unit = ItemFormatter.formatUnit(value.unit)
		if unit then
			return amount .. '&nbsp;' .. unit
		end
	end
	return amount
end

return p