Modul:Wikidata/Formatters
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 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