[go: up one dir, main page]

Μετάβαση στο περιεχόμενο

Module:Wikidata/Formatters

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
--require "Module:No globals"

local p = {}

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

local lib = require 'Module:Wikidata/lib'

local function formatSpecial(snaktype, options)
	local i18n = mw.loadData('Module: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
	return p.Formatters[formatter].formatValue(snak.datavalue.value, options)
end

return p