Moduuli:Cs:Wikidata/Formatters
Siirry navigaatioon
Siirry hakuun
[ muokkaa ] wikiprojekti:wikidata/cswiki
|
require 'Module:No globals'
local p = {}
p.Formatters = {}
setmetatable(p.Formatters, {
__index = function(t, key)
t[key] = require('Module:cs:Wikidata/Formatters/' .. key)
return t[key]
end
})
local lib = require 'Module:cs:Wikidata/lib'
local function legacyFormatter(formatters, value, options)
if not formatters.module or not formatters.func then
return error(lib.formatError('unknown-value-module'))
end
local formatter = require ('Module:cs:' .. formatters.module)
if not formatter then
return error(lib.formatError('value-module-not-found', formatters.module))
end
local fun = formatter[formatters.func]
if not fun then
return error(lib.formatError('value-function-not-found', formatters.func))
end
return fun(value, options)
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)
return p.Formatters[formatter].formatRawValue(value, options or {})
end
function p.getFormattedValue(snak, options)
if snak.snaktype == 'somevalue' or snak.snaktype == 'novalue' then
return options[snak.snaktype] or snak.snaktype -- todo: přeložit pomocí hlášení
elseif snak.snaktype ~= 'value' then
return error(lib.formatError('unknown-snak-type', snak.snaktype))
end
-- legacy
if options['value-module'] or options['value-function'] then
local formatterMap = {
func = options['value-function'],
module = options['value-module'],
}
return legacyFormatter(formatterMap, snak.datavalue.value, options)
end
local formatter = options['value-formatter'] or snak.datavalue.type
return p.Formatters[formatter].formatValue(snak.datavalue.value, options)
end
return p