Modul:Wikidata/Formatters
Vzhled
Tato stránka je pravidelně aktualizována robotem. Jakákoliv modifikace bude při příští aktualizaci přepsána a je třeba ji provádět na Wikipedii.
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
[editovat]-- vzorový submodul, viz [[Modul:Wikidata/Formatters/empty]]
-- Tato stránka je pravidelně aktualizována robotem. Jakákoliv modifikace bude při příští aktualizaci přepsána a je třeba ji provádět na Wikipedii.
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
[editovat]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ší
-- Tato stránka je pravidelně aktualizována robotem. Jakákoliv modifikace bude při příští aktualizaci přepsána a je třeba ji provádět na Wikipedii.
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