Modul:Wikidata: Porovnání verzí
Smazaný obsah Přidaný obsah
getId - drobná chybka |
m oprava c&p překlepu |
||
Řádek 98: | Řádek 98: | ||
end |
end |
||
if lib.IsOptionTrue(options, 'addclass') then |
if lib.IsOptionTrue(options, 'addclass') then |
||
sitelink = lib. |
sitelink = lib.addWdClass(sitelink) |
||
end |
end |
||
return sitelink |
return sitelink |
||
Řádek 370: | Řádek 370: | ||
local label = mw.wikibase.label(id) |
local label = mw.wikibase.label(id) |
||
if label and lib.IsOptionTrue(args, 'addclass') then |
if label and lib.IsOptionTrue(args, 'addclass') then |
||
label = lib. |
label = lib.addWdClass(label) |
||
end |
end |
||
return label |
return label |
||
Řádek 378: | Řádek 378: | ||
local label = entity.labels[lang].value |
local label = entity.labels[lang].value |
||
if label and lib.IsOptionTrue(args, 'addclass') then |
if label and lib.IsOptionTrue(args, 'addclass') then |
||
label = lib. |
label = lib.addWdClass(label) |
||
end |
end |
||
return label |
return label |
||
Řádek 395: | Řádek 395: | ||
local description = mw.wikibase.description(id) |
local description = mw.wikibase.description(id) |
||
if description and lib.IsOptionTrue(args, 'addclass') then |
if description and lib.IsOptionTrue(args, 'addclass') then |
||
description = lib. |
description = lib.addWdClass(description) |
||
end |
end |
||
return description |
return description |
||
Řádek 403: | Řádek 403: | ||
local description = entity.descriptions[lang].value |
local description = entity.descriptions[lang].value |
||
if description and lib.IsOptionTrue(args, 'addclass') then |
if description and lib.IsOptionTrue(args, 'addclass') then |
||
description = lib. |
description = lib.addWdClass(description) |
||
end |
end |
||
return description |
return description |
||
Řádek 431: | Řádek 431: | ||
local list = mw.text.listToText(Aliases, args.separator, args.conjunction) |
local list = mw.text.listToText(Aliases, args.separator, args.conjunction) |
||
if lib.IsOptionTrue(args, 'addclass') then |
if lib.IsOptionTrue(args, 'addclass') then |
||
list = lib. |
list = lib.addWdClass(list) |
||
end |
end |
||
return list |
return list |
Verze z 6. 6. 2017, 22:14
Hlavní modul pro práci s daty na Wikidatech. Jeho základ byl převzat z test2wiki:Module:Wikidata, postupně je rozšiřován o nové funkce.
Modul je rozdělen do submodulů:
- Modul:Wikidata/lib – knihovna funkcí pro všechny další submoduly,
- Modul:Wikidata/i18n – lokalizace
- Modul:Wikidata/Filterers – filtrování tvrzení nebo vymezení podle kritérií,
- Modul:Wikidata/Formatters – formátování údajů,
- Modul:Wikidata/Sorters – seřazování údajů (podle abecedy, data apod.),
- Modul:Wikidata/cite – formátování referencí,
- Modul:Wikidata/sandbox – testovací modul,
- Modul:Wikidata/testcases – unit testing
Viz též seznam šablon, které tento modul využívají.
Použití
Podrobnější nápovědu naleznete na stránce Wikipedie:Wikidata/Přebírání do infoboxů.
Do šablony vložte {{#invoke:Wikidata|funkce|parametry = jako v šablonách}}
.
Parametry a funkce označené hvězdičkou (*) nejsou plně podporované a není zatím doporučeno je využívat. Naopak parametry či funkce označené křížkem (†) jsou zastaralé a mohou být v brzké době odstraněny.
Funkce | Popis funkce | Parametr | Povinný | Popis parametru |
---|---|---|---|---|
formatStatements
|
získá data, vybere tvrzení, přefiltruje, seřadí a zformátuje jejich hodnoty a vrátí jejich seznam | id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) |
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
property | ano | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), jejíž hodnoty se mají zformátovat a zobrazit | ||
addlink | ne | pokud je „true“, na konci dat z repozitáře se objeví (e) odkazující přímo na vlastnost | ||
addclass | ne | pokud je „false“, potlačí obalení údajů CSS třídou (používat jen ve výjimečných případech) | ||
value-formatter | ne | submodul modulu Wikidata/Formatters (jeho podstránka), která se použije pro formátování hodnot, pokud výchozí submodul není vyhovující (seznam, návod) | ||
limit | ne | maximální počet hodnot, které se v seznamu zobrazí | ||
rank | ne | nutné postavení hodnoty v rámci tvrzení; může být all – použijí se všechna tvrzení; best – použijí se buď pouze tvrzení, která mají preferované postavení, nebo pouze ta s normálním postavením, pokud žádné preferované není; valid (implicitní) – použijí se jak preferovaná, tak normálně postavená tvrzení; preferred, normal, deprecated – použijí se pouze tvrzení s odpovídajícím postavením | ||
withtarget | ne | hodnota, jíž mají nabývat hledaná tvrzení (užitečné zejména pro funkce getCount a getQualifier )
| ||
withqualifier | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), která musí být přiřazena dané hodnotě v tvrzení jako vymezení | ||
withqualifiervalue | ne | hodnota, jíž má nabývat vlastnost vymezení daná parametrem „withqualifier“ | ||
withoutqualifier | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), která nesmí být přiřazena dané hodnotě v tvrzení jako vymezení | ||
withoutqualifiervalue | ne | hodnota, jíž nemá nabývat vlastnost vymezení daná parametrem „withoutqualifier“ | ||
withunit | ne | identifikátor položky na Wikidatech | ||
withlabel* | ||||
withsitelink* | ||||
withlang | ne | kód jazyka, ve kterém mají být hodnoty jednojazyčného textu | ||
date | ne | datum ve formátu YYYY-MM-DD nebo „#now“ (dnešní datum), ke kterému mají být tvrzení platná | ||
sort | ne | způsob, jakým změnit implicitní pořadí jednotlivých hodnot; hodnota parametru odpovídá čárkou odděleným podstránkám modulu Wikidata/Sorters | ||
invert | ne | pokud je „true“ a je zadán způsob řazení („sort“), řazení bude sestupné, nikoliv výchozí vzestupné | ||
pattern | ne | pokud je typ hodnoty řetězec, je toto vzor pro zformátování, přičemž „$1“ nahrazuje daný řetězec | ||
autoformat | ne | pokud je „true“ a typ hodnoty řetězec, modul se na stránce dotyčné vlastnosti pokusí najít náhradu za pattern (URL pro zformátování (P1630)) a aplikuje ji | ||
precision | ne | přizpůsobení formátu časových údajů (pokud je skutečná přesnost nižší, formát se přizpůsobí jí); 11 – 13. května 2024, 10 – květen 2024, 9 – 2024 atd. | ||
somevalue | ne | pokud je vyplněný, modul bude zobrazovat i speciální hodnotu „neznámá hodnota“ s tímto textem | ||
novalue | ne | pokud je vyplněný, modul bude zobrazovat i speciální hodnotu „bez hodnoty“ s tímto textem | ||
showqualifier | ne | čárkou oddělené identifikátory vlastností na Wikidatech (písmeno „p“ následované číslicemi nebo „time“), které se zobrazí v závorce za hodnotou, pokud jsou dané hodnotě jako vymezení přiřazeny | ||
showsource | ne | pokud je „true“, k datům z repozitáře se přidají reference | ||
max_ref | ne | maximální počet referencí, které se mají zobrazit | ||
showmore | ne | pokud je hodnota „true“, tak se v případě, že existuje více hodnot, než kolik povoluje limit, zobrazí na konci jejich seznamu text „… více na Wikidatech“ s odkazem přímo na vlastnost | ||
list | ne | pokud je hodnota „ul“ nebo „ol“, hodnoty budou vráceny jako HTML seznam („ol“ – číslovaný, „ul“ – odrážkový) | ||
separator | ne | znaky, jimiž se v seznamu oddělí jednotlivé hodnoty, kromě předposlední a poslední (implicitně čárka, neplatí pro HTML seznam) | ||
conjunction | ne | znaky, jimiž se v seznamu oddělí předposlední a poslední hodnota (implicitně spojka „a“, neplatí pro HTML seznam) | ||
qualifiers ... | ne | takto uvozený argument (např. „qualifiers precision“) bude použit pro výběr a formátování vymezení | ||
showtargetdata* | ne | podobné jako „showqualifier“, ovšem data se místo z vymezení získávají z cílové položky | ||
targetdate* | ne | podobné jako „date“, vztahuje se k údajům cílové položky | ||
formatStatementsFromLua
|
funkce, kterou používají pouze jiné moduly a která je jinak shodná s formatStatements
|
entity | ne | tabulka s entitou, s níž má modul pracovat |
getSitelink
|
vrátí odkaz na článek daného projektu | site / první nepojmenovaný | ne | zkratka projektu (implicitně „cswiki“) |
pattern | ne | vzor pro zformátování odkazu, kde „$1“ je název odkazovaného článku (implicitně „$1“) | ||
id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true“, odkaz bude obalen CSS třídou | ||
getLabel
|
vrátí štítek položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs“) |
id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true“, štítek bude obalen CSS třídou | ||
getDescription
|
vrátí popisek položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs“) |
id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true“, popisek bude obalen CSS třídou | ||
getAliases
|
vrátí aliasy položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs“) |
limit | ne | maximální počet aliasů, který se má zobrazit | ||
id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
showmore | ne | jako u formatStatements
| ||
list | ne | |||
separator | ne | |||
conjunction | ne | |||
getBadges
|
vrátí štítek odznaku přiřazeného danému odkazu na článek | site | ano | zkratka projektu |
id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p“ následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
getCount
|
vrátí počet tvrzení podle daných kritérií | všechny parametry pro filtrování | ||
getCurrentId
|
vrátí id položky, se kterou je stránka propojena | |||
getId
|
Vrátí id položky propojené se zadanou stránkou. Není-li propojená a jedná se o přesměrování, následuje jej (i rekurzivně). Nepodaří-li se, zkusí další stránky, pokud jich bylo zadáno víc. Nedostane-li parametry přímo, zpracuje parametry předané volající šabloně. | první, druhý, ... nepojmenovaný | ne | název stránky na dané wiki (implicitně aktuální stránka) |
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
getRawValue
|
použije stejná kritéria jako formatStatements , ovšem vrátí strojově čitelný (nezformátovaný) údaj
|
všechny parametry pro filtrování | ||
field | ne | pokud je typ hodnoty souřadnice, toto je její část, která se zobrazí; jedno z „latitude“, „longitude“, „precision“ a „globe“ | ||
getRawValueFromLua
|
jako getRawValue , pro použití v jiném modulu
|
entity | ne | tabulka s entitou, s níž má modul pracovat |
getQualifier
|
vrací hodnoty vymezení nalezeného tvrzení | qualifier | ano | vlastnost vymezení, jejíž hodnoty mají být vráceny |
qualifiers ... | ne | takto uvozený argument (např. „qualifiers withlang“) bude použit pro výběr (při filtrování) vymezení | ||
stejné jako u funkce formatStatements
| ||||
getRawQualifier
|
aplikuje chování funkce getRawValue na getQualifier
|
stejné jako u funkce getQualifier
| ||
formatEntity
|
lokalizuje položku zadanou pomocí jejího identifikátoru (pokusí se vytvořit lokální odkaz a zobrazit štítek) | id | ne | id položky, která se má zformátovat (jinak id položky, se kterou je stránka propojena) |
entityExists
|
zjistí, zda entita (položka, vlastnost atd.) s daným identifikátorem existuje (přesměrování se považuje za existující) | id / první nepojmenovaný | ano | id položky, jejíž existenci zjišťujeme |
ifexpr | ne | pokud je „true“, negativní hodnota bude vrácena jako „0“, jinak (výchozí chování) jako prázdný řetězec (užitečné, pokud ve wikitextu používáme funkci #ifexpr:, a ne #if:) | ||
isValidEntityId
|
zjistí, zda zadaný řetězec je platný identifikátor entity (položky, vlastnosti atd.) | id / první nepojmenovaný | ano | řetězec, jehož validitu testujeme |
ifexpr | ne | jako u entityExists
| ||
dumpWikidataEntity
|
zobrazí entitu v čitelné podobě, užitečná pro ladění a zavádění nových funkcí, nepoužívá se v šablonách nebo článcích | id | ne | identifikátor položky (písmeno „q“ následované číslicemi) nebo vlastnosti (písmeno „p“ následované číslicemi) na Wikidatech, jejíž entita se zobrazí (implicitně je to položka propojená s danou stránkou) |
require "Modul:No globals"
local p = {}
local lib = require "Modul:Wikidata/lib"
local i18n = mw.loadData("Modul:Wikidata/i18n")
local function getIdFromStatements(entity, prop)
local prop = mw.ustring.upper(prop)
local Statements = entity:getBestStatements(prop)
for _, statement in ipairs(Statements) do
if lib.IsSnakValue(statement.mainsnak) then
if statement.mainsnak.datavalue.type ~= 'wikibase-entityid' then
return error(lib.raiseInvalidDatatype('findEntity',
statement.mainsnak.datatype, {'wikibase-item', 'wikibase-property'}))
end
local Formatters = require 'Modul:Wikidata/Formatters'
return Formatters.getRawValue(statement.mainsnak)
end
end
return nil
end
local function findEntityId(options)
local id, entity
if options.entity and type(options.entity) == "table" then
entity = options.entity
id = entity.id
end
if not entity then
id = options.id or p.getCurrentId()
end
if options.of then
if not entity then
entity = mw.wikibase.getEntity(id)
end
if entity then
return getIdFromStatements(entity, options.of)
end
return nil
end
return id
end
local function findEntity(options)
local entity
if options.entity and type(options.entity) == "table" then
entity = options.entity
end
if not entity then
if options.id then
local id = options.id:upper()
entity = mw.wikibase.getEntity(id)
if entity and entity.id ~= id then
mw.log(id .. ' je přesměrování na ' .. entity.id)
end
else
entity = mw.wikibase.getEntity()
end
end
if options.of then
if entity then
local id = getIdFromStatements(entity, options.of)
if id then
return mw.wikibase.getEntity(id)
end
end
return nil
end
return entity
end
local function getSitelink(options)
local options = lib.common.cleanArgs(options)
local id = findEntityId(options)
if not id then
return nil
end
local site = options.site or options[1]
local sitelink
if not site or site == 'cswiki' then
sitelink = mw.wikibase.sitelink(id)
else
local entity = mw.wikibase.getEntity(id)
if entity and entity.sitelinks then
sitelink = entity:getSitelink(site)
end
end
if not sitelink then
return nil
end
if options.pattern then
sitelink = lib.formatFromPattern(sitelink, options.pattern)
end
if lib.IsOptionTrue(options, 'addclass') then
sitelink = lib.addWdClass(sitelink)
end
return sitelink
end
local function formatStatement(statement, options)
if not statement.type or statement.type ~= 'statement' then
return error(lib.formatError('unknown-claim-type', statement.type or '[neznámý]'))
end
local Filterers = require 'Modul:Wikidata/Filterers'
local Formatters = require 'Modul:Wikidata/Formatters'
local mainsnak, qualifiers, targetdata, references
if not lib.IsOptionTrue(options, 'qualifiersOnly') then
mainsnak = Formatters.getFormattedValue(statement.mainsnak, options)
end
if options.isQualifier == true then
return mainsnak
end
if statement.qualifiers and options.showqualifier then
local PropList = lib.textToTable(options.showqualifier)
local Snaks = {}
for _, property in ipairs(PropList) do
local Values = {}
local property = mw.ustring.upper(property)
local format_options = {
autoformat = true,
precision = 9,
property = property,
isQualifier = true
}
if statement.qualifiers[property] then
local Qualifiers = Filterers.filterQualifiers(statement.qualifiers[property], options)
for _, snak in ipairs(Qualifiers) do
if lib.IsSnakValue(snak) then
table.insert(Values, Formatters.getFormattedValue(snak, format_options))
end
end
elseif property == "TIME" then
local Data = {}
for key, array in pairs(lib.props) do
for _, prop in ipairs(array) do
if statement.qualifiers[prop] then
for _, snak in ipairs(statement.qualifiers[prop]) do
if lib.IsSnakValue(snak) then
Data[key] = Formatters.getRawValue(snak)
break
end
end
end
end
end
local Date = require 'Modul:Wikidata/datum'
if Data.point then
table.insert(Values, Date.formatDateFromTimevalue(Data.point, format_options))
elseif Data.begin or Data.ending then
table.insert(Values, Date.formatDateRange(Data, format_options))
end
end
if #Values > 0 then
table.insert(Snaks, mw.text.listToText(Values))
end
end
if #Snaks > 0 then
qualifiers = table.concat(Snaks, '; ')
end
end
if not qualifiers and options.showtargetdata then
local entity
if lib.IsSnakValue(statement.mainsnak) then
if statement.mainsnak.datavalue.type == 'wikibase-entityid' then
entity = mw.wikibase.getEntity(Formatters.getRawValue(statement.mainsnak))
else
return error(lib.formatError('invalid-datatype', statement.mainsnak.property, statement.mainsnak.datatype, 'wikibase-item/wikibase-property'))
end
end
if entity then
local PropList = lib.textToTable(options.showtargetdata)
local date
local rank = 'best'
if options.targetdate then
if mw.ustring.match(options.targetdate, '^[Pp][1-9]%d-$') then
date = p.getRawValueFromLua{ entity = options.entity, property = options.targetdate }
else
date = options.targetdate
end
if date then
rank = 'valid'
end
end
local options = {
autoformat = true,
date = date,
entity = entity,
isQualifier = true,
precision = 9,
rank = rank,
sort = 'date',
}
local Snaks = {}
for _, property in ipairs(PropList) do
local result
if mw.ustring.lower(property) == 'time' then
local Data = {}
for key, array in pairs(lib.props) do
for _, prop in ipairs(array) do
options.property = prop
local Statements = Filterers.filterStatementsFromEntity(entity, options)
for _, statement in ipairs(Statements) do
Data[key] = Formatters.getRawValue(statement.mainsnak)
break
end
end
end
local Date = require 'Modul:Wikidata/datum'
if Data.point then
result = Date.formatDateFromTimevalue(Data.point, options)
elseif Data.begin or Data.ending then
result = Date.formatDateRange(Data, options)
end
else
options.property = property
result = p.formatStatementsFromLua(options)
end
if result then
table.insert(Snaks, result)
end
end
if #Snaks > 0 then
targetdata = table.concat(Snaks, '; ')
end
end
end
if statement.references and lib.IsOptionTrue(options, 'showsource') then
local Module = require 'Module:Wikidata/cite'
references = Module.formatReferences(statement.references, options)
end
if qualifiers or targetdata then
if lib.IsOptionTrue(options, 'qualifiersOnly') then
mainsnak = qualifiers or targetdata
else
if options.delimiter then
mainsnak = mainsnak .. options.delimiter .. (qualifiers or targetdata)
else
mainsnak = mainsnak .. ' (' .. (qualifiers or targetdata) .. ')'
end
end
end
if references then
mainsnak = mainsnak .. references
end
return mainsnak
end
local function formatStatements(options)
local value = options.value
if value then
if value == '' and lib.IsOptionTrue(options, 'over') then
value = nil
end
if value and not lib.IsOptionTrue(options, 'compare') then
return value
end
end
--Get entity
options = lib.common.cleanArgs(options)
local entity = findEntity(options)
options.limit = tonumber(options.limit) --TODO default?
local add_more = false
if not lib.IsOptionTrue(options, 'compare') then
if options.limit and lib.IsOptionTrue(options, 'showmore') then
options.limit = options.limit + 1
add_more = true
end
end
local Filterers = require 'Modul:Wikidata/Filterers'
local Statements = Filterers.filterStatementsFromEntity(entity, options)
options.property = mw.ustring.upper(options.property)
if value then
local compare = require 'Modul:Wikidata/compare'
local marked, category = compare.compareValues(value, Statements, {
catbase = options.catbase,
property = options.of or options.property
})
if lib.IsOptionTrue(options, 'addclass') and marked then
value = marked
end
if lib.IsOptionTrue(options, 'addcat') and category then
value = value .. category
end
return value
end
if #Statements == 0 then return nil end
if add_more then
if #Statements == options.limit then
table.remove(Statements)
else
add_more = false
end
end
-- Format statements and concat them cleanly
local formattedStatements = {}
options.entity = entity
for _, statement in ipairs(Statements) do
local formatted = formatStatement(statement, options)
local add = true
for _, fmt in ipairs(formattedStatements) do
if formatted == fmt then
add = false
break
end
end
if add then
table.insert(formattedStatements, formatted)
end
end
if add_more then
table.insert(formattedStatements, mw.ustring.format(i18n["more-on-Wikidata"], entity.id, options.property))
end
value = mw.text.listToText(formattedStatements, options.separator, options.conjunction)
if lib.IsOptionTrue(options, 'addlink') then
value = mw.ustring.format('%s <sup class="wd-link">([[d:%s#%s|e]])</sup>', value, entity.id, options.property)
end
if lib.IsOptionTrue(options, 'addcat') then
value = value .. lib.category('used-property', options.catbase or 'Vlastnost ' .. options.property)
end
if lib.IsOptionTrue(options, 'addclass') then
value = lib.addWdClass(value)
end
return value
end
function p.dumpWikidataEntity( frame )
local args = frame and frame.args or {}
return mw.dumpObject( mw.wikibase.getEntity( args.id or nil ) )
end
function p.getBadges( frame )
local args = lib.common.cleanArgs((frame and frame.args) or {})
local site = args.site
if not site then
return error(lib.formatError('param-not-provided', 'site'))
end
local entity = findEntity( args )
local Badges = {}
if entity and entity.sitelinks and entity.sitelinks[site] then
local ItemFormatter = require 'Modul:Wikidata/item'
for _, badge in ipairs(entity.sitelinks[site].badges) do
table.insert(Badges, ItemFormatter.formatEntityId(badge))
end
end
return table.concat( Badges, ', ' )
end
function p.getLabel( frame )
local args = lib.common.cleanArgs((frame and frame.args) or {})
local id = findEntityId(args)
if not id then
return nil
end
local lang = args.lang
if not lang or lang == mw.language.getContentLanguage():getCode() then
local label = mw.wikibase.label(id)
if label and lib.IsOptionTrue(args, 'addclass') then
label = lib.addWdClass(label)
end
return label
end
local entity = mw.wikibase.getEntity(id)
if entity and entity.labels and entity.labels[lang] then
local label = entity.labels[lang].value
if label and lib.IsOptionTrue(args, 'addclass') then
label = lib.addWdClass(label)
end
return label
end
return nil
end
function p.getDescription( frame )
local args = lib.common.cleanArgs((frame and frame.args) or {})
local id = findEntityId(args)
if not id then
return nil
end
local lang = args.lang
if not lang or lang == mw.language.getContentLanguage():getCode() then
local description = mw.wikibase.description(id)
if description and lib.IsOptionTrue(args, 'addclass') then
description = lib.addWdClass(description)
end
return description
end
local entity = mw.wikibase.getEntity(id)
if entity and entity.descriptions and entity.descriptions[lang] then
local description = entity.descriptions[lang].value
if description and lib.IsOptionTrue(args, 'addclass') then
description = lib.addWdClass(description)
end
return description
end
return nil
end
function p.getAliases( frame )
local args = lib.common.cleanArgs((frame and frame.args) or {})
local lang = args.lang
local entity = findEntity( args )
if not lang then
lang = mw.language.getContentLanguage():getCode()
end
if not entity or not entity.aliases or not entity.aliases[lang] then
return nil
end
local limit = tonumber(args.limit)
local Aliases = {}
for i, alias in ipairs( entity.aliases[lang] ) do
if not limit or (limit and i <= limit) then
table.insert( Aliases, alias.value )
else break end
end
local list = mw.text.listToText(Aliases, args.separator, args.conjunction)
if lib.IsOptionTrue(args, 'addclass') then
list = lib.addWdClass(list)
end
return list
end
function p.getCount( frame )
local args = lib.common.cleanArgs((frame and frame.args) or {})
if not args.property then
return error(lib.formatError('param-not-provided', 'property'))
end
args.limit = nil
local entity = findEntity( args )
local Filterers = require 'Modul:Wikidata/Filterers'
local Statements = Filterers.filterStatementsFromEntity(entity, args)
return #Statements
end
p.getCurrentId = mw.wikibase.getEntityIdForCurrentPage
function p.getId( frame )
local args = frame.args[1] and frame.args or frame:getParent().args
if not args[1] then
return mw.wikibase.getEntityIdForCurrentPage()
end
for _, titleString in ipairs(args) do
local title = mw.title.new(titleString)
while title do
local id = mw.wikibase.getEntityIdForTitle(title.prefixedText)
if id then
return id
end
title = title.redirectTarget
end
end
end
function p.getSitelink( frame )
return getSitelink( frame.args or {} )
end
function p.getSitelinkFromLua( options )
return getSitelink( options or {} )
end
-- @deprecated
function p.filterStatementsFromLua(...)
local Filterers = require 'Modul:Wikidata/Filterers'
return Filterers.filterStatementsFromEntity(...)
end
function p.formatStatements(frame)
local args = frame and frame.args or {}
return formatStatements(args)
end
function p.formatStatementsFromLua(options)
return formatStatements(options)
end
local function getRawValue(options)
local entity = findEntity(options)
if options.showspecial == nil then -- may be false
options.showspecial = true
end
if options.rank ~= 'best' and options.rank ~= 'preferred' then
if options.sort then
if not mw.ustring.match(options.sort, 'rank') then
options.sort = 'rank,' .. options.sort
end
else
options.sort = 'rank'
end
end
local Filterers = require 'Modul:Wikidata/Filterers'
local Statements = Filterers.filterStatementsFromEntity(entity, options)
for _, statement in ipairs(Statements) do
local Formatters = require 'Modul:Wikidata/Formatters'
return Formatters.getRawValue(statement.mainsnak, options)
end
return nil
end
function p.getRawValue(frame)
return getRawValue(lib.common.cleanArgs((frame and frame.args) or {}))
end
function p.getRawValueFromLua(options)
return getRawValue(options)
end
function p.formatEntity(frame)
local formatter = require 'Modul:Wikidata/item'
local args = lib.common.cleanArgs((frame and frame.args) or {})
local id = args.id or p.getCurrentId()
args.id = nil
if id then
return formatter.formatEntityId(id, args)
end
return nil
end
return p