<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AQualifiers_table</id>
	<title>وحدة:Qualifiers table - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AQualifiers_table"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Qualifiers_table&amp;action=history"/>
	<updated>2026-06-05T14:17:13Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Qualifiers_table&amp;diff=1477&amp;oldid=prev</id>
		<title>عبد العزيز في 14:48، 21 فبراير 2018</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Qualifiers_table&amp;diff=1477&amp;oldid=prev"/>
		<updated>2018-02-21T14:48:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local wikidata = require &amp;#039;Module:Wikidata/fr&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function sortTypeFromWikibaseType(type)&lt;br /&gt;
	local map = {&lt;br /&gt;
		[&amp;#039;quantity&amp;#039;] = &amp;#039;number&amp;#039;,&lt;br /&gt;
		[&amp;#039;time&amp;#039;] = &amp;#039;date&amp;#039;, --TODO: check?&lt;br /&gt;
		[&amp;#039;url&amp;#039;] = &amp;#039;url&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if map[type] ~= nil then&lt;br /&gt;
		return map[type]&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function propertyLabel(property, options)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	while options[property] ~= nil and i &amp;lt; 10 do&lt;br /&gt;
		property = options[property]&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	if property:match(&amp;#039;^Q%d+:P%d+$&amp;#039;) then&lt;br /&gt;
		local parts = mw.text.split(property, &amp;#039;:&amp;#039;, true)&lt;br /&gt;
		return propertyLabel(parts[1], options) .. &amp;#039; | &amp;#039; .. propertyLabel(parts[2], options)&lt;br /&gt;
	elseif property:match(&amp;#039;^[QP]%d+$&amp;#039;) then&lt;br /&gt;
		return mw.wikibase.label(property)&lt;br /&gt;
	else&lt;br /&gt;
		return property&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function claimsToArray(claims_for_entity, options)&lt;br /&gt;
	local headers = {}&lt;br /&gt;
	local types = {}&lt;br /&gt;
	local row_per_main_snak = {}&lt;br /&gt;
&lt;br /&gt;
	--Parse options in order to create columns&lt;br /&gt;
	local newCol = 1&lt;br /&gt;
	for i, property in pairs(options) do&lt;br /&gt;
		if type(i) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			property = propertyLabel(property, options)&lt;br /&gt;
			headers[property] = newCol&lt;br /&gt;
			newCol = newCol + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--Converts claims&lt;br /&gt;
	for entity,claims in pairs(claims_for_entity) do&lt;br /&gt;
		for _, claim in pairs(claims) do&lt;br /&gt;
			property = propertyLabel(&amp;#039;main:&amp;#039; .. claim.mainsnak.property, options)&lt;br /&gt;
			if property == &amp;#039;main:&amp;#039; .. claim.mainsnak.property then&lt;br /&gt;
				property = propertyLabel(claim.mainsnak.property, options)&lt;br /&gt;
			end&lt;br /&gt;
			main_snak = wikidata.formatSnak(claim.mainsnak, {})&lt;br /&gt;
			if row_per_main_snak[main_snak] == nil then&lt;br /&gt;
				row_per_main_snak[main_snak] = {}&lt;br /&gt;
			end&lt;br /&gt;
			if headers[property] ~= nil then&lt;br /&gt;
				types[property] = sortTypeFromWikibaseType(claim.mainsnak.datatype)&lt;br /&gt;
				row_per_main_snak[main_snak][headers[property]] = main_snak&lt;br /&gt;
			end&lt;br /&gt;
	&lt;br /&gt;
			if claim.qualifiers ~= nil then&lt;br /&gt;
				for _, qs in pairs(claim.qualifiers) do&lt;br /&gt;
					for _, qualifier in pairs(qs) do&lt;br /&gt;
						--Hacky lookup to find the right property&lt;br /&gt;
						property = propertyLabel(entity .. &amp;#039;:&amp;#039; .. qualifier.property, options)&lt;br /&gt;
						if headers[property] == nil then&lt;br /&gt;
							property = propertyLabel(qualifier.property, options)&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						if headers[property] ~= nil then&lt;br /&gt;
							types[property] = sortTypeFromWikibaseType(qualifier.datatype)&lt;br /&gt;
							if row_per_main_snak[main_snak][headers[property]] ~= nil then&lt;br /&gt;
								row_per_main_snak[main_snak][headers[property]] = row_per_main_snak[main_snak][headers[property]] .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; .. wikidata.formatSnak(qualifier, {})&lt;br /&gt;
							else&lt;br /&gt;
								row_per_main_snak[main_snak][headers[property]] = wikidata.formatSnak(qualifier, {})&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--Builds final rows&lt;br /&gt;
	local rows = {{}}&lt;br /&gt;
	for property, i in pairs(headers) do&lt;br /&gt;
		rows[1][i] = property&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local i = 2&lt;br /&gt;
	for _,row in pairs(row_per_main_snak) do&lt;br /&gt;
		rows[i + 1] = row&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return rows, types&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatArray(rows, types)&lt;br /&gt;
	local str = &amp;#039;{| class=&amp;quot;wikitable sortable&amp;quot;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	--header&lt;br /&gt;
	local groups = &amp;#039;\n|-&amp;#039;&lt;br /&gt;
	local headers = &amp;#039;&amp;#039;&lt;br /&gt;
	local last_group = nil&lt;br /&gt;
	local last_group_count = 0&lt;br /&gt;
	local with_groups = false&lt;br /&gt;
	for i,label in pairs(rows[1]) do&lt;br /&gt;
		local parts = mw.text.split(label, &amp;#039;|&amp;#039;, true)&lt;br /&gt;
		local group = nil&lt;br /&gt;
		if #parts == 2 then&lt;br /&gt;
			group = mw.text.trim(parts[1])&lt;br /&gt;
			label = mw.text.trim(parts[2])&lt;br /&gt;
		end&lt;br /&gt;
		if group == last_group then&lt;br /&gt;
			last_group_count = last_group_count + 1&lt;br /&gt;
		else&lt;br /&gt;
			if last_group ~= nil then&lt;br /&gt;
				groups = groups .. &amp;#039;\n! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;&amp;#039; .. last_group_count .. &amp;#039;&amp;quot; |&amp;#039; .. last_group&lt;br /&gt;
				with_groups = true&lt;br /&gt;
			else&lt;br /&gt;
				groups = groups .. &amp;#039;\n| scope=&amp;quot;col&amp;quot; colspan=&amp;quot;&amp;#039; .. last_group_count .. &amp;#039;&amp;quot; |&amp;amp;nbsp;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			last_group = group&lt;br /&gt;
			last_group_count = 1&lt;br /&gt;
		end&lt;br /&gt;
		rows[1][i] = label&lt;br /&gt;
	end&lt;br /&gt;
	if last_group ~= nil then&lt;br /&gt;
		groups = groups .. &amp;#039;\n! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;&amp;#039; .. last_group_count .. &amp;#039;&amp;quot; |&amp;#039; .. last_group&lt;br /&gt;
		with_groups = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if with_groups then&lt;br /&gt;
		str = str .. groups&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i,row in pairs(rows) do&lt;br /&gt;
		str = str .. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		--real output&lt;br /&gt;
		for j,_ in pairs(rows[1]) do&lt;br /&gt;
			if row[j] == nil then&lt;br /&gt;
				str = str .. &amp;#039;\n|&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				if i == 1 then&lt;br /&gt;
					if types[property] ~= nil then&lt;br /&gt;
						str = str .. &amp;#039;\n! scope=&amp;quot;col&amp;quot;  data-sort-type=&amp;quot;&amp;#039; .. types[property] .. &amp;#039;&amp;quot; |&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						str = str .. &amp;#039;\n! scope=&amp;quot;col&amp;quot; |&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				elseif j == 1 then&lt;br /&gt;
					str = str .. &amp;#039;\n! scope=&amp;quot;row&amp;quot; |&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &amp;#039;\n|&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. &amp;#039; &amp;#039; .. row[j]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return str .. &amp;#039;\n|}\n&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.Table(frame)&lt;br /&gt;
	--get and cleanup args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k,v in pairs(frame:getParent().args) do&lt;br /&gt;
	--for k,v in pairs(frame.args) do&lt;br /&gt;
		if type(i) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			args[mw.text.trim(k)] = mw.text.trim(v, &amp;#039;\t\n\r &amp;#039;)&lt;br /&gt;
		else &lt;br /&gt;
			args[k] = mw.text.trim(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;#039;entity&amp;#039;] == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--Retrieves claims for each entity provided&lt;br /&gt;
	local claims_for_entity = {}&lt;br /&gt;
	for _,entity in pairs(mw.text.split(args[&amp;#039;entity&amp;#039;], &amp;#039;%s&amp;#039;)) do&lt;br /&gt;
		if entity ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			args[&amp;#039;entity&amp;#039;] = entity&lt;br /&gt;
			claims_for_entity[entity] = wikidata.getClaims(args)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return formatArray(claimsToArray(claims_for_entity, args))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>