Модуль:Wikidata/number

Поделись знанием:
< Модуль:Wikidata
Это текущая версия страницы, сохранённая Lockal (обсуждение | вклад) в 11:30, 1 сентября 2016. Вы просматриваете постоянную ссылку на эту версию.

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
 Документация

Модуль используется для форматирования числовых значений из Викиданных.

Методы

formatQuantityWithDateClaim

  • Используется в шаблонах: {{wikidata/p1082}}, {{wikidata/p1128}}.
  • Формат возвращаемого значения:
    <число>[' '<единица-измерения>][' ('<дата>')']
  • Примеры:

Тесты

Ошибка скрипта: Нет такого модуля, как «Wikidata/number/tests».

Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.

local p = {}

function p.formatQuantityWithDateClaim( context, options, statement )
	local snak = context.formatSnak( options, statement.mainsnak )
	
	--Unit
    if ( options.unit and options.unit ~= '' ) then
        snak = snak .. ' ' .. options.unit
    end

    --Date
    if ( statement.qualifiers and statement.qualifiers.P585 ) then
        snak = snak .. ' (' .. context.formatSnak( options, statement.qualifiers.P585[1] ) .. ')'
    end

	--References
	if ( options.references ) then
    	snak = snak .. context.formatRefs( options, statement );
    end

    return snak
end

local function getUnitAbbr(unitQid)
	local entity = mw.wikibase.getEntity(unitQid)
	if entity and entity.claims and entity.claims.P558 then
		for _, abbr in pairs( entity.claims.P558 ) do
			if abbr.qualifiers then
				if abbr.qualifiers.P407 and abbr.qualifiers.P407[1].datavalue.value.id == "Q7737" or
				   abbr.qualifiers.P282 and abbr.qualifiers.P282[1].datavalue.value.id == "Q8209" then
					return abbr.mainsnak.datavalue.value
				end
			end
		end
	end
end

function p.formatQuantity( context, options, value )
	local snak = value.amount
	if snak:sub(1, 1) == '+' then
		snak = snak:sub(2)
	end
	snak = snak:gsub('[.]', ',')
	
    if ( options.unit and options.unit ~= '' ) then
        snak = snak .. ' ' .. options.unit
        return snak
    end
    
	if value.unit ~= nil then
		local unitQid = value.unit:match('Q%d+')
		if unitQid ~= nil then
			local abbr = getUnitAbbr(unitQid)
			if abbr ~= nil then
				snak = snak .. ' ' .. abbr
			end
		end
	end
	
    return snak
end

return p