<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>https://wiki.czchan.org/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3AWikidata</id>
	<title>Modul:Wikidata - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.czchan.org/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3AWikidata"/>
	<link rel="alternate" type="text/html" href="https://wiki.czchan.org/w/index.php?title=Modul:Wikidata&amp;action=history"/>
	<updated>2026-05-13T17:44:13Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.czchan.org/w/index.php?title=Modul:Wikidata&amp;diff=80&amp;oldid=prev</id>
		<title>Sneedmaster: naimportována 1 revize</title>
		<link rel="alternate" type="text/html" href="https://wiki.czchan.org/w/index.php?title=Modul:Wikidata&amp;diff=80&amp;oldid=prev"/>
		<updated>2026-01-10T14:49:44Z</updated>

		<summary type="html">&lt;p&gt;naimportována 1 revize&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;cs&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Starší verze&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Verze z 10. 1. 2026, 14:49&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;cs&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Žádný rozdíl)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key nuwiki-nuwiki-:diff:1.41:old-79:rev-80 --&gt;
&lt;/table&gt;</summary>
		<author><name>Sneedmaster</name></author>
	</entry>
	<entry>
		<id>https://wiki.czchan.org/w/index.php?title=Modul:Wikidata&amp;diff=79&amp;oldid=prev</id>
		<title>wp&gt;Matěj Suchánek: podpora parent_args.item ve více funkcích via User:Petr Matas</title>
		<link rel="alternate" type="text/html" href="https://wiki.czchan.org/w/index.php?title=Modul:Wikidata&amp;diff=79&amp;oldid=prev"/>
		<updated>2025-07-27T16:59:01Z</updated>

		<summary type="html">&lt;p&gt;podpora parent_args.item ve více funkcích via &lt;a href=&quot;/w/index.php?title=U%C5%BEivatel:Petr_Matas&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Uživatel:Petr Matas (stránka neexistuje)&quot;&gt;User:Petr Matas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require &amp;#039;strict&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local lib = require &amp;#039;Modul:Wikidata/lib&amp;#039;&lt;br /&gt;
