<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://www.gyimesilaszlo.hu/kotta/index.php?action=history&amp;feed=atom&amp;title=Modul%3AWikidata</id>
	<title>Modul:Wikidata - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://www.gyimesilaszlo.hu/kotta/index.php?action=history&amp;feed=atom&amp;title=Modul%3AWikidata"/>
	<link rel="alternate" type="text/html" href="https://www.gyimesilaszlo.hu/kotta/index.php?title=Modul:Wikidata&amp;action=history"/>
	<updated>2026-05-11T08:07:56Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://www.gyimesilaszlo.hu/kotta/index.php?title=Modul:Wikidata&amp;diff=886&amp;oldid=prev</id>
		<title>Kotta: Új oldal, tartalma: „require&quot;Modul:No globals&quot;  local p = {}  local getArgs = require&quot;Modul:Arguments&quot;.getArgs local frame = mw.getCurrentFrame()  local i18n = {     [&quot;errors&quot;] = {…”</title>
		<link rel="alternate" type="text/html" href="https://www.gyimesilaszlo.hu/kotta/index.php?title=Modul:Wikidata&amp;diff=886&amp;oldid=prev"/>
		<updated>2019-02-09T22:10:57Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „require&amp;quot;Modul:No globals&amp;quot;  local p = {}  local getArgs = require&amp;quot;Modul:Arguments&amp;quot;.getArgs local frame = mw.getCurrentFrame()  local i18n = {     [&amp;quot;errors&amp;quot;] = {…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require&amp;quot;Modul:No globals&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require&amp;quot;Modul:Arguments&amp;quot;.getArgs&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
    [&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;Hiányzó &amp;#039;&amp;#039;property=&amp;#039;&amp;#039; paraméter&amp;quot;,&lt;br /&gt;
        [&amp;quot;entity-not-found&amp;quot;] = &amp;quot;Nem létező Wikidata-elem&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;Ismeretlen az állítás típusa&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-snak-type&amp;quot;] = &amp;quot;Ismeretlen a snak típusa&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;Ismeretlen az érték típusa&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;Ismeretlen a Wikidata-elem típusa&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-value-module&amp;quot;] = &amp;quot;A &amp;#039;&amp;#039;value-module&amp;#039;&amp;#039; és &amp;#039;&amp;#039;value-function&amp;#039;&amp;#039; paramétert egyszerre kell beállítani&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-module-not-found&amp;quot;] = &amp;quot;A &amp;#039;&amp;#039;value-module&amp;#039;&amp;#039; nem létező modulra mutat&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-function-not-found&amp;quot;] = &amp;quot;A &amp;#039;&amp;#039;value-function&amp;#039;&amp;#039; nem létező funkcióra mutat&amp;quot;,&lt;br /&gt;
        [&amp;quot;globecoordinate-direction&amp;quot;] = &amp;quot;Az érték típusa &amp;#039;&amp;#039;globecoordinate&amp;#039;&amp;#039; : kell &amp;#039;&amp;#039;direction=latitude&amp;#039;&amp;#039; vagy &amp;#039;&amp;#039;longitude&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
        [&amp;quot;invalid-value&amp;quot;] = &amp;quot;Érvénytelen érték&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-unit&amp;quot;] = &amp;quot;Ismeretlen mértékegység&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;somevalue&amp;quot;] = &amp;quot;&amp;#039;&amp;#039;nem ismert&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
    [&amp;quot;novalue&amp;quot;] = &amp;quot;&amp;#039;&amp;#039;nincs&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function formatError(key)&lt;br /&gt;
	error(i18n.errors[key], 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getUpperLevelOfType(property, typeId, item)&lt;br /&gt;
	local result, statements, visited = {}, {}, {[item.id] = true}&lt;br /&gt;
	local function getStatements(item)&lt;br /&gt;
		if not item or not item.claims[property] then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		for _, s in ipairs(item:getBestStatements(property)) do&lt;br /&gt;
			if s.mainsnak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
				local itemId = &amp;quot;Q&amp;quot; .. s.mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;]&lt;br /&gt;
				if not visited[itemId] then&lt;br /&gt;
					visited[itemId] = true&lt;br /&gt;
					local item = mw.wikibase.getEntity(itemId)&lt;br /&gt;
					if p.containsPropertyWithValue(item, &amp;quot;P31&amp;quot;, typeId) then&lt;br /&gt;
						statements[item.id] = s&lt;br /&gt;
					else&lt;br /&gt;
						getStatements(item)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	getStatements(item)&lt;br /&gt;
	for _, s in pairs(statements) do&lt;br /&gt;
		table.insert(result, s)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function firstValue(statements)&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		if statement.rank == &amp;#039;preferred&amp;#039; then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		if statement.rank == &amp;#039;normal&amp;#039; then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withRank(statements, ranks)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for _i, statement in ipairs(statements) do&lt;br /&gt;
		for _j, rank in ipairs(ranks) do&lt;br /&gt;
			if statement.rank == rank then&lt;br /&gt;
				table.insert(result, statement)&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.withHighestRank(statements)&lt;br /&gt;
	local preferred, normal = {}, {}&lt;br /&gt;
	for _, statement in ipairs(statements) do&lt;br /&gt;
		if statement.rank == &amp;quot;preferred&amp;quot; then&lt;br /&gt;
			table.insert(preferred, statement)&lt;br /&gt;
		elseif statement.rank == &amp;quot;normal&amp;quot; then&lt;br /&gt;
			table.insert(normal, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return #preferred &amp;gt; 0 and preferred or normal&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function atDate(statements, date)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local Time = require&amp;quot;Modul:Time&amp;quot;&lt;br /&gt;
	local time = Time.newFromIso8601(date, true)&lt;br /&gt;
	if not time then&lt;br /&gt;
		return statements&lt;br /&gt;
	end&lt;br /&gt;
	for _, s in ipairs(statements) do&lt;br /&gt;
		local startDate, endDate&lt;br /&gt;
		if s.qualifiers and s.qualifiers.P580 and #s.qualifiers.P580 == 1 and s.qualifiers.P580[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
			startDate = Time.newFromWikidataValue(s.qualifiers.P580[1].datavalue.value)&lt;br /&gt;
		end&lt;br /&gt;
		if s.qualifiers and s.qualifiers.P582 and #s.qualifiers.P582 == 1 and s.qualifiers.P582[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
			endDate = Time.newFromWikidataValue(s.qualifiers.P582[1].datavalue.value)&lt;br /&gt;
		end&lt;br /&gt;
		if not startDate and endDate and time &amp;lt;= endDate or&lt;br /&gt;
			startDate and not endDate and startDate &amp;lt;= time or&lt;br /&gt;
			startDate and endDate and startDate &amp;lt;= time and time &amp;lt;= endDate then&lt;br /&gt;
			table.insert(result, s)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityFromId(id)&lt;br /&gt;
    if id and id ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        return mw.wikibase.getEntity(id)&lt;br /&gt;
    end&lt;br /&gt;
    return mw.wikibase.getEntity()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityIdFromValue(value)&lt;br /&gt;
    local prefix&lt;br /&gt;
    if value[&amp;#039;entity-type&amp;#039;] == &amp;#039;item&amp;#039; then&lt;br /&gt;
        prefix = &amp;#039;Q&amp;#039;&lt;br /&gt;
    elseif value[&amp;#039;entity-type&amp;#039;] == &amp;#039;property&amp;#039; then&lt;br /&gt;
        prefix = &amp;#039;P&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        formatError&amp;quot;unknown-entity-type&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return prefix .. value[&amp;#039;numeric-id&amp;#039;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function populationWithPointInTime(statement, options)&lt;br /&gt;
	local population = tonumber(statement.mainsnak.datavalue.value.amount)&lt;br /&gt;
	local text = (population &amp;lt; 10000 and tostring(population) or mw.getContentLanguage():formatNum(population)) .. &amp;#039; fő&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if statement.qualifiers and statement.qualifiers.P585 then  -- dátum&lt;br /&gt;
		local time, fDate = require&amp;#039;Modul:Time&amp;#039;.newFromWikidataValue(statement.qualifiers.P585[1].datavalue.value)&lt;br /&gt;
		if time.precision &amp;gt;= 11 then&lt;br /&gt;
			fDate = mw.getContentLanguage():formatDate(&amp;#039;Y. M. j.&amp;#039;, time:toIso8601())&lt;br /&gt;
		else&lt;br /&gt;
			fDate = tostring(time.year)&lt;br /&gt;
		end&lt;br /&gt;
		text = text .. &amp;#039; &amp;#039; .. mw.text.tag(&amp;#039;span&amp;#039;, {style = &amp;#039;font-size:90%; white-space:nowrap;&amp;#039;}, &amp;#039;(&amp;#039; .. fDate .. &amp;#039;)&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatEntityId(entityId, options)&lt;br /&gt;
	local link = mw.wikibase.sitelink(entityId)&lt;br /&gt;
	if options.link == &amp;#039;csak&amp;#039; then&lt;br /&gt;
		return link&lt;br /&gt;
	end&lt;br /&gt;
	if link and options.link ~= &amp;#039;nem&amp;#039; and mw.ustring.sub(link, 1, 10) == &amp;#039;Kategória:&amp;#039; then&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. link .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local label = mw.wikibase.label(entityId)&lt;br /&gt;
	if options.labelProperty then&lt;br /&gt;
		local options2 = {}&lt;br /&gt;
		for k, v in pairs(options) do&lt;br /&gt;
			if k ~= &amp;quot;labelProperty&amp;quot; then&lt;br /&gt;
				options2[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		options2.property = options.labelProperty&lt;br /&gt;
		options2.entityId = entityId&lt;br /&gt;
		options2.rank = &amp;quot;valid&amp;quot;&lt;br /&gt;
		options2.link = &amp;quot;nem&amp;quot;&lt;br /&gt;
		options2.lang = options.lang or &amp;quot;hu&amp;quot;&lt;br /&gt;
		options2.firstAfter = true&lt;br /&gt;
		local label2 = p.formatStatements(frame, options2)&lt;br /&gt;
		if label2 and label2 ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			label = label2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.chrProperty and options.chrDate then&lt;br /&gt;
		local time&lt;br /&gt;
		if options.chrDate:match&amp;quot;^P%d+$&amp;quot; then&lt;br /&gt;
			local dates = mw.wikibase.getEntity(options.entityId):getBestStatements(options.chrDate)&lt;br /&gt;
			if #dates == 1 and dates[1].mainsnak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
				time = dates[1].mainsnak.datavalue.value.time&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			time = options.chrDate&lt;br /&gt;
		end&lt;br /&gt;
		if time then&lt;br /&gt;
			local chrLabel = p.formatStatements(frame, {&lt;br /&gt;
				property = options.chrProperty,&lt;br /&gt;
				entityId = entityId,&lt;br /&gt;
				atDate = time,&lt;br /&gt;
				rank = &amp;quot;valid&amp;quot;,&lt;br /&gt;
				lang = options.lang or &amp;quot;hu&amp;quot;,&lt;br /&gt;
				firstAfter = true&lt;br /&gt;
			})&lt;br /&gt;
			if chrLabel and chrLabel ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				label = chrLabel&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if label and options.format == &amp;quot;ucfirst&amp;quot; then&lt;br /&gt;
		label = mw.language.getContentLanguage():ucfirst(label)&lt;br /&gt;
	end&lt;br /&gt;
	if link and options.link ~= &amp;#039;nem&amp;#039; then&lt;br /&gt;
		if label then&lt;br /&gt;
			if mw.ustring.sub(label, 2) == mw.ustring.sub(link, 2) and &lt;br /&gt;
				mw.ustring.lower(mw.ustring.sub(label, 1, 1)) == mw.ustring.lower(mw.ustring.sub(link, 1, 1)) then&lt;br /&gt;
				return &amp;#039;[[&amp;#039; .. label .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. label .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. link .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return label or link  --TODO what if no links and label + fallback language?&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatTimeValue(value, options)&lt;br /&gt;
    if options.format == &amp;quot;raw&amp;quot; then&lt;br /&gt;
        return value.time&lt;br /&gt;
    else&lt;br /&gt;
        local time = require&amp;quot;Modul:Time&amp;quot;.newFromWikidataValue(value)&lt;br /&gt;
        if time then&lt;br /&gt;
			if options.format == &amp;quot;iso&amp;quot; then&lt;br /&gt;
				return tostring(time)&lt;br /&gt;
			end&lt;br /&gt;
            return time:formatDate(options)&lt;br /&gt;
        else&lt;br /&gt;
            formatError&amp;quot;invalid-value&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function countryOf(itemId)&lt;br /&gt;
	if not itemId then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local item = mw.wikibase.getEntity(itemId)&lt;br /&gt;
	if not item then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.formatStatements(frame, {property = &amp;quot;P17&amp;quot;}, item)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatNum(amount)&lt;br /&gt;
	if amount &amp;lt; 10000 and -10000 &amp;lt; amount then&lt;br /&gt;
		return tostring(amount):gsub(&amp;#039;%.&amp;#039;, &amp;#039;,&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.getContentLanguage():formatNum(amount)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDatavalue(datavalue, options)&lt;br /&gt;
    --Use the customize handler if provided&lt;br /&gt;
    if options[&amp;#039;value-module&amp;#039;] or options[&amp;#039;value-function&amp;#039;] then&lt;br /&gt;
        if not options[&amp;#039;value-module&amp;#039;] or not options[&amp;#039;value-function&amp;#039;] then&lt;br /&gt;
            return formatError( &amp;#039;unknown-value-module&amp;#039; )&lt;br /&gt;
        end&lt;br /&gt;
        local formatter = require (&amp;#039;Module:&amp;#039; .. options[&amp;#039;value-module&amp;#039;])&lt;br /&gt;
        if formatter == nil then&lt;br /&gt;
            return formatError( &amp;#039;value-module-not-found&amp;#039; )&lt;br /&gt;
        end&lt;br /&gt;
        local fun = formatter[options[&amp;#039;value-function&amp;#039;]]&lt;br /&gt;
        if fun == nil then&lt;br /&gt;
            return formatError( &amp;#039;value-function-not-found&amp;#039; )&lt;br /&gt;
        end&lt;br /&gt;
        return fun( datavalue.value, options )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    --Default formatters&lt;br /&gt;
    if datavalue.type == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
		local itemId = getEntityIdFromValue(datavalue.value)&lt;br /&gt;
		if options.format == &amp;#039;raw&amp;#039; then&lt;br /&gt;
			return itemId&lt;br /&gt;
		end&lt;br /&gt;
		local result = formatEntityId(itemId, options)&lt;br /&gt;
		if not result then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local country = options.format == &amp;quot;with_country&amp;quot; and countryOf(itemId, options)&lt;br /&gt;
        return result .. (country and &amp;quot;, &amp;quot; .. country or &amp;quot;&amp;quot;)&lt;br /&gt;
    elseif datavalue.type == &amp;#039;string&amp;#039; then&lt;br /&gt;
        return datavalue.value --TODO ids + media&lt;br /&gt;
    elseif datavalue.type == &amp;#039;time&amp;#039; then&lt;br /&gt;
        return formatTimeValue(datavalue.value, options)&lt;br /&gt;
    elseif datavalue.type == &amp;#039;globecoordinate&amp;#039; then&lt;br /&gt;
        if options.direction == &amp;#039;latitude&amp;#039; then&lt;br /&gt;
            return datavalue.value.latitude&lt;br /&gt;
        elseif options.direction == &amp;#039;longitude&amp;#039; then&lt;br /&gt;
            return datavalue.value.longitude&lt;br /&gt;
        else&lt;br /&gt;
            return formatError(&amp;#039;globecoordinate-direction&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    elseif datavalue.type == &amp;#039;quantity&amp;#039; then&lt;br /&gt;
		if options.format == &amp;#039;raw&amp;#039; then&lt;br /&gt;
			return datavalue.value.amount&lt;br /&gt;
		end&lt;br /&gt;
		local result&lt;br /&gt;
		local amount = tonumber(datavalue.value.amount)&lt;br /&gt;
		if datavalue.value.unit == &amp;quot;1&amp;quot; then&lt;br /&gt;
			if options.unit then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
			result = formatNum(amount)&lt;br /&gt;
		else&lt;br /&gt;
			local unitId = datavalue.value.unit:match&amp;quot;Q%d+&amp;quot;&lt;br /&gt;
			local sourceUnit = mw.loadData&amp;quot;Modul:Wikidata/units&amp;quot;.wikidata_item_ids[unitId]&lt;br /&gt;
			if not sourceUnit then&lt;br /&gt;
				if not options.unit then&lt;br /&gt;
					local unitItem = mw.wikibase.getEntity(unitId)&lt;br /&gt;
					if p.isOfType(unitItem, &amp;quot;Q8142&amp;quot;) then  -- currency&lt;br /&gt;
						result = formatNum(amount) .. &amp;quot; &amp;quot; .. p.formatStatement(unitItem:getBestStatements&amp;quot;P558&amp;quot;[1])&lt;br /&gt;
					else&lt;br /&gt;
						result = formatNum(amount) .. &amp;quot; &amp;quot; .. unitItem:getLabel()&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					formatError&amp;quot;unknown-unit&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				local targetUnit = options.unit or sourceUnit&lt;br /&gt;
				result = frame:expandTemplate{title = &amp;quot;Convert&amp;quot;, args = {amount, sourceUnit, targetUnit, disp = options.showUnit and &lt;br /&gt;
					&amp;quot;out&amp;quot; or &amp;quot;number&amp;quot;&lt;br /&gt;
				}}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return result&lt;br /&gt;
	elseif datavalue.type == &amp;quot;monolingualtext&amp;quot; then&lt;br /&gt;
		if not options.lang or options.lang == &amp;quot;~hu&amp;quot; and datavalue.value.language ~= &amp;quot;hu&amp;quot; then&lt;br /&gt;
			return datavalue.value.text&lt;br /&gt;
		end&lt;br /&gt;
		for lang in mw.text.gsplit(options.lang, &amp;quot;,&amp;quot;) do&lt;br /&gt;
			if lang:match&amp;quot;^%s*(.-)%s*$&amp;quot; == datavalue.value.language then&lt;br /&gt;
				return datavalue.value.text&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		formatError&amp;quot;unknown-datavalue-type&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatSnak(snak, options)&lt;br /&gt;
	local options = options or {}&lt;br /&gt;
	if snak.snaktype == &amp;quot;somevalue&amp;quot; then&lt;br /&gt;
		return options.somevalue or i18n[&amp;quot;somevalue&amp;quot;]&lt;br /&gt;
	elseif snak.snaktype == &amp;quot;novalue&amp;quot; then&lt;br /&gt;
		return i18n[&amp;quot;novalue&amp;quot;]&lt;br /&gt;
	elseif snak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
		if options[&amp;quot;value-module&amp;quot;] or options[&amp;quot;value-function&amp;quot;] then&lt;br /&gt;
			return formatDatavalue(snak.datavalue, options)&lt;br /&gt;
		end&lt;br /&gt;
		if snak.datatype == &amp;quot;math&amp;quot; then&lt;br /&gt;
			return frame:extensionTag(&amp;quot;math&amp;quot;, snak.datavalue.value)&lt;br /&gt;
		end&lt;br /&gt;
		if snak.datatype == &amp;quot;external-id&amp;quot; then&lt;br /&gt;
			-- TODO Format with datavalue-uri when available&lt;br /&gt;
			return formatDatavalue(snak.datavalue, options)&lt;br /&gt;
		end&lt;br /&gt;
		return formatDatavalue(snak.datavalue, options)&lt;br /&gt;
	else&lt;br /&gt;
		formatError&amp;quot;unknown-snak-type&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatSnaks(snaks, options)&lt;br /&gt;
	local formattedSnaks = {}&lt;br /&gt;
	for _, snak in ipairs(snaks) do&lt;br /&gt;
		table.insert(formattedSnaks, formatSnak(snak, options))&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.listToText(formattedSnaks, options.separator, options.conjunction)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatReference(reference, options)&lt;br /&gt;
	if reference.snaks.P854 and (reference.snaks.P357 or reference.snaks.P1476) then  -- url and title&lt;br /&gt;
		local args, Time = {}&lt;br /&gt;
		if reference.snaks.P577 or reference.snaks.P813 then&lt;br /&gt;
			Time = require&amp;#039;Modul:Time&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		args.url = reference.snaks[&amp;#039;P854&amp;#039;] and formatSnak(reference.snaks[&amp;#039;P854&amp;#039;][1], options)&lt;br /&gt;
		args.title = reference.snaks[&amp;#039;P357&amp;#039;] and formatSnak(reference.snaks[&amp;#039;P357&amp;#039;][1], options)&lt;br /&gt;
		args.author = reference.snaks[&amp;#039;P50&amp;#039;] and formatSnak(reference.snaks[&amp;#039;P50&amp;#039;][1], options)&lt;br /&gt;
		if reference.snaks.P577 then&lt;br /&gt;
			local time = Time.newFromWikidataValue(reference.snaks.P577[1].datavalue.value)&lt;br /&gt;
			if time.precision &amp;gt;= 11 then&lt;br /&gt;
				args.date = time:toIso8601()&lt;br /&gt;
			else&lt;br /&gt;
				args.year = tostring(time.year)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		args.publisher = reference.snaks[&amp;#039;P123&amp;#039;] and formatSnak(reference.snaks[&amp;#039;P123&amp;#039;][1], options)&lt;br /&gt;
		args.language = reference.snaks[&amp;#039;P364&amp;#039;] and formatSnaks(reference.snaks[&amp;#039;P364&amp;#039;], {link = &amp;#039;nem&amp;#039;})&lt;br /&gt;
		args.accessdate = reference.snaks[&amp;#039;P813&amp;#039;] and Time.newFromWikidataValue(reference.snaks.P813[1].datavalue.value):toIso8601()&lt;br /&gt;
&lt;br /&gt;
		if args.url and args.url:sub(1, 17) == &amp;#039;http://www.ksh.hu&amp;#039; then&lt;br /&gt;
			args.url = args.url:gsub(&amp;#039;p_lang=EN&amp;#039;, &amp;#039;p_lang=HU&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args.title and reference.snaks.P1476 then&lt;br /&gt;
			for _, snak in ipairs(reference.snaks.P1476) do&lt;br /&gt;
				if not args.title or (snak.datavalue and snak.datavalue.value.language == &amp;#039;hu&amp;#039;) then&lt;br /&gt;
					args.title = snak.datavalue.value.text&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return frame:expandTemplate{title = &amp;#039;Cite web&amp;#039;, args = args}&lt;br /&gt;
	else&lt;br /&gt;
		local result = {}&lt;br /&gt;
		for key, referenceSnaks in pairs(reference.snaks) do&lt;br /&gt;
			if key ~= &amp;#039;P143&amp;#039; then  -- imported from&lt;br /&gt;
				for _, snak in ipairs(referenceSnaks) do&lt;br /&gt;
					table.insert(result, formatSnak(snak, snak.datavalue and snak.datavalue.type == &amp;#039;time&amp;#039; and {link = &amp;#039;nem&amp;#039;} or options))&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return table.concat(result, &amp;#039;, &amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatements(options, item)&lt;br /&gt;
	if not options.property then&lt;br /&gt;
		formatError&amp;quot;property-param-not-provided&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local property = options.property:upper()&lt;br /&gt;
	--Get entity&lt;br /&gt;
	local entity = item&lt;br /&gt;
	if not entity then&lt;br /&gt;
		entity = getEntityFromId(options.entityId)&lt;br /&gt;
	end&lt;br /&gt;
    if not entity then&lt;br /&gt;
        return &amp;#039;&amp;#039;  --TODO error?&lt;br /&gt;
    end&lt;br /&gt;
    if not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return &amp;#039;&amp;#039;  --TODO error?&lt;br /&gt;
    end&lt;br /&gt;
	local statements = entity.claims[property]&lt;br /&gt;
&lt;br /&gt;
	-- TODO Extract selection and filtering&lt;br /&gt;
	if options.rank ~= &amp;#039;all&amp;#039; then&lt;br /&gt;
		if not options.rank then&lt;br /&gt;
			statements = p.withHighestRank(statements)&lt;br /&gt;
		elseif options.rank == &amp;#039;valid&amp;#039; then&lt;br /&gt;
			statements = withRank(statements, {&amp;#039;normal&amp;#039;, &amp;#039;preferred&amp;#039;})&lt;br /&gt;
		else&lt;br /&gt;
			statements = withRank(statements, {options.rank})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.typeId then&lt;br /&gt;
		statements = getUpperLevelOfType(property, options.typeId, entity)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.atDate then&lt;br /&gt;
		statements = atDate(statements, options.atDate)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.excludespecial then&lt;br /&gt;
		local newStatements = {}&lt;br /&gt;
		for _, s in ipairs(statements) do&lt;br /&gt;
			if s.mainsnak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
				table.insert(newStatements, s)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		statements = newStatements&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.first then&lt;br /&gt;
		statements = firstValue(statements)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- TODO Extract sorting&lt;br /&gt;
	if options.sort then&lt;br /&gt;
		local comp = options.sort&lt;br /&gt;
		if comp == &amp;quot;&amp;quot; then&lt;br /&gt;
			comp = function (s1, s2)&lt;br /&gt;
				if s1.mainsnak.snaktype ~= &amp;quot;value&amp;quot; or s2.mainsnak.snaktype ~= &amp;quot;value&amp;quot; then&lt;br /&gt;
					return nil&lt;br /&gt;
				end&lt;br /&gt;
				local sortKey&lt;br /&gt;
				local type = s1.mainsnak.datavalue.type&lt;br /&gt;
				if type == &amp;quot;wikibase-entityid&amp;quot; then&lt;br /&gt;
					sortKey = function(statement)&lt;br /&gt;
						local id = &amp;quot;Q&amp;quot; .. statement.mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;]&lt;br /&gt;
						local key = mw.wikibase.label(id)&lt;br /&gt;
						if not key then&lt;br /&gt;
							key = mw.wikibase.sitelink(id)&lt;br /&gt;
						end&lt;br /&gt;
						if not key then&lt;br /&gt;
							return id&lt;br /&gt;
						end&lt;br /&gt;
						return mw.language.getContentLanguage():caseFold(key)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				return sortKey(s1) &amp;lt; sortKey(s2)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(statements, comp)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    --Format statement and concat them cleanly&lt;br /&gt;
    local formattedStatements = {}&lt;br /&gt;
    for _, statement in ipairs(statements) do&lt;br /&gt;
        local fs&lt;br /&gt;
        if property == &amp;#039;P1082&amp;#039; and options.format == &amp;#039;default&amp;#039; then  -- population&lt;br /&gt;
			fs = populationWithPointInTime(statement, options)&lt;br /&gt;
			if statement.references then&lt;br /&gt;
				for _, reference in ipairs(statement.references) do&lt;br /&gt;
					local formattedReference = formatReference(reference, options)&lt;br /&gt;
					if formattedReference and formattedReference ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						fs = fs .. frame:extensionTag(&amp;#039;ref&amp;#039;, formattedReference, {name = reference.hash})&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
        else&lt;br /&gt;
            fs = p.formatStatement(statement, options)&lt;br /&gt;
        end&lt;br /&gt;
        if fs then&lt;br /&gt;
            if options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;lista&amp;#039; then&lt;br /&gt;
                fs = &amp;#039;* &amp;#039; .. fs&lt;br /&gt;
            elseif options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;számozott lista&amp;#039; then&lt;br /&gt;
                fs = &amp;#039;# &amp;#039; .. fs&lt;br /&gt;
            end&lt;br /&gt;
            table.insert(formattedStatements, fs)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local function plainlist(items)&lt;br /&gt;
		if #items == 0 then&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if #items == 1 then&lt;br /&gt;
			return items[1]&lt;br /&gt;
		end&lt;br /&gt;
		return frame:expandTemplate{ title = &amp;quot;Plainlist&amp;quot;, args = { &amp;quot;\n* &amp;quot; .. table.concat(items, &amp;quot;\n* &amp;quot;) } }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;lista&amp;#039; or options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;számozott lista&amp;#039; then&lt;br /&gt;
        return table.concat(formattedStatements, &amp;#039;\n&amp;#039;)&lt;br /&gt;
    elseif options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;sorok&amp;#039; then&lt;br /&gt;
		return plainlist(formattedStatements)&lt;br /&gt;
    elseif options[&amp;#039;felsorolás&amp;#039;] == &amp;#039;szöveg&amp;#039; then&lt;br /&gt;
        return mw.text.listToText(formattedStatements)&lt;br /&gt;
    elseif options.separator or options.conjunction then&lt;br /&gt;
        options.separator = options.separator and string.gsub(options.separator, &amp;#039;&amp;amp;#32;&amp;#039;, &amp;#039; &amp;#039;)&lt;br /&gt;
        options.conjunction = options.conjunction and string.gsub(options.conjunction, &amp;#039;&amp;amp;#32;&amp;#039;, &amp;#039; &amp;#039;)&lt;br /&gt;
        return mw.text.listToText(formattedStatements, options.separator, options.conjunction)&lt;br /&gt;
    else&lt;br /&gt;
		if options.firstAfter then&lt;br /&gt;
			return formattedStatements[1] or &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return plainlist(formattedStatements)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatQualifiers(statement, options)&lt;br /&gt;
	local result, startDate, endDate = {}&lt;br /&gt;
	for key, snaks in pairs(statement.qualifiers) do&lt;br /&gt;
		if key == &amp;#039;P580&amp;#039; then&lt;br /&gt;
			startDate = formatSnak(snaks[1], {link = &amp;#039;nem&amp;#039;})&lt;br /&gt;
		elseif key == &amp;#039;P582&amp;#039; then&lt;br /&gt;
			endDate = formatSnak(snaks[1], {link = &amp;#039;nem&amp;#039;})&lt;br /&gt;
		else&lt;br /&gt;
			for _, snak in ipairs(snaks) do&lt;br /&gt;
				table.insert(result, formatSnak(snak, {link = &amp;#039;nem&amp;#039;}))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if startDate and startDate ~= &amp;#039;&amp;#039; or endDate and endDate ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		table.insert(result, 1, (startDate or &amp;#039;&amp;#039;) .. &amp;#039;–&amp;#039; .. (endDate or &amp;#039;&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(result, &amp;#039;, &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatement(statement, options)&lt;br /&gt;
	if not statement.type or statement.type ~= &amp;#039;statement&amp;#039; then&lt;br /&gt;
		formatError(&amp;#039;unknown-claim-type&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local options = options or {}&lt;br /&gt;
	local result&lt;br /&gt;
	if statement.mainsnak.snaktype == &amp;quot;somevalue&amp;quot; and statement.mainsnak.datatype == &amp;quot;time&amp;quot; and statement.qualifiers and &lt;br /&gt;
		(statement.qualifiers.P1319 or statement.qualifiers.P1326) then&lt;br /&gt;
		-- TODO Extract method&lt;br /&gt;
		if statement.qualifiers.P1319 then&lt;br /&gt;
			if statement.qualifiers.P1326 then&lt;br /&gt;
				result = formatSnak(statement.qualifiers.P1319[1]) .. &amp;quot; és &amp;quot; .. formatSnak(statement.qualifiers.P1326[1]) .. &amp;quot; között&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				result = formatSnak(statement.qualifiers.P1319[1]) .. &amp;quot; után&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			result = formatSnak(statement.qualifiers.P1326[1]) .. &amp;quot; előtt&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		result = formatSnak(statement.mainsnak, options)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--TODO reference and qualifiers&lt;br /&gt;
	if result and result ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		if options.showQualifiers and statement.qualifiers then&lt;br /&gt;
			local formattedQualifiers = formatQualifiers(statement, options)&lt;br /&gt;
			if formattedQualifiers and formattedQualifiers ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				result = result .. &amp;#039; &amp;lt;small&amp;gt;(&amp;#039; .. formattedQualifiers .. &amp;#039;)&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.showReferences and statement.references then&lt;br /&gt;
			for _, reference in ipairs(statement.references) do&lt;br /&gt;
				local formattedReference = formatReference(reference, options)&lt;br /&gt;
				if formattedReference and formattedReference ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					result = result .. frame:extensionTag(&amp;#039;ref&amp;#039;, formattedReference, {name = reference.hash})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements(frame, args, item)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame, { removeBlanks = false })&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--If a value if already set, use it&lt;br /&gt;
	if args.value and args.value ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return args.value ~= &amp;#039;-&amp;#039; and args.value or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return formatStatements(args, item)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns string true if connected Wikibase item contains property specified &lt;br /&gt;
	by property argument, empty string otherwise.&lt;br /&gt;
	Used by template Wikidata-f in conditional expressions.&lt;br /&gt;
--]]&lt;br /&gt;
function p.containsProperty(frame, args, item)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame, {frameOnly = true, readOnly = true})&lt;br /&gt;
	end&lt;br /&gt;
	if args.value == &amp;#039;-&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if args.value then&lt;br /&gt;
		return &amp;#039;true&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if not args.property then&lt;br /&gt;
		formatError(&amp;#039;property-param-not-provided&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local entity = item or mw.wikibase.getEntity()&lt;br /&gt;
	if not entity or not entity.claims or not entity.claims[args.property:upper()] then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;true&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.containsPropertyWithValue(item, property, value)&lt;br /&gt;
	if not property or not value then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if not item or not item.claims or not item.claims[property:upper()] then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	for _, statement in ipairs(item.claims[property:upper()]) do&lt;br /&gt;
		if statement.rank ~= &amp;quot;deprecated&amp;quot; and statement.mainsnak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
			local type = statement.mainsnak.datavalue.type&lt;br /&gt;
			if type == &amp;quot;wikibase-entityid&amp;quot; then&lt;br /&gt;
				if &amp;quot;Q&amp;quot; .. statement.mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;] == value then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isOfType(item, class)&lt;br /&gt;
	if not item or not item.claims or not item.claims.P31 or not class then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local isSubclass, visited&lt;br /&gt;
&lt;br /&gt;
	local function checkProperty(item, property)&lt;br /&gt;
		for _, s in ipairs(item:getBestStatements(property)) do&lt;br /&gt;
			if s.mainsnak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
				local itemId = &amp;quot;Q&amp;quot; .. s.mainsnak.datavalue.value[&amp;quot;numeric-id&amp;quot;]&lt;br /&gt;
				if itemId == class or isSubclass(itemId) then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	isSubclass = function (itemId)&lt;br /&gt;
		if visited[itemId] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		local item = mw.wikibase.getEntity(itemId)&lt;br /&gt;
		if not item then  -- deleted item&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		visited[itemId] = true&lt;br /&gt;
		visited[item.id] = true&lt;br /&gt;
		return checkProperty(item, &amp;quot;P279&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	visited =  { [item.id] = true }&lt;br /&gt;
	return checkProperty(item, &amp;quot;P31&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Kotta</name></author>
	</entry>
</feed>