<?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%3AInfobox%2F%D9%85%D9%84%D8%B9%D8%A8</id>
	<title>وحدة:Infobox/ملعب - تاريخ المراجعة</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%3AInfobox%2F%D9%85%D9%84%D8%B9%D8%A8"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Infobox/%D9%85%D9%84%D8%B9%D8%A8&amp;action=history"/>
	<updated>2026-06-14T00:17:06Z</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:Infobox/%D9%85%D9%84%D8%B9%D8%A8&amp;diff=442&amp;oldid=prev</id>
		<title>عبد العزيز في 22:33، 10 أغسطس 2016</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Infobox/%D9%85%D9%84%D8%B9%D8%A8&amp;diff=442&amp;oldid=prev"/>
		<updated>2016-08-10T22:33:20Z</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 p = {}&lt;br /&gt;
local lang = &amp;#039;ar&amp;#039;&lt;br /&gt;
-- variables globales alimentées par les paramètres utilisés&lt;br /&gt;
item = nil -- l&amp;#039;élément Wikidata lié&lt;br /&gt;
moduledata = nil -- la sous-page de module:Infobox demandéep&lt;br /&gt;
localdata = {}-- données concernant les paramètres passés au modèle&lt;br /&gt;
page = { -- données concernant la page où est affichée l&amp;#039;infobox&lt;br /&gt;
	name = mw.title.getCurrentTitle().prefixedText,&lt;br /&gt;
	namespace =  mw.title.getCurrentTitle().namespace&lt;br /&gt;
}&lt;br /&gt;
local maincolor, secondcolor, thirdcolor = &amp;#039;#E1E1E1&amp;#039;, &amp;#039;#E1E1E1&amp;#039;, &amp;#039;#000000&amp;#039;&lt;br /&gt;
-- l&amp;#039;objet principal à retournerp&lt;br /&gt;
local infobox = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- objes secondaires à retourner&lt;br /&gt;
local maintenance = &amp;#039;&amp;#039; -- chaîne retournfoée avec le module : cats de maintenance&lt;br /&gt;
local externaltext = &amp;#039;&amp;#039; -- par exemple coordonnées en titre&lt;br /&gt;
-- modules importés&lt;br /&gt;
local wikidata = require(&amp;#039;Module:Interface Wikidata&amp;#039;).fromLua&lt;br /&gt;
local valueexpl = wikidata.translate(&amp;quot;activate-query&amp;quot;)&lt;br /&gt;
local linguistic = require &amp;quot;Module:Linguistique&amp;quot;&lt;br /&gt;
local wd = require &amp;#039;Module:Wikidata/fr&amp;#039;&lt;br /&gt;
local defaultstyle = require &amp;quot;Module:Infobox/Style&amp;quot;&lt;br /&gt;
local mapmod = require &amp;quot;وحدة:Location_map&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
	[&amp;#039;see doc&amp;#039;] = &amp;#039;Documentation du modèle&amp;#039;,&lt;br /&gt;
	[&amp;#039;edit&amp;#039;] = &amp;#039;modifier&amp;#039;,&lt;br /&gt;
	[&amp;#039;edit code&amp;#039;] = &amp;#039;modifier le code&amp;#039;,&lt;br /&gt;
	[&amp;#039;edit item&amp;#039;] = &amp;#039;modifier Wikidata&amp;#039;,&lt;br /&gt;
	[&amp;#039;tracking cat&amp;#039;] = &amp;quot;Page utilisant des données de Wikidata&amp;quot;,&lt;br /&gt;
	[&amp;#039;invalid block type&amp;#039;] = &amp;quot;Bloc de données invalide dans le module d&amp;#039;infobox&amp;quot;,&lt;br /&gt;
	[&amp;#039;default cat&amp;#039;] = &amp;quot;Maintenance des infobox&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function addwikidatacat(prop)&lt;br /&gt;
	maintenance = maintenance .. wikidata.addtrackingcat(prop)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function expandquery(query)&lt;br /&gt;
	local value, number -- valeur à retourner, nombre de valeurs pour accorder le libellé&lt;br /&gt;
	if not query.entity then&lt;br /&gt;
		query.entity = item&lt;br /&gt;
	end&lt;br /&gt;
	if not query.conjtype then&lt;br /&gt;
		query.conjtype = &amp;#039;comma&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local claims = wikidata.getClaims(query)&lt;br /&gt;
		if (not claims) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return wikidata.formatAndCat(query), #claims -- pour l&amp;#039;accord au pluriel&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWikidataValue(params, wikidataparam)&lt;br /&gt;
	-- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre &amp;quot;wikidata&amp;quot; soit dans le praramètre &amp;quot;property&amp;quot;&lt;br /&gt;
	if not item then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local v, valnum -- la valeur à retourner, et le nombre de de valeurs (pour l&amp;#039;accord grammatical)&lt;br /&gt;
	&lt;br /&gt;
	if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre &amp;quot;wikidata&amp;quot; mais dans les structures composées comme &amp;quot;title&amp;quot;, il y a plusieurs paramètres wikidata&lt;br /&gt;
		wikidataparam = &amp;#039;wikidata&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if params[wikidataparam] then&lt;br /&gt;
		if type(params[wikidataparam]) == &amp;#039;function&amp;#039; then&lt;br /&gt;
			v, valnum = params[wikidataparam](item)&lt;br /&gt;
		elseif type(params[wikidataparam]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			v, valnum = expandquery(params[wikidataparam])&lt;br /&gt;
		else&lt;br /&gt;
			v, valnum = params[wikidataparam]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not v then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	mw.log( v )&lt;br /&gt;
	v = linguistic.ucfirst(v)&lt;br /&gt;
	return v, valnum&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getvalue(val, params)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return localdata[val]&lt;br /&gt;
	elseif type(val) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		return val(localdata, item, params)&lt;br /&gt;
	elseif type(val) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		for i, j in pairs(val) do -- si plusieurs paramètres possibles (legacy de vieux code), prendre le preimeir non bide&lt;br /&gt;
			if localdata[j] then&lt;br /&gt;
				return localdata[j]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addmaintenancecat(cat, sortkey)&lt;br /&gt;
	if page.namespace ~= 0 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if cat then&lt;br /&gt;
		maintenance = maintenance .. &amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;|&amp;#039; .. (sortkey or page.name) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.separator(params)&lt;br /&gt;
	local style = params[&amp;#039;separator style&amp;#039;] or {}&lt;br /&gt;
	style.height = style.height or &amp;#039;2px&amp;#039;&lt;br /&gt;
	style[&amp;#039;background-color&amp;#039;] = style[&amp;#039;background-color&amp;#039;] or maincolor&lt;br /&gt;
	&lt;br /&gt;
	return mw.html.create(&amp;#039;hr&amp;#039;):css( style )	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildtitle(params)&lt;br /&gt;
	local text = getvalue(params.value, params) or params.textdefaultvalue or  getWikidataValue(params) or mw.title.getCurrentTitle().text&lt;br /&gt;
	local subtext = getvalue(params.subtitle) or  getWikidataValue(params, &amp;#039;wikidatasubtitle&amp;#039;) or params.subtitledefaultvalue&lt;br /&gt;
	if subtext and (subtext ~= text) then&lt;br /&gt;
		text = text .. &amp;#039;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;&amp;#039; .. subtext .. &amp;#039;&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local icon = params.icon or &amp;#039;&amp;#039;&lt;br /&gt;
	if icon ~= &amp;#039;&amp;#039; and not params.large then&lt;br /&gt;
		icon = &amp;#039;icon &amp;#039; .. icon&lt;br /&gt;
	end&lt;br /&gt;
	local class = &amp;#039;entete &amp;#039; .. icon&lt;br /&gt;
	&lt;br /&gt;
	-- overwrites with those provided in the module&lt;br /&gt;
	local style = {}&lt;br /&gt;
	style[&amp;#039;background-color&amp;#039;] = maincolor&lt;br /&gt;
	style[&amp;#039;color&amp;#039;] = thirdcolor&lt;br /&gt;
	if params.style then&lt;br /&gt;
		for i, j in pairs(params.style) do&lt;br /&gt;
			style[i] = j&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local title = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:wikitext(text)&lt;br /&gt;
		:allDone()&lt;br /&gt;
	return title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildnavbox(params)&lt;br /&gt;
	&lt;br /&gt;
	-- définition du style&lt;br /&gt;
	local class = &amp;quot;overflow nav &amp;quot; .. (params.class or &amp;#039;&amp;#039;)&lt;br /&gt;
	local style = params.style or {}&lt;br /&gt;
&lt;br /&gt;
	if params.separated then -- options pour ajouter une ligne de séparation au dessus&lt;br /&gt;
		style[&amp;#039;border-top&amp;#039;] = &amp;#039;1px solid&amp;#039; .. maincolor&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ajustement des paramètres de données&lt;br /&gt;
	params.previousval = params.previousval or params.previousparameter -- nom de paramètre obsolète&lt;br /&gt;
	params.nextval = params.nextval or params.nextparameter&lt;br /&gt;
	&lt;br /&gt;
	if params.previousproperty then&lt;br /&gt;
		params.previouswikidata = {property = params.previousproperty}&lt;br /&gt;
	end&lt;br /&gt;
	if params.nextproperty then&lt;br /&gt;
		params.nextwikidata = {property = params.nextproperty}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	local previousval = getvalue(params.previousval, params) or getWikidataValue(params, &amp;#039;previouswikidata&amp;#039;)&lt;br /&gt;
	local nextval = getvalue(params.nextval, params) or getWikidataValue(params, &amp;#039;nextwikidata&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local navbox&lt;br /&gt;
	if params.inner then -- pour celles qui sont à l&amp;#039;intérieur d&amp;#039;une table&lt;br /&gt;
		navbox = mw.html.create(&amp;#039;tr&amp;#039;):tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
		style[&amp;#039;font-weight&amp;#039;] = style[&amp;#039;font-weight&amp;#039;] or &amp;#039;normal&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		navbox = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	navbox&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;prev_bloc&amp;#039;)&lt;br /&gt;
			:wikitext(previousval)&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;next_bloc&amp;#039;)&lt;br /&gt;
			:wikitext(nextval)&lt;br /&gt;
			:done()&lt;br /&gt;
		:allDone()&lt;br /&gt;
	return navbox&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildimages(params)&lt;br /&gt;
	local images = {}&lt;br /&gt;
	local upright, link, caption, size -- size is deprecated&lt;br /&gt;
	if type(params.imageparameters) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		params.imageparameters = {params.imageparameters}&lt;br /&gt;
	end&lt;br /&gt;
	if not params.imageparameters then -- s&amp;#039;il n&amp;#039;y a pa de paramètre image, continuer, peut-être y-a-t-il une image par défaut définie dans le module d&amp;#039;infobox&lt;br /&gt;
		params.imageparameters = {}&lt;br /&gt;
	end&lt;br /&gt;
	for j, k in ipairs(params.imageparameters) do&lt;br /&gt;
		table.insert(images, localdata[k])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Images de Wikidata&lt;br /&gt;
	if #images == 0 and item then&lt;br /&gt;
		if params.property then&lt;br /&gt;
			images = wikidata.getClaims{entity = item, property = params.property} or {}&lt;br /&gt;
			if #images &amp;gt; 0 then&lt;br /&gt;
				addwikidatacat(params.property)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if params.wikidata then&lt;br /&gt;
			images = params.wikidata()&lt;br /&gt;
			if type(images) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				return images&lt;br /&gt;
			end -- c&amp;#039;est probablement une erreur dans la requête =&amp;gt; afficher le message&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if type(images[1]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		for i, j in pairs(images) do&lt;br /&gt;
			if j.mainsnak.snaktype ~= &amp;#039;value&amp;#039; then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			local wdcaptions, wdcaption&lt;br /&gt;
			local q = images[i].qualifiers&lt;br /&gt;
			if q then&lt;br /&gt;
				wdcaptions = q[&amp;#039;P2096&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
			if wdcaptions then&lt;br /&gt;
				for k, l in pairs(wdcaptions) do&lt;br /&gt;
					if l.datavalue.value and l.datavalue.value.language == lang then&lt;br /&gt;
						wdcaption = wd.formatSnak(l)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if wdcaption and caption then -- si deux légendes, désactivées pour éviter les conflits&lt;br /&gt;
				caption = nil&lt;br /&gt;
			elseif wdcaption then&lt;br /&gt;
				caption = wdcaption&lt;br /&gt;
			end&lt;br /&gt;
			if i &amp;gt; (params.numval) then&lt;br /&gt;
				images[i] = nil&lt;br /&gt;
			else&lt;br /&gt;
				images[i] = j.mainsnak.datavalue.value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Images par défaut&lt;br /&gt;
	local isdefault = false&lt;br /&gt;
	if #images == 0 then&lt;br /&gt;
		if params.maintenancecat then&lt;br /&gt;
			local maintenancecat = getvalue(params.maintenancecat, params)&lt;br /&gt;
			if maintenancecat and maintenancecat ~= &amp;#039;-&amp;#039; then&lt;br /&gt;
				addmaintenancecat(maintenancecat, params.sortkey)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if params.defaultimages then&lt;br /&gt;
			images = params.defaultimages&lt;br /&gt;
			if type(images) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				images = {images}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		upright, caption, link = params.defaultimageupright, params.defaultimagecaption, params.defaultimagelink&lt;br /&gt;
	end&lt;br /&gt;
	if #images == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	upright = size or getvalue(params.uprightparameter) or params.defaultupright or &amp;quot;1.2&amp;quot;&lt;br /&gt;
	link = link or getvalue(params.linkparameter) or params.defaultlink&lt;br /&gt;
	caption = caption or getvalue(params.captionparameter) or params.defaultcaption or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if type(size) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		size = size(localdata)&lt;br /&gt;
	end&lt;br /&gt;
	if type(link) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		link = link()&lt;br /&gt;
	end&lt;br /&gt;
	if type(caption) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		caption = caption(localdata)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- taille avec &amp;quot;size&amp;quot; (obsolète)&lt;br /&gt;
	size = size or getvalue(params.sizeparameter) or params.defaultsize -- deprecated&lt;br /&gt;
	if size then&lt;br /&gt;
		local numsize = size:gsub(&amp;#039;px&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
		numsize = mw.ustring.gsub(numsize, &amp;#039;x.*&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
		numsize = tonumber(numsize)&lt;br /&gt;
		if type(numsize) ~= &amp;#039;number&amp;#039; or numsize &amp;gt; 280 then&lt;br /&gt;
			addmaintenancecat(&amp;quot;taille d&amp;#039;image invalide&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if tonumber(size) then&lt;br /&gt;
			size = size .. &amp;#039;px&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		size = &amp;#039;|&amp;#039; .. size&lt;br /&gt;
	else&lt;br /&gt;
		size = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if link then&lt;br /&gt;
		link = &amp;#039;|link=&amp;#039; .. link&lt;br /&gt;
	else&lt;br /&gt;
		link = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local style = params.style or {padding =&amp;#039;2px 0&amp;#039;,}&lt;br /&gt;
&lt;br /&gt;
	-- Partie image&lt;br /&gt;
&lt;br /&gt;
	local imagesString = &amp;#039;&amp;#039;&lt;br /&gt;
	for i,image in pairs(images) do&lt;br /&gt;
		if image == &amp;#039;-&amp;#039; then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		imagesString = imagesString ..  &amp;#039;[[Fichier:&amp;#039; .. image .. link .. &amp;#039;|frameless&amp;#039; .. size&lt;br /&gt;
		if #images == 1 then&lt;br /&gt;
			imagesString = imagesString .. &amp;#039;|center&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if upright then&lt;br /&gt;
			imagesString = imagesString .. &amp;#039;|upright=&amp;#039; .. upright&lt;br /&gt;
		else&lt;br /&gt;
			imagesString = imagesString .. &amp;#039;|upright=&amp;#039; .. ( 1 / #images )&lt;br /&gt;
		end&lt;br /&gt;
		imagesString = imagesString .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local image = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;quot;images&amp;quot;)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:wikitext(imagesString)&lt;br /&gt;
&lt;br /&gt;
	-- Partie légende&lt;br /&gt;
	local captionobj = mw.html.create(&amp;#039;p&amp;#039;)&lt;br /&gt;
	if caption then&lt;br /&gt;
		captionobj&lt;br /&gt;
			:wikitext(caption)&lt;br /&gt;
			:css(params.style or {})&lt;br /&gt;
			:addClass(&amp;quot;legend&amp;quot;)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- séparateur&lt;br /&gt;
	local separator&lt;br /&gt;
	if params.separator then&lt;br /&gt;
		separator = separator(params)&lt;br /&gt;
	end&lt;br /&gt;
	return mw.html.create(&amp;#039;div&amp;#039;):node(image):node(captionobj):node(separator):done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildtext(params)&lt;br /&gt;
	local class = params.class or &amp;#039;&amp;#039;&lt;br /&gt;
	local style = defaultstyle[&amp;#039;boldline&amp;#039;]&lt;br /&gt;
	if params.style then&lt;br /&gt;
		for i, j in pairs(params.style) do&lt;br /&gt;
			style[i] = j&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local text = getvalue(params.value, params) or getWikidataValue(params) or params.defaultvalue&lt;br /&gt;
	if text == &amp;#039;-&amp;#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if not text then&lt;br /&gt;
		addmaintenancecat(params.maintenancecat, params.sortkey)&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local formattedtext = mw.html.create(&amp;#039;p&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
	return formattedtext&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildrow(params)&lt;br /&gt;
	local class = params.class or &amp;#039;&amp;#039;&lt;br /&gt;
	local style = params.style or {}&lt;br /&gt;
	local value, number =  getvalue(params.value, params)&lt;br /&gt;
	if (value == valueexpl) then&lt;br /&gt;
		value = nil&lt;br /&gt;
		params.wikidata.expl = false&lt;br /&gt;
	end&lt;br /&gt;
	if (not value) then&lt;br /&gt;
		value, number =  getWikidataValue(params, &amp;#039;wikidata&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if (not value) and (params.property) then&lt;br /&gt;
		value, number = expandquery{ property = params.property, ucfirst = params.ucfirst }&lt;br /&gt;
	end&lt;br /&gt;
	if not value then&lt;br /&gt;
		value = params.defaultvalue&lt;br /&gt;
	end&lt;br /&gt;
	if value == &amp;#039;-&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not number then&lt;br /&gt;
		number = 0 -- == indéfini&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not value then&lt;br /&gt;
		if params.maintenancecat then&lt;br /&gt;
			local maintenancecat = getvalue(params.maintenancecat, params)&lt;br /&gt;
			addmaintenancecat(maintenancecat, params.sortkey)&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local label = params.label&lt;br /&gt;
	if number &amp;gt; 1 and (params.plurallabel) then&lt;br /&gt;
		label = params.plurallabel&lt;br /&gt;
	elseif number == 1 and (params.singularlabel) then&lt;br /&gt;
		label = params.singularlabel&lt;br /&gt;
	end&lt;br /&gt;
	if type(label) == &amp;#039;function&amp;#039; then&lt;br /&gt;
			label = label(localdata, item)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- format&lt;br /&gt;
	local formattedvalue = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:wikitext(&amp;#039;\n&amp;#039; .. value) -- Le &amp;#039;\n&amp;#039; est requis lorsque value est une liste commençant par &amp;#039;*&amp;#039; ou &amp;#039;#&amp;#039;&lt;br /&gt;
		&lt;br /&gt;
	if (params.hidden == true)then&lt;br /&gt;
		formattedvalue&lt;br /&gt;
			:attr({class=&amp;quot;NavContent&amp;quot;, style=&amp;quot;display: none; text-align: left;&amp;quot;})&lt;br /&gt;
		formattedvalue = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr({class=&amp;quot;NavFrame&amp;quot;, title=&amp;quot;[Afficher]/[Masquer]&amp;quot;, style=&amp;quot;border: none; padding: 0;&amp;quot;})&lt;br /&gt;
			:node(formattedvalue)&lt;br /&gt;
	end&lt;br /&gt;
	formattedvalue =  mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:node(formattedvalue)&lt;br /&gt;
			:allDone()&lt;br /&gt;
	&lt;br /&gt;
	local formattedlabel&lt;br /&gt;
	if label then&lt;br /&gt;
		formattedlabel = mw.html.create(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:wikitext(label)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
	local row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:node(formattedlabel)&lt;br /&gt;
		:node(formattedvalue)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	return row&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildsuccession(params)&lt;br /&gt;
if not params.value then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	--local style = params.style or {}&lt;br /&gt;
	--style[&amp;#039;text-align&amp;#039;] = style[&amp;#039;text-align&amp;#039;] or &amp;#039;center&amp;#039;&lt;br /&gt;
	--style[&amp;#039;color&amp;#039;] = style[&amp;#039;color&amp;#039;] or &amp;#039;#000000&amp;#039;&lt;br /&gt;
	--style[&amp;#039;background-color&amp;#039;] = style[&amp;#039;background-color&amp;#039;] or &amp;#039;#F9F9F9&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local rowI = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local colspan = &amp;#039;2&amp;#039;&lt;br /&gt;
	cellI = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({colspan = colspan})&lt;br /&gt;
			:attr({align = &amp;#039;center&amp;#039;})&lt;br /&gt;
	&lt;br /&gt;
	local styleT = {}&lt;br /&gt;
	styleT[&amp;#039;background-color&amp;#039;] = &amp;#039;transparent&amp;#039;&lt;br /&gt;
	styleT[&amp;#039;width&amp;#039;] = &amp;#039;100%&amp;#039;&lt;br /&gt;
	tabC = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:attr({cellspacing = &amp;#039;0&amp;#039;})&lt;br /&gt;
			:css(styleT)&lt;br /&gt;
	&lt;br /&gt;
	local row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local color = params.color&lt;br /&gt;
&lt;br /&gt;
	local style = {}&lt;br /&gt;
	local arrowLeft&lt;br /&gt;
	local arrowRight&lt;br /&gt;
	&lt;br /&gt;
	if color == &amp;#039;default&amp;#039; then&lt;br /&gt;
		style[&amp;#039;background-color&amp;#039;] = &amp;#039;#E6E6E6&amp;#039;&lt;br /&gt;
		arrowLeft = &amp;#039;[[Fichier:Fleche-defaut-gauche.png|13px|alt=Précédent|link=]]&amp;#039;&lt;br /&gt;
		arrowRight = &amp;#039;[[Fichier:Fleche-defaut-droite.png|13px|alt=Précédent|link=]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		style[&amp;#039;background-color&amp;#039;] = color&lt;br /&gt;
		arrowLeft = &amp;#039;[[Fichier:Fleche-defaut-gauche-gris-32.png|13px|alt=Suivant|link=]]&amp;#039;&lt;br /&gt;
		arrowRight = &amp;#039;[[Fichier:Fleche-defaut-droite-gris-32.png|13px|alt=Suivant|link=]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local styleTrans = {}&lt;br /&gt;
	styleTrans[&amp;#039;background-color&amp;#039;] = &amp;#039;#F9F9F9&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local values = params.value&lt;br /&gt;
	local before = values[&amp;#039;before&amp;#039;]&lt;br /&gt;
	local center = values[&amp;#039;center&amp;#039;]&lt;br /&gt;
	local after = values[&amp;#039;after&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	local widthCell = &amp;#039;44%&amp;#039;&lt;br /&gt;
	if center then&lt;br /&gt;
		widthCenter = &amp;#039;28%&amp;#039;&lt;br /&gt;
		widthCell = &amp;#039;29%&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local formattedbefore&lt;br /&gt;
	if before then&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({align = &amp;#039;left&amp;#039;})&lt;br /&gt;
			:attr({width = &amp;#039;5%&amp;#039;})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(arrowLeft)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;left&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(before)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
	else&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({align = &amp;#039;left&amp;#039;})&lt;br /&gt;
			:attr({width = &amp;#039;5%&amp;#039;})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;left&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local formattedcenter&lt;br /&gt;
	formattedcenter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
		:css(styleTrans)&lt;br /&gt;
		:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
	row:node(formattedcenter)&lt;br /&gt;
	&lt;br /&gt;
	if center then&lt;br /&gt;
		formattedcenter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;center&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = widthCenter})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(center)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedcenter)&lt;br /&gt;
		formattedcenter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedcenter)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local formattedafter&lt;br /&gt;
	if after then&lt;br /&gt;
		formattedafter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;right&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(after)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedafter)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedafter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;right&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = &amp;#039;5%&amp;#039;})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(arrowRight)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedafter)&lt;br /&gt;
	else&lt;br /&gt;
		formattedafter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;right&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedafter)&lt;br /&gt;
		formattedbefore = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({width = &amp;#039;1%&amp;#039;})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedafter = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr({align = &amp;#039;right&amp;#039;})&lt;br /&gt;
			:attr({valign = &amp;#039;middle&amp;#039;})&lt;br /&gt;
			:attr({width = &amp;#039;5%&amp;#039;})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedafter)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	row:done()&lt;br /&gt;
	tabC:node(row)&lt;br /&gt;
	tabC:done()&lt;br /&gt;
	cellI:node(tabC)&lt;br /&gt;
	cellI:done()&lt;br /&gt;
	rowI:node(cellI)&lt;br /&gt;
	rowI:allDone()&lt;br /&gt;
	&lt;br /&gt;
	return rowI&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildrow1col(params)&lt;br /&gt;
	&lt;br /&gt;
	if not params.value then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	--local style = params.style or {}&lt;br /&gt;
	--style[&amp;#039;text-align&amp;#039;] = style[&amp;#039;text-align&amp;#039;] or &amp;#039;center&amp;#039;&lt;br /&gt;
	--style[&amp;#039;color&amp;#039;] = style[&amp;#039;color&amp;#039;] or &amp;#039;#000000&amp;#039;&lt;br /&gt;
	--style[&amp;#039;background-color&amp;#039;] = style[&amp;#039;background-color&amp;#039;] or &amp;#039;#F9F9F9&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local rowcolor&lt;br /&gt;
	if params.color == &amp;#039;secondcolor&amp;#039; then&lt;br /&gt;
		rowcolor = secondcolor&lt;br /&gt;
	else&lt;br /&gt;
		rowcolor = params.color&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local style = {}&lt;br /&gt;
	style[&amp;#039;padding&amp;#039;] = &amp;#039;4px&amp;#039;&lt;br /&gt;
	style[&amp;#039;text-align&amp;#039;] = &amp;#039;center&amp;#039;&lt;br /&gt;
	style[&amp;#039;background-color&amp;#039;] = rowcolor or &amp;#039;#F9F9F9&amp;#039;&lt;br /&gt;
	style[&amp;#039;color&amp;#039;] = &amp;#039;#000000&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local text = params.value&lt;br /&gt;
&lt;br /&gt;
	local colspan =&amp;#039;2&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local formattedlabel&lt;br /&gt;
	formattedlabel = mw.html.create(&amp;#039;th&amp;#039;)&lt;br /&gt;
		:attr({colspan = colspan})&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	local row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:node(formattedlabel)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	return row&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildtable(params)&lt;br /&gt;
	local tab = mw.html.create(&amp;#039;table&amp;#039;):css(params.style or {})&lt;br /&gt;
&lt;br /&gt;
	-- CREATE ROWS&lt;br /&gt;
	local rows = {}&lt;br /&gt;
		for k, l in pairs(params.rows) do&lt;br /&gt;
		if type(l) == &amp;#039;table&amp;#039; and l.type == &amp;#039;multi&amp;#039; then -- when a single function is used for return several rows&lt;br /&gt;
			table.remove(params.rows, k)&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for m, n in pairs(l.rows) do&lt;br /&gt;
				table.insert(params.rows, k + count, n)&lt;br /&gt;
				count = count + 1&lt;br /&gt;
			end&lt;br /&gt;
			l = params.rows[k]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if type(l) == &amp;#039;function&amp;#039; then --accepte les fonctions qui retournent des tables&lt;br /&gt;
			l = l(localdata, item)&lt;br /&gt;
		end&lt;br /&gt;
		if type(l) == &amp;#039;nil&amp;#039; then&lt;br /&gt;
			--ne rien faire (quand la valeur est originellemenet une fonctin elle peut retourner nil)&lt;br /&gt;
		elseif type(l) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
			return error(&amp;#039;les lignes d\&amp;#039;infobox (&amp;quot;rows&amp;quot;) doivent être des tables, est &amp;#039; .. type(l))&lt;br /&gt;
		else&lt;br /&gt;
			local row = p.buildblock(l)&lt;br /&gt;
			table.insert(rows, row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #rows == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ADD TITLE&lt;br /&gt;
	local title&lt;br /&gt;
	if params.title or params.singulartitle or params.pluraltitle then&lt;br /&gt;
		local text&lt;br /&gt;
		if #rows &amp;gt; 1 and params.pluraltitle then&lt;br /&gt;
			text = params.pluraltitle&lt;br /&gt;
		elseif #rows == 1 and params.singulartitle then&lt;br /&gt;
			text = params.singulartitle&lt;br /&gt;
		else&lt;br /&gt;
			text = params.title&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local style = params.titlestyle or {}&lt;br /&gt;
		style[&amp;#039;text-align&amp;#039;] = style[&amp;#039;text-align&amp;#039;] or &amp;#039;center&amp;#039;&lt;br /&gt;
		style[&amp;#039;color&amp;#039;] = style[&amp;#039;color&amp;#039;] or thirdcolor&lt;br /&gt;
		style[&amp;#039;background-color&amp;#039;] = style[&amp;#039;background-color&amp;#039;] or maincolor&lt;br /&gt;
&lt;br /&gt;
		local colspan =&amp;#039;2&amp;#039;&lt;br /&gt;
		title = mw.html.create(&amp;#039;caption&amp;#039;)&lt;br /&gt;
			:attr({colspan = colspan})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext(text)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if title then&lt;br /&gt;
		tab:node(title)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, j in pairs (rows) do&lt;br /&gt;
		tab:node(j)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if params.separator then&lt;br /&gt;
		local separator = p.separator(params)&lt;br /&gt;
		tab:node(separator)&lt;br /&gt;
	end&lt;br /&gt;
	tab:allDone()&lt;br /&gt;
	return tab&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildinvalidblock(args)&lt;br /&gt;
	addmaintenancecat(defaultcat)&lt;br /&gt;
	local text = &amp;#039;&amp;#039;&lt;br /&gt;
	if type(args) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		text = &amp;quot;Les blocs d&amp;#039;infobox doivent être des tables&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		text = i18n[&amp;quot;invalid block type&amp;quot;] .. &amp;#039; : &amp;#039; .. (args.type or &amp;#039;??&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildmap(params)-- TODO  : gestion de plusieurs points&lt;br /&gt;
&lt;br /&gt;
	-- paramètre d&amp;#039;affichage &lt;br /&gt;
	local maplist = getvalue(params.maps)&lt;br /&gt;
	local pointtype = params.pointtype&lt;br /&gt;
	local maptype = params.maptype -- choisit le type de carte le plus approprié (relief, administratif, etc.)	&lt;br /&gt;
	if type(maplist) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		maplist = maplist(localdata, item)&lt;br /&gt;
	end&lt;br /&gt;
	local width = tonumber(params.width) or 280&lt;br /&gt;
	if width &amp;gt; 280 then&lt;br /&gt;
		addmaintenancecat(&amp;quot;Erreur d&amp;#039;Infobox/Image trop grande&amp;quot;)&lt;br /&gt;
		return &amp;#039;image trop grande, la largeur doit être inférieure ou égale à 280px&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- récupération des données locales&lt;br /&gt;
	local latitude, longitude, globe = params.latitude, params.longitude, params.globe&lt;br /&gt;
	if type(params.latitude) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		latitude, longitude = params.latitude(localdata, item), params.longitude(localdata, item)&lt;br /&gt;
	else&lt;br /&gt;
		latitude, longitude = localdata[params.latitude], localdata[params.longitude]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- récupération des données wikidata&lt;br /&gt;
	if (not latitude or not longitude) and params.wikidata then&lt;br /&gt;
		local query = params.wikidata&lt;br /&gt;
		if type(query) == &amp;#039;function&amp;#039; then&lt;br /&gt;
			query = query()&lt;br /&gt;
		end&lt;br /&gt;
		if not query then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		query.excludespecial = true&lt;br /&gt;
		query.entity = query.entity or item&lt;br /&gt;
		local claims = wikidata.getClaims(query)&lt;br /&gt;
		if not claims then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local val = claims[1].mainsnak.datavalue.value&lt;br /&gt;
		latitude, longitude, globe = val.latitude, val.longitude, val.globe&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not latitude or not longitude then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local newparams = {maplist = maplist, pointtype = pointtype, maptype = maptype, width = width, item = item, latitude = latitude, longitude = longitude, globe = globe}&lt;br /&gt;
	if params.params and type(params.params) == &amp;#039;table&amp;#039; then -- paramètres additionnels&lt;br /&gt;
		for i, j in pairs(params.params) do&lt;br /&gt;
			newparams[i] = j&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mapmod.multimap(newparams)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildexternaltext(params)&lt;br /&gt;
	local value = getvalue(params.value)&lt;br /&gt;
	if value and (type(value) == &amp;#039;string&amp;#039;) then&lt;br /&gt;
		externaltext = externaltext .. value&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildfooter(params)&lt;br /&gt;
	if not params then&lt;br /&gt;
		params = {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local class = &amp;#039;navbar noprint &amp;#039; .. (params.class or &amp;#039;&amp;#039;)&lt;br /&gt;
	local style = params.style or {}&lt;br /&gt;
	style[&amp;#039;border-top&amp;#039;] = style[&amp;#039;border-top&amp;#039;] or &amp;#039;1px solid &amp;#039; .. maincolor&lt;br /&gt;
	&lt;br /&gt;
	local backlinkstr = &amp;#039;[&amp;#039; .. tostring( mw.uri.fullUrl( page.name, &amp;#039;&amp;amp;veaction=edit&amp;amp;section=0&amp;#039; ) ) .. &amp;#039; &amp;#039; .. i18n[&amp;#039;edit&amp;#039;] .. &amp;#039;]&amp;#039;&lt;br /&gt;
		.. &amp;#039; - [&amp;#039; .. tostring( mw.uri.fullUrl( page.name, &amp;#039;&amp;amp;action=edit&amp;amp;section=0&amp;#039; ) ) .. &amp;#039; &amp;#039; .. i18n[&amp;#039;edit code&amp;#039;] .. &amp;#039;]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local itemlinkstr&lt;br /&gt;
	if item then&lt;br /&gt;
		itemlinkstr = &amp;#039;[[d:&amp;#039; .. item.id .. &amp;#039;|&amp;#039; .. i18n[&amp;#039;edit item&amp;#039;] .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local editstr = backlinkstr&lt;br /&gt;
	if itemlinkstr then&lt;br /&gt;
		editstr = editstr .. &amp;#039; - &amp;#039; .. itemlinkstr&lt;br /&gt;
	end&lt;br /&gt;
	local editlinkspan =  mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:css({[&amp;#039;text-align&amp;#039;] = &amp;quot;left&amp;quot;})&lt;br /&gt;
		:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
		:wikitext(editstr)&lt;br /&gt;
		:done()&lt;br /&gt;
	local doclinkstr = &amp;#039;[[Image:Info Simple.svg|12px|link=&amp;#039; .. localdata.templatename .. &amp;#039;|&amp;#039; .. i18n[&amp;#039;see doc&amp;#039;] .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	-- si ce lien ne marche pas toujours, il faut ajouter un variable pour le nom de l&amp;#039;infobox récupéré par le frame&lt;br /&gt;
	local doclinkspan = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:css({[&amp;#039;text-align&amp;#039;] = &amp;quot;right&amp;quot;})&lt;br /&gt;
		:wikitext(doclinkstr)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	local footer = mw.html.create(&amp;#039;p&amp;#039;)&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:node(editlinkspan)&lt;br /&gt;
		:node(doclinkspan)&lt;br /&gt;
	return footer&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildblock(block)&lt;br /&gt;
	if type(block) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		block = block()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local blocktypes = { -- list of functions for block buildings&lt;br /&gt;
		[&amp;#039;invalid&amp;#039;] = p.buildinvalidblock,&lt;br /&gt;
		[&amp;#039;external text&amp;#039;] = p.buildexternaltext,&lt;br /&gt;
		[&amp;#039;footer&amp;#039;] = p.buildfooter,&lt;br /&gt;
		[&amp;#039;images&amp;#039;] = p.buildimages,&lt;br /&gt;
		[&amp;#039;map&amp;#039;]= p.buildmap,&lt;br /&gt;
		[&amp;#039;mixed&amp;#039;] = p.buildrow,&lt;br /&gt;
		[&amp;#039;navbox&amp;#039;] = p.buildnavbox,&lt;br /&gt;
		[&amp;#039;table&amp;#039;] = p.buildtable,&lt;br /&gt;
		[&amp;#039;row&amp;#039;] = p.buildrow,&lt;br /&gt;
		[&amp;#039;row1col&amp;#039;] = p.buildrow1col,&lt;br /&gt;
		[&amp;#039;succession&amp;#039;] = p.buildnavbox,&lt;br /&gt;
		[&amp;#039;text&amp;#039;] = p.buildtext,&lt;br /&gt;
		[&amp;#039;title&amp;#039;] = p.buildtitle,&lt;br /&gt;
	}&lt;br /&gt;
	if type(block) ~= &amp;#039;table&amp;#039; or (not block.type) or (not blocktypes[block.type]) then&lt;br /&gt;
		return blocktypes[&amp;#039;invalid&amp;#039;](block)&lt;br /&gt;
	end&lt;br /&gt;
	return blocktypes[block.type](block) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._build(modulename, params, templatename,item)&lt;br /&gt;
&lt;br /&gt;
	-- fill-up global variable localdata using params&lt;br /&gt;
	for i, j in pairs(params) do&lt;br /&gt;
		if j and mw.text.trim(j) ~= &amp;#039;&amp;#039; then -- empty parameters are ignored&lt;br /&gt;
			localdata[i] = j&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	localdata.templatename = templatename or modulename&lt;br /&gt;
&lt;br /&gt;
	-- load wikidata item as a global variable:&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	-- assign rank to the infobox, &amp;quot;secondary&amp;quot; means special formatting like no displaytitle for coordinates&lt;br /&gt;
	local infoboxrank = &amp;#039;main&amp;#039; -- main infobox of the page, with coordinates displayed in title etc.&lt;br /&gt;
	if page.namespace ~= 0 then&lt;br /&gt;
		infoboxrank = &amp;#039;secondary&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- if infobox is linked to another item: rank = secondary&lt;br /&gt;
	if item then&lt;br /&gt;
		local itemlink = mw.wikibase.sitelink(item)&lt;br /&gt;
		local pagetitle = mw.title.getCurrentTitle().text&lt;br /&gt;
		if (itemlink or &amp;#039;&amp;#039;) ~= pagetitle then&lt;br /&gt;
			infoboxrank = &amp;#039;secondary&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	localdata.infoboxrank = infoboxrank&lt;br /&gt;
&lt;br /&gt;
	-- load infobox module page&lt;br /&gt;
	moduledata = require(&amp;#039;Module:Infobox/&amp;#039; .. modulename)&lt;br /&gt;
	moduledata.name = modulename&lt;br /&gt;
	-- defines main color&lt;br /&gt;
	maincolor = localdata[&amp;#039;couleur infobox&amp;#039;] or localdata[&amp;#039;couleur boîte&amp;#039;] or moduledata.maincolor or maincolor&lt;br /&gt;
	secondcolor =  moduledata.secondcolor or secondcolor&lt;br /&gt;
	thirdcolor =  moduledata.thirdcolor or thirdcolor&lt;br /&gt;
	if maincolor:match( &amp;#039;^%x%x%x%x%x%x$&amp;#039; ) or maincolor:match( &amp;#039;^%x%x%x$&amp;#039; ) then&lt;br /&gt;
		maincolor = &amp;#039;#&amp;#039; .. maincolor&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- class&lt;br /&gt;
	local class = &amp;#039;infobox_v3&amp;#039;&lt;br /&gt;
	if moduledata.class then&lt;br /&gt;
		class = class .. &amp;#039; &amp;#039; .. moduledata.class&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- style&lt;br /&gt;
	local style = moduledata.style or {}&lt;br /&gt;
	if not style[&amp;#039;max-width&amp;#039;] then&lt;br /&gt;
		style[&amp;#039;max-width&amp;#039;] = &amp;#039;300px&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- build infobox&lt;br /&gt;
	infobox	:addClass(class)&lt;br /&gt;
			:css(style)&lt;br /&gt;
	for i, j in pairs( moduledata.parts ) do&lt;br /&gt;
		infobox:node( p.buildblock(j) )&lt;br /&gt;
	end&lt;br /&gt;
	infobox	:node(p.buildfooter(moduledata.footer))&lt;br /&gt;
			:done()&lt;br /&gt;
&lt;br /&gt;
	return tostring(infobox) .. externaltext, maintenance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.build(frame)&lt;br /&gt;
	local item =  frame.args.item&lt;br /&gt;
	local name =  frame.args.nom&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local templatename = parent:getTitle() -- au cas où il soit différent du nom du module&lt;br /&gt;
	local params = parent.args&lt;br /&gt;
	return p._build(name, params, templatename,item) &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>