Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Wikidata/Formatters

require 'Modul:No globals'

local p = {}

p.Formatters = {}
setmetatable(p.Formatters, {
	__index = function(t, key)
		t[key] = require('Modul:Wikidata/Formatters/' .. key)
		return t[key]
	end
})

local lib = require 'Modul:Wikidata/lib'

local function formatSpecial(snaktype, options)
	local i18n = mw.loadData('Modul:Wikidata/i18n')
	return options[snaktype] or i18n[snaktype] -- todo: přeložit pomocí hlášení
end

function p.getRawValue(snak, options)
	if snak.snaktype == 'somevalue' or snak.snaktype == 'novalue' then
		return snak.snaktype
	elseif snak.snaktype ~= 'value' then
		return error(lib.formatError('unknown-snak-type', snak.snaktype))
	end

	return p.Formatters[snak.datavalue.type].getRawValue(snak.datavalue.value, options or {})
end

function p.formatRawValue(value, formatter, options)
	options = options or {}
	if value == 'somevalue' or value == 'novalue' then
		return formatSpecial(value, options)
	else
		return p.Formatters[formatter].formatRawValue(value, options)
	end
end

function p.getFormattedValue(snak, options)
	if snak.snaktype == 'somevalue' or snak.snaktype == 'novalue' then
		return formatSpecial(snak.snaktype, options)
	elseif snak.snaktype ~= 'value' then
		return error(lib.formatError('unknown-snak-type', snak.snaktype))
	end

	local formatter = options['value-formatter'] or snak.datavalue.type
	if formatter == 'built-in' then
		return mw.wikibase.formatValue(snak)
	else
		return p.Formatters[formatter].formatValue(snak.datavalue.value, options)
	end
end

return p