Modul:Wikidata/Formatters
Vzhled
Interní modul, který zprostředkovává převod strukturovaných dat do wikitextu. Každému typu hodnoty je vytvořen základní formátovací submodul, pro účely specifického formátování lze naprogramovat vlastní formátovací submodul.
Struktura submodulu
-- vzorový submodul, viz [[Modul:Wikidata/Formatters/empty]]
require 'Modul:No globals'
local p = {}
function p.getRawValue(value, options)
-- extract a human readable value or just call a native module for this type
return mw.dumpObject(value)
end
function p.formatRawValue(value, options)
-- do formatting here
return value
end
function p.formatValue(value, options)
local raw = p.getRawValue(value, options)
return p.formatRawValue(raw, options)
end
return p
Doporučeno je implementovat a exportovat tyto tři metody:
getRawValue
- Převede strukturovaná data do raw hodnoty, kterou lze dále zpracovávat (např. šablonami nebo parserovými funkcemi ve wikitextu). Návratovou hodnotou může být řetězec nebo objekt (tabulka) implementující metametodu
__tostring
. formatRawValue
- Převede raw hodnotu (typicky takovou, kterou vrací
getRawValue
) do wikitextu, který bude zobrazen čtenáři. formatValue
- Zformátuje strukturovaná data do wikitextu, který bude zobrazen čtenáři. Lze implementovat jako ve vzorovém modulu kombinací
getRawValue
aformatRawValue
nebo samostatně, zvlášť pokud by se takto ztrácely informace.
Dostupné submoduly
Základní:
- Modul:Wikidata/Formatters/globecoordinate – zeměpisné souřadnice
- Modul:Wikidata/Formatters/monolingualtext – text v jazyce
- Modul:Wikidata/Formatters/quantity – číselné hodnoty (s jednotkami)
- Modul:Wikidata/Formatters/string – textové řetězce
- Modul:Wikidata/Formatters/time – časové údaje
- Modul:Wikidata/Formatters/wikibase-entityid – odkazy na jiné položky
Vlastní:
- Modul:Wikidata/Formatters/approx – číselné hodnoty slovy (pro
{{Počet obyvatel}}
) - Modul:Wikidata/Formatters/email – odkazy na e-maily
- Modul:Wikidata/Formatters/flag – státy s vlajkami
- Modul:Wikidata/Formatters/round – lidsky čitelné číselné údaje velkých řádů
- Modul:Wikidata/Formatters/url – odkazy na webové stránky
- a další
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 legacyFormatter(formatters, value, options)
if not formatters.module or not formatters.func then
return error(lib.formatError('unknown-value-module'))
end
local formatter = require ('Modul:' .. 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.formatRawValue(value, valuetype, options)
return p.Formatters[valuetype](value, options or {})
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.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