local i18n = mw.loadData(&amp;#039;Modul:Wikidata/i18n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local getArgs = (require &amp;#039;Modul:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local function getWikidataArgs(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local parent_args = getArgs(frame, { parentOnly = true })&lt;br /&gt;
	local add = &amp;#039;&amp;#039;&lt;br /&gt;
	if parent_args.item and not args.id then&lt;br /&gt;
		args.id = parent_args.item&lt;br /&gt;
		add = lib.category(&amp;#039;arbitrary-data&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return args, add&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function outputBool(arg, ifexpr)&lt;br /&gt;
	local map&lt;br /&gt;
	if ifexpr then&lt;br /&gt;
		map = { [true] = 1, [false] = 0 }&lt;br /&gt;
	else&lt;br /&gt;
		map = { [true] = 1, [false] = &amp;#039;&amp;#039; }&lt;br /&gt;
	end&lt;br /&gt;
	return map[arg]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeDuplicates(values)&lt;br /&gt;
	local TableTools = require &amp;#039;Modul:TableTools&amp;#039;&lt;br /&gt;
	return TableTools.removeDuplicates(values)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityIdFromStatements(statements)&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		if lib.IsSnakValue(statement.mainsnak) then&lt;br /&gt;
			if statement.mainsnak.datavalue.type ~= &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
				error(lib.raiseInvalidDatatype(&amp;#039;getEntityIdFromStatements&amp;#039;,&lt;br /&gt;
					statement.mainsnak.datatype, {&amp;#039;wikibase-item&amp;#039;, &amp;#039;wikibase-property&amp;#039;}))&lt;br /&gt;
			end&lt;br /&gt;
			local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
			return Formatters.getRawValue(statement.mainsnak, {})&lt;br /&gt;
		end&lt;br /&gt;
		break&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityIdFromEntity(entity, prop)&lt;br /&gt;
	local prop = mw.ustring.upper(prop)&lt;br /&gt;
	local statements = entity:getBestStatements(prop)&lt;br /&gt;
	return getEntityIdFromStatements(statements)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityIdFromId(id, prop)&lt;br /&gt;
	local prop = mw.ustring.upper(prop)&lt;br /&gt;
	local statements = mw.wikibase.getBestStatements(id, prop)&lt;br /&gt;
	return getEntityIdFromStatements(statements)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getIdFromTitle(titleString, wiki)&lt;br /&gt;
	if wiki then&lt;br /&gt;
		return mw.wikibase.getEntityIdForTitle(titleString, wiki)&lt;br /&gt;
	end&lt;br /&gt;
	local title = mw.title.new(titleString)&lt;br /&gt;
	while title do&lt;br /&gt;
		local id = mw.wikibase.getEntityIdForTitle(title.prefixedText)&lt;br /&gt;
		if id then&lt;br /&gt;
			return id&lt;br /&gt;
		end&lt;br /&gt;
		title = title.redirectTarget&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findEntityId(options)&lt;br /&gt;
	local id&lt;br /&gt;
	if options.entity and type(options.entity) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		id = options.entity.id&lt;br /&gt;
	end&lt;br /&gt;
	if not id and options.page then&lt;br /&gt;
		id = getIdFromTitle(options.page, options.wiki)&lt;br /&gt;
		if not id then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not id then&lt;br /&gt;
		id = options.id or p.getCurrentId()&lt;br /&gt;
	end&lt;br /&gt;
	if id and options.of then&lt;br /&gt;
		id = getEntityIdFromId(id, options.of)&lt;br /&gt;
	end&lt;br /&gt;
	return id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findEntity(options)&lt;br /&gt;
	local entity&lt;br /&gt;
	if options.entity and type(options.entity) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		entity = options.entity&lt;br /&gt;
	end&lt;br /&gt;
	if not entity then&lt;br /&gt;
		if options.id then&lt;br /&gt;
			local id = options.id:upper()&lt;br /&gt;
			entity = mw.wikibase.getEntity(id)&lt;br /&gt;
			if entity and entity.id ~= id then&lt;br /&gt;
				mw.log(id .. &amp;#039; je přesměrování na &amp;#039; .. entity.id)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if options.page then&lt;br /&gt;
				local id = getIdFromTitle(options.page, options.wiki)&lt;br /&gt;
				if id then&lt;br /&gt;
					entity = mw.wikibase.getEntity(id)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				entity = mw.wikibase.getEntity()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.of then&lt;br /&gt;
		if entity then&lt;br /&gt;
			local id = getEntityIdFromEntity(entity, options.of)&lt;br /&gt;
			if id then&lt;br /&gt;
				return mw.wikibase.getEntity(id)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return entity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSitelink(options)&lt;br /&gt;
	local id = findEntityId(options)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local site = options.site or options[1]&lt;br /&gt;
	local sitelink = mw.wikibase.getSitelink(id, site)&lt;br /&gt;
&lt;br /&gt;
	if not sitelink then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.pattern then&lt;br /&gt;
		sitelink = lib.formatFromPattern(sitelink, options.pattern)&lt;br /&gt;
	end&lt;br /&gt;
	if lib.IsOptionTrue(options, &amp;#039;addclass&amp;#039;) then&lt;br /&gt;
		sitelink = lib.addWdClass(sitelink)&lt;br /&gt;
	end&lt;br /&gt;
	return sitelink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatementAndData(statement, options)&lt;br /&gt;
	if not statement.type or statement.type ~= &amp;#039;statement&amp;#039; then&lt;br /&gt;
		error(lib.formatError(&amp;#039;unknown-claim-type&amp;#039;, statement.type or &amp;#039;[neznámý]&amp;#039;)) -- fixme: i18n&lt;br /&gt;
	end&lt;br /&gt;
	local Filterers = require &amp;#039;Modul:Wikidata/Filterers&amp;#039;&lt;br /&gt;
	local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local result = { Formatters.getFormattedValue(statement.mainsnak, options) }&lt;br /&gt;
	local qualifiers&lt;br /&gt;
	if statement.qualifiers and options.showqualifier then&lt;br /&gt;
		local PropList = lib.textToTable(options.showqualifier)&lt;br /&gt;
		-- TODO: move this to a better place (config)&lt;br /&gt;
		local default_options = {&lt;br /&gt;
			isQualifier = true,&lt;br /&gt;
			label = &amp;#039;short&amp;#039;,&lt;br /&gt;
			nolink = lib.IsOptionTrue(options, &amp;#039;nolink&amp;#039;),&lt;br /&gt;
			precision = 9,&lt;br /&gt;
		}&lt;br /&gt;
		for _, property in ipairs(PropList) do&lt;br /&gt;
			local property = mw.ustring.upper(property)&lt;br /&gt;
			local Values = {}&lt;br /&gt;
			local qualifiers_options = lib.augmentArgs(options, default_options, &amp;#039;qualifiers &amp;#039;)&lt;br /&gt;
			if statement.qualifiers[property] then&lt;br /&gt;
				local Qualifiers = mw.clone(statement.qualifiers[property])&lt;br /&gt;
				qualifiers_options.property = property&lt;br /&gt;
				if not qualifiers_options.nolink then&lt;br /&gt;
					qualifiers_options.nolink = (Qualifiers[1].datatype == &amp;#039;time&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				Filterers.filterQualifiers(Qualifiers, qualifiers_options)&lt;br /&gt;
				for _, snak in ipairs(Qualifiers) do&lt;br /&gt;
					table.insert(Values, Formatters.getFormattedValue(snak, qualifiers_options))&lt;br /&gt;
				end&lt;br /&gt;
			elseif property == &amp;#039;TIME&amp;#039; then&lt;br /&gt;
				local Data = {}&lt;br /&gt;
				-- TODO: factor out&lt;br /&gt;
				for key, array in pairs(lib.props) do&lt;br /&gt;
					for _, prop in ipairs(array) do&lt;br /&gt;
						for _, snak in ipairs(statement.qualifiers[prop] or {}) do&lt;br /&gt;
							if lib.IsSnakValue(snak) then -- dokud nebude jasné, jak to používat&lt;br /&gt;
								Data[key] = snak&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if Data.begin or Data.ending then&lt;br /&gt;
					qualifiers_options.nolink = true&lt;br /&gt;
					table.insert(Values, lib.formatDateRange(Data, qualifiers_options))&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if #Values &amp;gt; 0 then&lt;br /&gt;
				result[property] = mw.text.listToText(&lt;br /&gt;
					removeDuplicates(Values),&lt;br /&gt;
					qualifiers_options.separator,&lt;br /&gt;
					qualifiers_options.conjunction)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if statement.references and lib.IsOptionTrue(options, &amp;#039;showsource&amp;#039;) then&lt;br /&gt;
		-- TODO: configure custom formatter&lt;br /&gt;
		local Module = require &amp;#039;Modul:Wikidata/cite&amp;#039;&lt;br /&gt;
		result.ref = Module.formatReferences(statement.references, options) -- or table of references?&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatement(statement, options)&lt;br /&gt;
	local data = formatStatementAndData(statement, options)&lt;br /&gt;
	local result = data[1]&lt;br /&gt;
	if options.isQualifier == true then&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local qualifiers&lt;br /&gt;
	if statement.qualifiers and options.showqualifier then&lt;br /&gt;
		local PropList = lib.textToTable(options.showqualifier)&lt;br /&gt;
		local tmp = {}&lt;br /&gt;
		for _, prop in ipairs(PropList) do&lt;br /&gt;
			local prop = mw.ustring.upper(prop)&lt;br /&gt;
			if data[prop] then&lt;br /&gt;
				table.insert(tmp, data[prop])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if #tmp &amp;gt; 0 then&lt;br /&gt;
			qualifiers = table.concat(tmp, i18n[&amp;#039;qualifiers separator&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not qualifiers and options.showtargetdata then&lt;br /&gt;
		local entity&lt;br /&gt;
		local Filterers = require &amp;#039;Modul:Wikidata/Filterers&amp;#039;&lt;br /&gt;
		local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
		if lib.IsSnakValue(statement.mainsnak) then&lt;br /&gt;
			if statement.mainsnak.datavalue.type == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
				entity = mw.wikibase.getEntity(Formatters.getRawValue(statement.mainsnak, {}))&lt;br /&gt;
			else&lt;br /&gt;
				error(lib.formatError(&amp;#039;invalid-datatype&amp;#039;, statement.mainsnak.property, statement.mainsnak.datatype, &amp;#039;wikibase-item/wikibase-property&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if entity then&lt;br /&gt;
			local PropList = lib.textToTable(options.showtargetdata)&lt;br /&gt;
			local date&lt;br /&gt;
			local rank = &amp;#039;best&amp;#039;&lt;br /&gt;
			if options.targetdate then&lt;br /&gt;
				if lib.isPropertyId(options.targetdate) then&lt;br /&gt;
					date = p.getRawValueFromLua{ entity = options.entity, property = options.targetdate }&lt;br /&gt;
				else&lt;br /&gt;
					date = options.targetdate&lt;br /&gt;
				end&lt;br /&gt;
				if date then&lt;br /&gt;
					rank = &amp;#039;valid&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			local options = {&lt;br /&gt;
				addclass = false,&lt;br /&gt;
				autoformat = true,&lt;br /&gt;
				date = date,&lt;br /&gt;
				entity = entity,&lt;br /&gt;
				isQualifier = true,&lt;br /&gt;
				label = &amp;#039;short&amp;#039;,&lt;br /&gt;
				nolink = true,&lt;br /&gt;
				precision = 9,&lt;br /&gt;
				rank = rank,&lt;br /&gt;
				sort = {&amp;#039;date&amp;#039;},&lt;br /&gt;
			}&lt;br /&gt;
			local Snaks = {}&lt;br /&gt;
			for _, property in ipairs(PropList) do&lt;br /&gt;
				local result&lt;br /&gt;
				if mw.ustring.lower(property) == &amp;#039;time&amp;#039; then&lt;br /&gt;
					local Data = {}&lt;br /&gt;
					for key, array in pairs(lib.props) do&lt;br /&gt;
						for _, prop in ipairs(array) do&lt;br /&gt;
							options.property = prop&lt;br /&gt;
							local Statements = Filterers.filterStatementsFromEntity(entity, options)&lt;br /&gt;
							for _, statement in ipairs(Statements) do&lt;br /&gt;
								Data[key] = statement.mainsnak&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if Data.begin or Data.ending then&lt;br /&gt;
						result = lib.formatDateRange(Data, options)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					options.property = property&lt;br /&gt;
					result = p.formatStatementsFromLua(options)&lt;br /&gt;
				end&lt;br /&gt;
				if result then&lt;br /&gt;
					table.insert(Snaks, result)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if #Snaks &amp;gt; 0 then&lt;br /&gt;
				qualifiers = table.concat(Snaks, i18n[&amp;#039;qualifiers separator&amp;#039;])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if qualifiers then&lt;br /&gt;
		if options.delimiter then&lt;br /&gt;
			result = result .. options.delimiter .. qualifiers&lt;br /&gt;
		else&lt;br /&gt;
			result = result .. &amp;#039; (&amp;#039; .. qualifiers .. &amp;#039;)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if data.ref and data.ref ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return result .. data.ref .. lib.category(&amp;#039;references&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatements(statements, options)&lt;br /&gt;
	local formattedStatements = {}&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		table.insert(formattedStatements, formatStatement(statement, options))&lt;br /&gt;
	end&lt;br /&gt;
	return formattedStatements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getStatements(id, options)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	local statements = mw.wikibase.getAllStatements(id, options.property:upper())&lt;br /&gt;
	local Filterers = require &amp;#039;Modul:Wikidata/Filterers&amp;#039;&lt;br /&gt;
	Filterers.filterStatements(statements, options)&lt;br /&gt;
	return statements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function prepareShowMore(options)&lt;br /&gt;
	if options.limit and lib.IsOptionTrue(options, &amp;#039;showmore&amp;#039;) then&lt;br /&gt;
		options.limit = options.limit + 1&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function handleShowMore(values, limit, add_more)&lt;br /&gt;
	if add_more then&lt;br /&gt;
		if #values == limit then&lt;br /&gt;
			table.remove(values)&lt;br /&gt;
		else&lt;br /&gt;
			add_more = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return add_more&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeList(values, options, add_more, link)&lt;br /&gt;
	values = removeDuplicates(values) -- TODO: maybe make optional&lt;br /&gt;
	if add_more then&lt;br /&gt;
		local parts = mw.text.split(link, &amp;#039;#&amp;#039;, true) -- b/c&lt;br /&gt;
		table.insert(values, mw.ustring.format(i18n[&amp;#039;more-on-Wikidata&amp;#039;], parts[1], parts[2] or &amp;#039;&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	local text&lt;br /&gt;
	if options.list == &amp;#039;ul&amp;#039; or options.list == &amp;#039;ol&amp;#039; then&lt;br /&gt;
		local li = {}&lt;br /&gt;
		for _, val in ipairs(values) do&lt;br /&gt;
			table.insert(li, mw.ustring.format(&amp;#039;&amp;lt;li&amp;gt;%s&amp;lt;/li&amp;gt;&amp;#039;, val))&lt;br /&gt;
		end&lt;br /&gt;
		text = mw.ustring.format(&amp;#039;&amp;lt;%s class=&amp;quot;wd&amp;quot;&amp;gt;%s&amp;lt;/%s&amp;gt;&amp;#039;, options.list, table.concat(li), options.list)&lt;br /&gt;
	else&lt;br /&gt;
		text = mw.text.listToText(values, options.separator, options.conjunction)&lt;br /&gt;
		if lib.IsOptionTrue(options, &amp;#039;addlink&amp;#039;) then&lt;br /&gt;
			-- TODO: data-bridge-edit-flow&lt;br /&gt;
			text = mw.ustring.format(&amp;#039;%s &amp;lt;sup class=&amp;quot;wd-link&amp;quot;&amp;gt;([[d:%s|e]])&amp;lt;/sup&amp;gt;&amp;#039;, text, link)&lt;br /&gt;
		end&lt;br /&gt;
		if tostring(options.addclass) ~= &amp;#039;false&amp;#039; then&lt;br /&gt;
			text = lib.addWdClass(text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getFormattedStatements(options)&lt;br /&gt;
	options.limit = tonumber(options.limit) --TODO default?&lt;br /&gt;
	local add_more = prepareShowMore(options)&lt;br /&gt;
	local id = findEntityId(options)&lt;br /&gt;
	local statements = getStatements(id, options)&lt;br /&gt;
&lt;br /&gt;
	if #statements == 0 then return nil end&lt;br /&gt;
	add_more = handleShowMore(statements, options.limit, add_more)&lt;br /&gt;
&lt;br /&gt;
	options.id = id&lt;br /&gt;
	-- Format statements and concat them cleanly&lt;br /&gt;
	local formattedStatements = formatStatements(statements, options)&lt;br /&gt;
	local property = mw.ustring.upper(options.property)&lt;br /&gt;
	local link = mw.ustring.format(&amp;#039;%s#%s&amp;#039;, id, property)&lt;br /&gt;
	local text = makeList(formattedStatements, options, add_more, link)&lt;br /&gt;
	if lib.IsOptionTrue(options, &amp;#039;addcat&amp;#039;) then&lt;br /&gt;
		text = text .. lib.category(&amp;#039;used-property&amp;#039;, property)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRawValue(options)&lt;br /&gt;
	if not options.rank then&lt;br /&gt;
		options.rank = &amp;#039;best&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	for _, statement in ipairs(p.getStatements(options)) do&lt;br /&gt;
		local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
		return Formatters.getRawValue(statement.mainsnak, options)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getQualifiers(args)&lt;br /&gt;
	if not args.qualifier then&lt;br /&gt;
		error(lib.formatError(&amp;#039;param-not-provided&amp;#039;, &amp;#039;qualifier&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if not args.rank then&lt;br /&gt;
		args.rank = &amp;#039;best&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	for _, statement in ipairs(p.getStatements(args)) do&lt;br /&gt;
		if statement.qualifiers then&lt;br /&gt;
			local qualifier_args = lib.augmentArgs(args, {}, &amp;#039;qualifiers &amp;#039;)&lt;br /&gt;
			local qualifiers = mw.clone(statement.qualifiers[mw.ustring.upper(args.qualifier)] or {})&lt;br /&gt;
			local Filterers = require &amp;#039;Modul:Wikidata/Filterers&amp;#039;&lt;br /&gt;
			Filterers.filterQualifiers(qualifiers, qualifier_args)&lt;br /&gt;
			return qualifiers&lt;br /&gt;
		end&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	return {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----- API pro šablony -----&lt;br /&gt;
&lt;br /&gt;
function p.compareStatements(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	return p._compareStatements(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.dumpWikidataEntity(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
&lt;br /&gt;
	return mw.dumpObject( mw.wikibase.getEntity( args.id ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getBadges(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local site = args.site&lt;br /&gt;
	if not site then&lt;br /&gt;
		error(lib.formatError(&amp;#039;param-not-provided&amp;#039;, &amp;#039;site&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	local id = findEntityId(args)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local Badges = {}&lt;br /&gt;
	local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
	for _, badge in ipairs(mw.wikibase.getBadges(id, site)) do&lt;br /&gt;
		table.insert(Badges, Formatters.formatRawValue(badge, &amp;#039;wikibase-entityid&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(Badges, &amp;#039;, &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getLabel(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local id = findEntityId(args)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local lang, label = args.lang&lt;br /&gt;
	if lang then&lt;br /&gt;
		label = mw.wikibase.getLabelByLang(id, lang)&lt;br /&gt;
	else&lt;br /&gt;
		label, lang = mw.wikibase.getLabelWithLang(id)&lt;br /&gt;
	end&lt;br /&gt;
	if not label then return nil end&lt;br /&gt;
	label = mw.text.nowiki(label)&lt;br /&gt;
	if lib.IsOptionTrue(args, &amp;#039;addclass&amp;#039;) then&lt;br /&gt;
		if lang ~= i18n.lang then&lt;br /&gt;
			return lib.addWdClass(lib.formatTextInLanguage(label, lang))&lt;br /&gt;
		else&lt;br /&gt;
			return lib.addWdClass(label)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return label&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDescription(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local id = findEntityId(args)&lt;br /&gt;
	if not id then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local lang, description = args.lang&lt;br /&gt;
	if lang then&lt;br /&gt;
		description = mw.wikibase.getDescriptionByLang(id, lang)&lt;br /&gt;
	else&lt;br /&gt;
		description, lang = mw.wikibase.getDescriptionWithLang(id)&lt;br /&gt;
	end&lt;br /&gt;
	if not description then return nil end&lt;br /&gt;
	description = mw.text.nowiki(description)&lt;br /&gt;
	if lib.IsOptionTrue(args, &amp;#039;addclass&amp;#039;) then&lt;br /&gt;
		if lang ~= i18n.lang then&lt;br /&gt;
			return lib.addWdClass(lib.formatTextInLanguage(description, lang))&lt;br /&gt;
		else&lt;br /&gt;
			return lib.addWdClass(description)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return description&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getAliases(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	local entity = findEntity(args)&lt;br /&gt;
	local lang = args.lang or i18n.lang&lt;br /&gt;
	if not entity or not entity.aliases or not entity.aliases[lang] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	args.limit = tonumber(args.limit)&lt;br /&gt;
	local add_more = prepareShowMore(args)&lt;br /&gt;
	local limit = args.limit&lt;br /&gt;
	local Aliases = {}&lt;br /&gt;
	for i, alias in ipairs(entity.aliases[lang]) do&lt;br /&gt;
		table.insert(Aliases, mw.text.nowiki(alias.value))&lt;br /&gt;
		if i == limit then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	add_more = handleShowMore(Aliases, limit, add_more)&lt;br /&gt;
	return makeList(Aliases, args, add_more, entity.id)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getId(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		frameOnly = false,&lt;br /&gt;
		parentOnly = false,&lt;br /&gt;
		parentFirst = false,&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		return mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, titleString in ipairs(args) do&lt;br /&gt;
		local id = getIdFromTitle(titleString, args.wiki)&lt;br /&gt;
		if id then&lt;br /&gt;
			return id&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSitelink(frame)&lt;br /&gt;
	return getSitelink(getArgs(frame, { frameOnly = true }))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements(frame)&lt;br /&gt;
	local args, add = getWikidataArgs(frame)&lt;br /&gt;
	if args.value then return args.value end -- b/c [[Module:Wikidata infobox]]&lt;br /&gt;
	local value = getFormattedStatements(args)&lt;br /&gt;
	if value then&lt;br /&gt;
		return value .. add&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatTimespan(frame)&lt;br /&gt;
	local args, add = getWikidataArgs(frame)&lt;br /&gt;
	local subargs = {}&lt;br /&gt;
	local data = {}&lt;br /&gt;
	local defaults = { sort = &amp;#039;default&amp;#039; }&lt;br /&gt;
	for key in pairs{ start = true, [&amp;#039;end&amp;#039;] = true } do&lt;br /&gt;
		local prefix = key .. &amp;#039; &amp;#039;&lt;br /&gt;
		if not args[prefix .. &amp;#039;property&amp;#039;] then&lt;br /&gt;
			error(&amp;#039;param-not-provided&amp;#039;, prefix .. &amp;#039;property&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		subargs[key] = lib.augmentArgs(args, defaults, prefix)&lt;br /&gt;
		local statements = p.getStatements(subargs[key])&lt;br /&gt;
		if #statements &amp;gt; 0 then&lt;br /&gt;
			data[key] = statements&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not data.start and not data[&amp;#039;end&amp;#039;] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out = {}&lt;br /&gt;
	if data.start and data[&amp;#039;end&amp;#039;] then&lt;br /&gt;
		for _, startSt in ipairs(data.start) do&lt;br /&gt;
			for _, endSt in ipairs(data[&amp;#039;end&amp;#039;]) do&lt;br /&gt;
				local separator = &amp;#039; – &amp;#039;&lt;br /&gt;
				-- TODO&lt;br /&gt;
				table.insert(&lt;br /&gt;
					out,&lt;br /&gt;
					mw.ustring.format(&amp;#039;%s%s%s&amp;#039;,&lt;br /&gt;
						formatStatement(startSt, subargs.start),&lt;br /&gt;
						separator,&lt;br /&gt;
						formatStatement(endSt, subargs[&amp;#039;end&amp;#039;])&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for key in pairs{ start = true, [&amp;#039;end&amp;#039;] = true } do&lt;br /&gt;
			for _, statement in ipairs(data[key] or {}) do&lt;br /&gt;
				table.insert(&lt;br /&gt;
					out,&lt;br /&gt;
					mw.ustring.format(&lt;br /&gt;
						args[key .. &amp;#039;-format&amp;#039;] or i18n.date[key],&lt;br /&gt;
						formatStatement(statement, subargs[key])&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return makeList(out, args, false, &amp;#039;&amp;#039;) .. add&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatementsFromTemplate(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		frameOnly = false,&lt;br /&gt;
		parentOnly = false,&lt;br /&gt;
		parentFirst = false,&lt;br /&gt;
	})&lt;br /&gt;
	return getFormattedStatements(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getCount(frame)&lt;br /&gt;
	local args, _ = getWikidataArgs(frame)&lt;br /&gt;
	args.limit = nil&lt;br /&gt;
	return #p.getStatements(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawValue(frame)&lt;br /&gt;
	return getRawValue(getWikidataArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier(frame)&lt;br /&gt;
	local args, add = getWikidataArgs(frame)&lt;br /&gt;
	args.limit = tonumber(args[&amp;#039;qualifiers limit&amp;#039;] or args.limit)&lt;br /&gt;
	local add_more = prepareShowMore(args)&lt;br /&gt;
	local limit = args.limit&lt;br /&gt;
	args[&amp;#039;qualifiers limit&amp;#039;] = limit&lt;br /&gt;
	args.limit = 1&lt;br /&gt;
	local qualifiers = getQualifiers(args)&lt;br /&gt;
	if #qualifiers == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	add_more = handleShowMore(qualifiers, limit, add_more)&lt;br /&gt;
	local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
	local formattedQualifiers = {}&lt;br /&gt;
	for _, qualifier in ipairs(qualifiers) do&lt;br /&gt;
		table.insert(formattedQualifiers, Formatters.getFormattedValue(qualifier, args))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local link = &amp;#039;&amp;#039; -- TODO: we don&amp;#039;t have statement anchor&lt;br /&gt;
	-- TODO: references?&lt;br /&gt;
	return makeList(formattedQualifiers, args, add_more, link) .. add&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawQualifier(frame)&lt;br /&gt;
	local args, _ = getWikidataArgs(frame)&lt;br /&gt;
	args.limit = 1&lt;br /&gt;
	for _, qualifier in ipairs(getQualifiers(args)) do&lt;br /&gt;
		local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
		return Formatters.getRawValue(qualifier, args)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getCurrentId()&lt;br /&gt;
	return mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntity(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	args.id = args.id or p.getCurrentId()&lt;br /&gt;
	if args.id then&lt;br /&gt;
		local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
		return Formatters.formatRawValue(args.id, &amp;#039;wikibase-entityid&amp;#039;, args)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.entityExists(frame)&lt;br /&gt;
	return outputBool(&lt;br /&gt;
		mw.wikibase.entityExists(frame.args.id or frame.args[1]),&lt;br /&gt;
		lib.IsOptionTrue(frame.args, &amp;#039;ifexpr&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isValidEntityId(frame)&lt;br /&gt;
	return outputBool(&lt;br /&gt;
		mw.wikibase.isValidEntityId(frame.args.id or frame.args[1]),&lt;br /&gt;
		lib.IsOptionTrue(frame.args, &amp;#039;ifexpr&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----- API pro moduly -----&lt;br /&gt;
&lt;br /&gt;
function p.formatStatementsFromLua(options)&lt;br /&gt;
	return getFormattedStatements(options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSitelinkFromLua(options)&lt;br /&gt;
	return getSitelink(options or {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getStatements(args)&lt;br /&gt;
	local id = findEntityId(args)&lt;br /&gt;
	return getStatements(id, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getStatementsWithData(args)&lt;br /&gt;
	local statements = p.getStatements(args)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		table.insert(result, formatStatementAndData(statement, args))&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawValueFromLua(options)&lt;br /&gt;
	return getRawValue(options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawValues(options)&lt;br /&gt;
	local Values = {}&lt;br /&gt;
	local Formatters = require &amp;#039;Modul:Wikidata/Formatters&amp;#039;&lt;br /&gt;
	for _, st in ipairs(p.getStatements(options)) do&lt;br /&gt;
		table.insert(Values, Formatters.getRawValue(st.mainsnak, options))&lt;br /&gt;
	end&lt;br /&gt;
	return Values&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.formatStatementsTable = formatStatements&lt;br /&gt;
&lt;br /&gt;
function p._compareStatements(args)&lt;br /&gt;
	if not args.value then&lt;br /&gt;
		error(lib.formatError(&amp;#039;param-not-provided&amp;#039;, &amp;#039;value&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	local statements = p.getStatements(args)&lt;br /&gt;
	local compare = require &amp;#039;Modul:Wikidata/compare&amp;#039;&lt;br /&gt;
	return compare.compareValues(args.value, statements, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wp&gt;Matěj Suchánek</name></author>
	</entry>
</feed>