<?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%3AWikidata%2FOutils</id>
	<title>وحدة:Wikidata/Outils - تاريخ المراجعة</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%3AWikidata%2FOutils"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/Outils&amp;action=history"/>
	<updated>2026-06-05T09:20:48Z</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:Wikidata/Outils&amp;diff=337&amp;oldid=prev</id>
		<title>عبد العزيز في 14:28، 21 فبراير 2018</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/Outils&amp;diff=337&amp;oldid=prev"/>
		<updated>2018-02-21T14:28:34Z</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;--Fonctions élémentaires de gestion des snaks Wikidata&lt;br /&gt;
local p = {}&lt;br /&gt;
p.i18n = require &amp;quot;Module:Wikidata/I18n&amp;quot;&lt;br /&gt;
local defaultlang = mw.getContentLanguage():getCode()&lt;br /&gt;
&lt;br /&gt;
function p.translate(str, rep1, rep2)&lt;br /&gt;
	str = p.i18n[str] or str&lt;br /&gt;
	if rep1 then&lt;br /&gt;
		str = str:gsub(&amp;#039;$1&amp;#039;, rep1)&lt;br /&gt;
	end&lt;br /&gt;
	if rep2 then&lt;br /&gt;
		str = str:gsub(&amp;#039;$2&amp;#039;, rep2)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.snaktype(snak)&lt;br /&gt;
	return snak.snaktype&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function p.isSpecial(snak)&lt;br /&gt;
	return (snak.snaktype ~= &amp;#039;value&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isValue(snak)&lt;br /&gt;
	return (snak.snaktype == &amp;#039;value&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getId(snak)&lt;br /&gt;
	if p.isValue(snak) then&lt;br /&gt;
		return &amp;#039;Q&amp;#039; .. snak.datavalue.value[&amp;#039;numeric-id&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNumericId(snak)&lt;br /&gt;
	if p.isValue(snak) then&lt;br /&gt;
		return snak.datavalue.value[&amp;#039;numeric-id&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getMainId(claim)&lt;br /&gt;
	return p.getId(claim.mainsnak)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.EntityId(entity)&lt;br /&gt;
	if type(entity) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return entity&lt;br /&gt;
	end&lt;br /&gt;
	return entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getValue(snak)&lt;br /&gt;
	return snak.datavalue.value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatError( key )&lt;br /&gt;
    return error(p.i18n[key] or key)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.addcat(cat, sortkey)&lt;br /&gt;
	if sortkey then&lt;br /&gt;
		return  &amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;|&amp;#039; .. (sortkey or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;[[Category:&amp;#039; .. cat  .. &amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getEntity( val ) &lt;br /&gt;
	if type(val) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
	if val == &amp;#039;-&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if val == &amp;#039;&amp;#039; then&lt;br /&gt;
		val = nil&lt;br /&gt;
	end&lt;br /&gt;
	return mw.wikibase.getEntityObject(val)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		val = mw.text.split(val, &amp;quot;,&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isHere(searchset, val)&lt;br /&gt;
	for i, j in pairs(searchset) do&lt;br /&gt;
		if val == j then&lt;br /&gt;
			return true&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.alreadyHere(searchset, val) -- obsolète&lt;br /&gt;
	return p.isHere(searchset, val)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getEntityPagename(entity)&lt;br /&gt;
	if (not entity) then&lt;br /&gt;
		return nil -- ou option de gestion des erreurs ?&lt;br /&gt;
	end&lt;br /&gt;
	local name =&amp;quot;d:&amp;quot;&lt;br /&gt;
	if entity[&amp;quot;type&amp;quot;] == &amp;quot;property&amp;quot; then&lt;br /&gt;
		name = &amp;quot;d:Property:&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return name .. entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getEntityPagename(entity)&lt;br /&gt;
	if (not entity) then&lt;br /&gt;
		return nil -- ou option de gestion des erreurs ?&lt;br /&gt;
	end&lt;br /&gt;
	local name =&amp;quot;d:&amp;quot;&lt;br /&gt;
	if entity[&amp;quot;type&amp;quot;] == &amp;quot;property&amp;quot; then&lt;br /&gt;
		name = &amp;quot;d:Property:&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return name .. entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wikidataLink(entity)&lt;br /&gt;
	local name =&amp;#039;:d:&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if type(entity) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if entity:match(&amp;quot;P[0-9+]&amp;quot;) then&lt;br /&gt;
			entity = &amp;quot;Property:&amp;quot; .. entity&lt;br /&gt;
		end&lt;br /&gt;
		return name .. entity&lt;br /&gt;
	elseif type(entity) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		if entity[&amp;quot;type&amp;quot;] == &amp;quot;property&amp;quot; then&lt;br /&gt;
			name = &amp;quot;:d:Property:&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return name .. entity.id&lt;br /&gt;
	elseif type(entity) == nil then&lt;br /&gt;
		return formatError(&amp;#039;entity-not-found&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.siteLink(entity, project, lang)&lt;br /&gt;
	-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language&lt;br /&gt;
	lang = lang or defaultlang&lt;br /&gt;
	if (type(project) ~= &amp;#039;string&amp;#039;) then&lt;br /&gt;
		project = &amp;#039;wikinews&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	project = project:lower()&lt;br /&gt;
	if project == &amp;#039;wikipedia&amp;#039; then&lt;br /&gt;
		project = &amp;#039;wiki&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if type(entity) == &amp;#039;string&amp;#039; and (project == &amp;#039;wikinews&amp;#039;) and ( (not lang or lang == defaultlang) ) then -- évite de charger l&amp;#039;élément entier&lt;br /&gt;
		return  mw.wikibase.sitelink(entity), &amp;#039;wikinews&amp;#039;, defaultlang&lt;br /&gt;
	end&lt;br /&gt;
	if project == &amp;#039;wikidata&amp;#039; then&lt;br /&gt;
		return wikidataLink(entity), &amp;#039;wikidata&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local projects = {&lt;br /&gt;
		-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}&lt;br /&gt;
		wiki = {&amp;#039;wiki&amp;#039;, &amp;#039;w&amp;#039;, true}, -- wikipedia&lt;br /&gt;
		commons = {&amp;#039;commonswiki&amp;#039;, &amp;#039;commons&amp;#039;, false},&lt;br /&gt;
		commonswiki = {&amp;#039;commonswiki&amp;#039;, &amp;#039;commons&amp;#039;, false},&lt;br /&gt;
		wikiquote = {&amp;#039;wikiquote&amp;#039;, &amp;#039;q&amp;#039;, true},&lt;br /&gt;
		wikivoyage = {&amp;#039;wikivoyage&amp;#039;, &amp;#039;voy&amp;#039;, true},&lt;br /&gt;
		wikibooks = {&amp;#039;wikibooks&amp;#039;, &amp;#039;b&amp;#039;, true},&lt;br /&gt;
		wikinews = {&amp;#039;wikinews&amp;#039;, nil, true},&lt;br /&gt;
		wikiversity = {&amp;#039;wikiversity&amp;#039;, &amp;#039;v&amp;#039;, true},&lt;br /&gt;
		wikisource = {&amp;#039;wikisource&amp;#039;, &amp;#039;s&amp;#039;, true},&lt;br /&gt;
		-- meta&lt;br /&gt;
		-- mediawiki&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	entity = p.getEntity(entity)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local projectdata = projects[project:lower()]&lt;br /&gt;
	if not projectdata then -- sinon, on peut avoir des liens du type &amp;quot;enwiki&amp;quot; plutôt que &amp;quot;en&amp;quot; et lang = &amp;quot;wikipedia&amp;#039;&lt;br /&gt;
		for k, v in pairs(projects) do&lt;br /&gt;
			if project:match( k .. &amp;#039;$&amp;#039; ) &lt;br /&gt;
				and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))&lt;br /&gt;
			then&lt;br /&gt;
				lang = project:sub(1, #project-#k)&lt;br /&gt;
				projectdata = k&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not mw.language.isKnownLanguageTag(lang) then&lt;br /&gt;
			return p.formatError(&amp;#039;invalid project code: &amp;#039; .. (project or &amp;#039;?&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not projectdata then&lt;br /&gt;
		return p.formatError(&amp;#039;invalid project code: &amp;#039; .. (project or &amp;#039;?&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local linkcode = projectdata[1]&lt;br /&gt;
	local prefix = projectdata[2]&lt;br /&gt;
	local multiversion = projectdata[3]&lt;br /&gt;
	if multiversion then&lt;br /&gt;
		linkcode = lang .. linkcode&lt;br /&gt;
	end&lt;br /&gt;
	local link = entity:getSitelink(linkcode)&lt;br /&gt;
	if not link then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if prefix then&lt;br /&gt;
		link = prefix .. &amp;#039;:&amp;#039; .. link&lt;br /&gt;
	end&lt;br /&gt;
	if multiversion then&lt;br /&gt;
		link = &amp;#039;:&amp;#039; .. lang .. &amp;#039;:&amp;#039; .. link&lt;br /&gt;
	end&lt;br /&gt;
	return link, project, lang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- add new values to a list, avoiding duplicates&lt;br /&gt;
function p.addnewvalues(old, new)&lt;br /&gt;
	if not new then&lt;br /&gt;
		return old&lt;br /&gt;
	end&lt;br /&gt;
	for _, j in pairs(new) do&lt;br /&gt;
		if not p.isHere(old, j) then&lt;br /&gt;
			table.insert(old, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return old&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>