<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3A%D8%A8%D8%B7%D8%A7%D9%82%D8%A9</id>
	<title>وحدة:بطاقة - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3A%D8%A8%D8%B7%D8%A7%D9%82%D8%A9"/>
	<link rel="alternate" type="text/html" href="https://www.copticpedia.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:%D8%A8%D8%B7%D8%A7%D9%82%D8%A9&amp;action=history"/>
	<updated>2026-04-17T06:32:04Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://www.copticpedia.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:%D8%A8%D8%B7%D8%A7%D9%82%D8%A9&amp;diff=71753&amp;oldid=prev</id>
		<title>Gerges: مراجعة واحدة</title>
		<link rel="alternate" type="text/html" href="https://www.copticpedia.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:%D8%A8%D8%B7%D8%A7%D9%82%D8%A9&amp;diff=71753&amp;oldid=prev"/>
		<updated>2021-08-31T21:34:30Z</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;-- Credits:&lt;br /&gt;
-- Original from fr:Module:Infobox&lt;br /&gt;
-- Adapted &amp;amp; Developed for Arabic Wikipedia by وهراني @arwiki&lt;br /&gt;
-- Version: 20210831&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local wikiLang = 'ar' -- اللغة&lt;br /&gt;
&lt;br /&gt;
local item = nil -- عنصر مرتبط بويكي بيانات&lt;br /&gt;
local localdata = {}-- بيانات مضمنة في القالب&lt;br /&gt;
&lt;br /&gt;
local page = { -- بيانات حول الصفحة التي ستعرض عليها البطاقة &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 = '#E1E1E1', '#E1E1E1', '#000000'&lt;br /&gt;
&lt;br /&gt;
-- نتائج ثانوية&lt;br /&gt;
local maintenance = '' -- نص مضاف للنتيجة يستعمل لإدراج التصنيفات عادة&lt;br /&gt;
local externaltext = '' -- نص مضاف عام يستعمل لعرض إضافات مثل القوالب خارج قالب المعلومات&lt;br /&gt;
&lt;br /&gt;
-- وحدات مستعملة&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
	['see doc'] = 'حول القالب',&lt;br /&gt;
	['edit'] = 'تعديل',&lt;br /&gt;
	['edit code'] = 'تعديل مصدري',&lt;br /&gt;
	['edit item'] = 'تعديل ويكي بيانات',&lt;br /&gt;
	['tracking cat'] = &amp;quot;صفحات بها بيانات ويكي بيانات&amp;quot;,&lt;br /&gt;
	['invalid block type'] = &amp;quot;لبنة بيانات غير صحيحة في القالب&amp;quot;, &lt;br /&gt;
	['default cat'] = &amp;quot;صيانة بطاقات&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function addWikidataCat(prop)&lt;br /&gt;
	if type(prop) == 'table' then prop = prop[1] end&lt;br /&gt;
	if page.namespace == 0 then&lt;br /&gt;
	maintenance = maintenance .. '[[تصنيف:صفحات_تستخدم_خاصية_' .. prop .. ']]'&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 ''&lt;br /&gt;
	end&lt;br /&gt;
	if cat then&lt;br /&gt;
		maintenance = maintenance .. '[[Category:' .. cat .. '|' .. (sortkey or page.name) .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function expandQuery(query)&lt;br /&gt;
	local value, number -- نتيجة ، عدد النتائج للضبط الصرفي للعنوان&lt;br /&gt;
&lt;br /&gt;
	if(type(query) ~= 'table') then return nil end&lt;br /&gt;
-- الوحدات المستعملة&lt;br /&gt;
	local wikimod = query.wikimod or localdata.wikimod or 'Wikidata2' --'Wikidata/fr'&lt;br /&gt;
	&lt;br /&gt;
	local wdexpandQuery = require(&amp;quot;وحدة:بطاقة/ويكي.بيانات&amp;quot;).expandQuery&lt;br /&gt;
	&lt;br /&gt;
	local noerr,data, nb&lt;br /&gt;
	noerr,data, nb = pcall(wdexpandQuery,localdata.item ,wikimod,query)	&lt;br /&gt;
	if noerr &lt;br /&gt;
		then return data, nb &lt;br /&gt;
		else &lt;br /&gt;
			addMaintenanceCat('مقالات بها أخطاء مصدرها وحدة بطاقة')&lt;br /&gt;
			mw.log(&amp;quot;WD Query Error : &amp;quot;..mw.dumpObject(data))&lt;br /&gt;
			return '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. (data) .. '&amp;lt;/span&amp;gt;' &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWikidataValue(params, wikidataparam)&lt;br /&gt;
	if not localdata.item then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if params.blockers then -- blockers are local parameters that disable the wikidata query&lt;br /&gt;
		local blockers = params.blockers&lt;br /&gt;
		if (type(blockers) == 'string') then&lt;br /&gt;
			blockers = {blockers}&lt;br /&gt;
		end&lt;br /&gt;
		for i, blocker in ipairs(blockers) do&lt;br /&gt;
			if localdata[blocker] then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local v, valnum -- قيم النتائج وعددها (لعرض مناسب في حالة الجمع)&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 = 'wikidata'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if params[wikidataparam] then&lt;br /&gt;
		if type(params[wikidataparam]) == 'function' then&lt;br /&gt;
			v, valnum = params[wikidataparam](localdata.item)&lt;br /&gt;
		elseif type(params[wikidataparam]) == 'table' 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 or valnum==0 then &lt;br /&gt;
		return nil&lt;br /&gt;
	end&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) == 'string' then&lt;br /&gt;
		return localdata[val]&lt;br /&gt;
	elseif type(val) == 'function' then&lt;br /&gt;
		return val(localdata, localdata.item, params)&lt;br /&gt;
	elseif type(val) == 'table' then&lt;br /&gt;
		for i, j in pairs(val) do -- في حال وجود قيم لأكثر من وسيط : أخذ بعين الاعتبار أول قيمة&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;
function p.separator(params)&lt;br /&gt;
	local style = params['separator style'] or {}&lt;br /&gt;
	style.height = style.height or '2px'&lt;br /&gt;
	style['background-color'] = style['background-color'] or maincolor&lt;br /&gt;
	&lt;br /&gt;
	return mw.html.create('hr'):css( style )	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
تحضير لبنة العنوان في البطاقة&lt;br /&gt;
&lt;br /&gt;
البيانات:قائمة جزئية) :&lt;br /&gt;
- value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction).&lt;br /&gt;
- textdefaultvalue : النص الافتراضي للعنوان.&lt;br /&gt;
- icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]).&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;
&lt;br /&gt;
	local subtext = getValue(params.subtitle) or  getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue&lt;br /&gt;
	if subtext and (subtext ~= text) then&lt;br /&gt;
		text = text .. '&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;' .. subtext .. '&amp;lt;/small&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local class = 'entete ' .. (params.icon or '')&lt;br /&gt;
	&lt;br /&gt;
	-- overwrites with those provided in the module&lt;br /&gt;
	local style = {}&lt;br /&gt;
	style['background-color'] = maincolor&lt;br /&gt;
	style['color'] = 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('div')&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:wikitext(text)&lt;br /&gt;
		:allDone()&lt;br /&gt;
	return title&lt;br /&gt;
end&lt;br /&gt;
p.buildTitle = p.buildtitle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function getwdImage(Q, property)&lt;br /&gt;
	--mw.log(&amp;quot;IMG&amp;gt;&amp;gt;&amp;quot;..mw.dumpObject(property))&lt;br /&gt;
	property = property or 'P18'&lt;br /&gt;
	local QID&lt;br /&gt;
&lt;br /&gt;
	if type(Q) == 'table' and Q.id and Q.id ~= '-' &lt;br /&gt;
	    then QID = Q.id&lt;br /&gt;
		else return&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
	local wdata &lt;br /&gt;
&lt;br /&gt;
	if (type(property) == 'string') &lt;br /&gt;
	    then wdata = mw.wikibase.getBestStatements(QID, property or 'P18') -- P18 is 'image'&lt;br /&gt;
	    elseif(type(property) == 'table')&lt;br /&gt;
		then for _,prop in ipairs(property) do&lt;br /&gt;
				wdata = mw.wikibase.getBestStatements(QID,prop)&lt;br /&gt;
				if(wdata) then break end&lt;br /&gt;
			end&lt;br /&gt;
		else return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local first&lt;br /&gt;
    local firstProp &lt;br /&gt;
&lt;br /&gt;
	for _, image in pairs(wdata) do&lt;br /&gt;
		if image.mainsnak.snaktype == 'value' then&lt;br /&gt;
			if not first then&lt;br /&gt;
				first = image.mainsnak.datavalue.value&lt;br /&gt;
				firstProp = image.mainsnak.property&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local q = image.qualifiers&lt;br /&gt;
			if q and q.P2096 then&lt;br /&gt;
				for _, caption in pairs(q.P2096) do -- P2096 is 'caption'&lt;br /&gt;
					if caption.snaktype == 'value' and caption.datavalue.value.language == wikiLang then&lt;br /&gt;
						return image.mainsnak.datavalue.value, caption.datavalue.value.text, image.mainsnak.property&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return first,nil,firstProp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.buildimages(params)&lt;br /&gt;
&lt;br /&gt;
	local images = {}&lt;br /&gt;
&lt;br /&gt;
	local upright, link, caption, captionfromwd, alt, size  -- size is deprecated&lt;br /&gt;
&lt;br /&gt;
	if type(params.imageparameters) == 'string' then&lt;br /&gt;
		params.imageparameters = {params.imageparameters}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not params.imageparameters then -- في حالة غياب أي مدخل لصورة&lt;br /&gt;
		params.imageparameters = {}&lt;br /&gt;
	end&lt;br /&gt;
&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;
&lt;br /&gt;
	-- Images de Wikidata &lt;br /&gt;
	if #images == 0 and localdata.item then&lt;br /&gt;
		if params.property then&lt;br /&gt;
			params.wikidata = {entity = localdata.item, property = params.property}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if params.wikidata then&lt;br /&gt;
			local wdq = params.wikidata&lt;br /&gt;
			local usedProp&lt;br /&gt;
&lt;br /&gt;
			wdq.excludespecial = true&lt;br /&gt;
&lt;br /&gt;
			if type(wdq) == 'table' then&lt;br /&gt;
				images,captionfromwd,usedProp= getwdImage(localdata.item, params.wikidata.property)&lt;br /&gt;
&lt;br /&gt;
				if captionfromwd then&lt;br /&gt;
					addMaintenanceCat(&amp;quot;صفحات تستخدم خاصية P2096&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				if usedProp then&lt;br /&gt;
					addWikidataCat(usedProp)&lt;br /&gt;
					captionfromwd = captionfromwd or params.defaultcaption or mw.wikibase.getLabelByLang( 'Property:'..usedProp, wikiLang )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if type(wdq) == 'function' then&lt;br /&gt;
				images = params.wikidata()&lt;br /&gt;
				if type(images) == 'string' then&lt;br /&gt;
					return images&lt;br /&gt;
				end &lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if type(images) == 'string' then&lt;br /&gt;
				images = {images}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if (not images) then&lt;br /&gt;
				images = {}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- استعمال صور افتراضبة في حال عرفت&lt;br /&gt;
	if #images == 0 then&lt;br /&gt;
		if params.maintenancecat then&lt;br /&gt;
			addMaintenanceCat(params.maintenancecat, params.sortkey)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if params.defaultimages then&lt;br /&gt;
			images = params.defaultimages&lt;br /&gt;
			if type(images) == 'string' then&lt;br /&gt;
				images = {images}&lt;br /&gt;
			end&lt;br /&gt;
			upright = params.defaultimageupright&lt;br /&gt;
			caption = params.defaultimagecaption&lt;br /&gt;
			link = params.defaultimagelink&lt;br /&gt;
			alt = params.defaultimagealt&lt;br /&gt;
			if not alt and ( images[1] == 'DefautAr.svg' or images[1] == 'Defaut 2.svg' ) then&lt;br /&gt;
				alt = 'نحتاج صورة تكون من الأفضل حرة'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #images == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	upright = upright 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 = captionfromwd or caption or getValue(params.captionparameter) or params.defaultcaption &lt;br /&gt;
	alt = alt or getValue( params.altparameter) or params.defaultalt&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;
&lt;br /&gt;
	if size then&lt;br /&gt;
		local numsize = size:gsub('px', '')&lt;br /&gt;
		numsize = size:gsub('بك', '')&lt;br /&gt;
		numsize = mw.ustring.gsub(numsize, 'x.*', '')&lt;br /&gt;
		numsize = tonumber(numsize)&lt;br /&gt;
&lt;br /&gt;
		if type(numsize) ~= 'number' or numsize &amp;gt; 280 then&lt;br /&gt;
			addMaintenanceCat(&amp;quot;مقالات تسيء استعمال حجم الصورة&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if tonumber(size) then&lt;br /&gt;
			size = size .. 'px'&lt;br /&gt;
		end&lt;br /&gt;
		size = '|' .. size&lt;br /&gt;
	else&lt;br /&gt;
		size = ''&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber(upright) then&lt;br /&gt;
		upright = tostring(tonumber(upright) ) / #images&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber(size) then&lt;br /&gt;
		size = tostring(tonumber(size) ) / #images&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local style = params.style or {padding ='2px 0',}&lt;br /&gt;
&lt;br /&gt;
	-- تحضير عرض الصورة&lt;br /&gt;
	local imagesString = ''&lt;br /&gt;
	for i,image in pairs(images) do&lt;br /&gt;
		if image == '-' then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		image = string.match(image, '[^:]*:([^|%]]*)') or image&lt;br /&gt;
		imagesString = imagesString ..  '[[file:' .. image .. size .. '|frameless'&lt;br /&gt;
&lt;br /&gt;
		-- [[&lt;br /&gt;
		if alt then&lt;br /&gt;
			imagesString = imagesString .. '|alt=' .. alt&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if link then&lt;br /&gt;
			imagesString = imagesString .. '|link=' .. link&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if upright then&lt;br /&gt;
			imagesString = imagesString .. '|upright=' .. upright&lt;br /&gt;
		elseif #images &amp;gt; 1 then&lt;br /&gt;
			imagesString = imagesString .. '|upright=' .. ( 1 / #images )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		imagesString = imagesString .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local image = mw.html.create('div')&lt;br /&gt;
		:addClass(&amp;quot;images&amp;quot;)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:wikitext(imagesString)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	-- التعليق&lt;br /&gt;
	local captionobj&lt;br /&gt;
	if caption then&lt;br /&gt;
		captionobj = mw.html.create('div')&lt;br /&gt;
			:wikitext(caption)&lt;br /&gt;
			:css(params.legendstyle or {})&lt;br /&gt;
			:addClass(&amp;quot;legend&amp;quot;)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- الفاصل&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;
	&lt;br /&gt;
	local imgout&lt;br /&gt;
	if params.inner then -- في حالة التواجد داخل الجدول&lt;br /&gt;
		imgout = mw.html.create('tr'):tag('th'):attr('colspan', 2)&lt;br /&gt;
	else&lt;br /&gt;
		imgout = mw.html.create('div'):css({	border=&amp;quot;unset&amp;quot;,padding=&amp;quot;unset&amp;quot;})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return imgout&lt;br /&gt;
		:node(image)&lt;br /&gt;
		:node(captionobj)&lt;br /&gt;
		:node(separator)&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
p.buildImages = p.buildimages&lt;br /&gt;
&lt;br /&gt;
function p.buildtext(params)&lt;br /&gt;
	local class = params.class or ''&lt;br /&gt;
	local style = {&lt;br /&gt;
		['text-align'] = 'center',&lt;br /&gt;
		['font-weight'] = 'bold'&lt;br /&gt;
	}&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 == '-' 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('p')&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;
p.buildText = p.buildtext&lt;br /&gt;
&lt;br /&gt;
function p.buildrow(params)&lt;br /&gt;
	local class = params.class or ''&lt;br /&gt;
	local style = params.style or {}&lt;br /&gt;
	local valueClass = params.valueClass or ''&lt;br /&gt;
	local valueStyle = params.valueStyle or {}&lt;br /&gt;
	local value, number =  getValue(params.value, params)&lt;br /&gt;
&lt;br /&gt;
	if (not value) then&lt;br /&gt;
		value, number =  getWikidataValue(params, 'wikidata')&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 == '-' 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;
&lt;br /&gt;
	if type(label) == 'table' then label= getValue(params.label, params) end &lt;br /&gt;
	&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;
&lt;br /&gt;
	if number &amp;gt; 4 then   --- اخفاء النتيجة في حال تجاوز عددها 4&lt;br /&gt;
		params.hidden = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(label) == 'function' then&lt;br /&gt;
			label = label(localdata, localdata.item)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- format&lt;br /&gt;
	local formattedvalue = mw.html.create('div')&lt;br /&gt;
		:wikitext('\n' .. value) -- رمز '\n' مطلوب عندما تكون value قائمة تبدأ بـ '*' ou '#'&lt;br /&gt;
		&lt;br /&gt;
	if (params.hidden == true)then&lt;br /&gt;
		formattedvalue = mw.html.create('div')&lt;br /&gt;
			:attr({class=&amp;quot;NavContent&amp;quot;}) --, style=&amp;quot;display: none; text-align: center&amp;quot;})  &lt;br /&gt;
			:node(formattedvalue)&lt;br /&gt;
		local divNavHead = mw.html.create('div')&lt;br /&gt;
			:attr({class=&amp;quot;NavHead nomobile&amp;quot;, style=&amp;quot;text-align:left;border: none; padding: 0; background:none; font-size: 75%;&amp;quot;})	&lt;br /&gt;
			:wikitext(&amp;quot;&amp;amp;nbsp;[[file:Incomplete list.svg|20x20px|link=]]&amp;quot;) --[عرض]/[إخفاء]&lt;br /&gt;
		formattedvalue = mw.html.create('div')&lt;br /&gt;
			:attr({class=&amp;quot;NavFrame collapsed&amp;quot;, style=&amp;quot;border: none; padding: 0;&amp;quot;})&lt;br /&gt;
			:node(divNavHead)&lt;br /&gt;
			:node(formattedvalue)&lt;br /&gt;
	end&lt;br /&gt;
	formattedvalue =  mw.html.create('td')&lt;br /&gt;
			:node(formattedvalue)&lt;br /&gt;
			:addClass(valueClass)&lt;br /&gt;
			:css(valueStyle)&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('th')&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:wikitext(label)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
	local row = mw.html.create('tr')&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;
p.buildRow = p.buildrow&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 '')&lt;br /&gt;
	local style = params.style or {}&lt;br /&gt;
&lt;br /&gt;
	if params.separated then -- خيار إضافة فاصل مسبق&lt;br /&gt;
		class = class .. ' bordered'&lt;br /&gt;
		style['border-top'] = '1px solid' .. maincolor&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ترتيب البيانات&lt;br /&gt;
	params.previousval = params.previousval or params.previousparameter &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, conjtype='&amp;lt;br /&amp;gt;'}&lt;br /&gt;
	end&lt;br /&gt;
	if params.nextproperty then&lt;br /&gt;
		params.nextwikidata = {property = params.nextproperty, conjtype='&amp;lt;br /&amp;gt;'}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')&lt;br /&gt;
	local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')&lt;br /&gt;
	&lt;br /&gt;
	local navbox&lt;br /&gt;
	if params.inner then -- في حالة التواجد داخل الجدول&lt;br /&gt;
		navbox = mw.html.create('tr'):tag('th'):attr('colspan', 2)&lt;br /&gt;
		style['font-weight'] = style['font-weight'] or 'normal'&lt;br /&gt;
	else&lt;br /&gt;
		navbox = mw.html.create('div')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local prevNode, nextNode&lt;br /&gt;
	if previousval then&lt;br /&gt;
		prevNode = mw.html.create('div')&lt;br /&gt;
				:addClass('prev_bloc')&lt;br /&gt;
				:wikitext(previousval)&lt;br /&gt;
				:done()		&lt;br /&gt;
	end&lt;br /&gt;
	if nextval then&lt;br /&gt;
		nextNode = mw.html.create('div')&lt;br /&gt;
				:addClass('next_bloc')&lt;br /&gt;
				:wikitext(nextval)&lt;br /&gt;
				:done()	&lt;br /&gt;
	end&lt;br /&gt;
	if previousval or nextval then&lt;br /&gt;
		navbox&lt;br /&gt;
			:addClass(class)&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:node(prevNode)&lt;br /&gt;
			:node(nextNode)&lt;br /&gt;
			:allDone()&lt;br /&gt;
		return navbox&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
p.buildNavbox = p.buildnavbox&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 rowI = mw.html.create('tr')&lt;br /&gt;
	&lt;br /&gt;
	cellI = mw.html.create('td')&lt;br /&gt;
			:attr({colspan = '2'})&lt;br /&gt;
			:attr({align = 'center'})&lt;br /&gt;
	&lt;br /&gt;
	local styleT = {}&lt;br /&gt;
	styleT['background-color'] = 'transparent'&lt;br /&gt;
	styleT['width'] = '100%'&lt;br /&gt;
	tabC = mw.html.create('table')&lt;br /&gt;
			:attr({cellspacing = '0'})&lt;br /&gt;
			:addClass('navigation-not-searchable')&lt;br /&gt;
			:css(styleT)&lt;br /&gt;
	&lt;br /&gt;
	local row = mw.html.create('tr')&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 == 'default' then&lt;br /&gt;
		style['background-color'] = '#E6E6E6'&lt;br /&gt;
		arrowLeft = '[[file:Fleche-defaut-droite.png|13px|alt=سابق|link=]]'&lt;br /&gt;
		arrowRight = '[[file:Fleche-defaut-gauche.png|13px|alt=سابق|link=]]'&lt;br /&gt;
	else&lt;br /&gt;
		style['background-color'] = color&lt;br /&gt;
		arrowLeft = '[[file:Fleche-defaut-droite-gris-32.png|13px|alt=لاحق|link=]]'&lt;br /&gt;
		arrowRight = '[[file:Fleche-defaut-gauche-gris-32.png|13px|alt=لاحق|link=]]'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local styleTrans = {}&lt;br /&gt;
	styleTrans['background-color'] = '#F9F9F9'&lt;br /&gt;
&lt;br /&gt;
-- ترتيب البيانات&lt;br /&gt;
	params.previousval = params.previousval or params.previousparameter &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;
	local before = params.value['before'] or getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')&lt;br /&gt;
	local after = params.value['after'] or getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')&lt;br /&gt;
&lt;br /&gt;
	local center = params.value['center']&lt;br /&gt;
--&lt;br /&gt;
	&lt;br /&gt;
	local widthCell = '44%'&lt;br /&gt;
	if center then&lt;br /&gt;
		widthCenter = '28%'&lt;br /&gt;
		widthCell = '29%'&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('td')&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({align = 'right'})&lt;br /&gt;
			:attr({width = '5%'})&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('td')&lt;br /&gt;
			:attr({width = '1%'})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create('td')&lt;br /&gt;
			:attr({align = 'right'})&lt;br /&gt;
			:attr({valign = 'middle'})&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('td')&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({align = 'right'})&lt;br /&gt;
			:attr({width = '5%'})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create('td')&lt;br /&gt;
			:attr({width = '1%'})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedbefore = mw.html.create('td')&lt;br /&gt;
			:attr({align = 'right'})&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&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('td')&lt;br /&gt;
		:attr({width = '1%'})&lt;br /&gt;
		:css(styleTrans)&lt;br /&gt;
		:wikitext('')&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('td')&lt;br /&gt;
			:attr({align = 'center'})&lt;br /&gt;
			:attr({valign = 'middle'})&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('td')&lt;br /&gt;
			:attr({width = '1%'})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&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('td')&lt;br /&gt;
			:attr({align = 'left'})&lt;br /&gt;
			:attr({valign = 'middle'})&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('td')&lt;br /&gt;
			:attr({width = '1%'})&lt;br /&gt;
			:css(style)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedafter = mw.html.create('td')&lt;br /&gt;
			:attr({align = 'left'})&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({width = '5%'})&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('td')&lt;br /&gt;
			:attr({align = 'left'})&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({width = widthCell})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedafter)&lt;br /&gt;
		formattedbefore = mw.html.create('td')&lt;br /&gt;
			:attr({width = '1%'})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&lt;br /&gt;
			:done()&lt;br /&gt;
		row:node(formattedbefore)&lt;br /&gt;
		formattedafter = mw.html.create('td')&lt;br /&gt;
			:attr({align = 'left'})&lt;br /&gt;
			:attr({valign = 'middle'})&lt;br /&gt;
			:attr({width = '5%'})&lt;br /&gt;
			:css(styleTrans)&lt;br /&gt;
			:wikitext('')&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;
p.buildSuccession = p.buildsuccession&lt;br /&gt;
&lt;br /&gt;
function p.buildrow1col(params)&lt;br /&gt;
&lt;br /&gt;
	local value, number =  getValue(params.value, params)&lt;br /&gt;
&lt;br /&gt;
	if (not value) then&lt;br /&gt;
		value, number =  getWikidataValue(params, 'wikidata')&lt;br /&gt;
	end&lt;br /&gt;
	if (not value) and (params.property) then&lt;br /&gt;
		value, number = expandQuery{ property = params.property } &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 == '-' or type(value)== 'nil' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
	local class = params.class&lt;br /&gt;
	local rowcolor&lt;br /&gt;
	if params.color == 'secondcolor' 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['padding'] = '4px'&lt;br /&gt;
	style['text-align'] = 'center'&lt;br /&gt;
	style['background-color'] = rowcolor or '#F9F9F9'&lt;br /&gt;
	style['color'] = '#000000'&lt;br /&gt;
&lt;br /&gt;
	local formattedlabel&lt;br /&gt;
	formattedlabel = mw.html.create('th')&lt;br /&gt;
		:attr({colspan = '2'})&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:wikitext(value)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	local row = mw.html.create('tr')&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;
p.buildRow1Col = p.buildrow1col&lt;br /&gt;
&lt;br /&gt;
function p.buildsubtitle(params)&lt;br /&gt;
	local class = params.class or ''&lt;br /&gt;
	local style = { ['margin-top'] ='-8px',['margin-bottom'] ='10px',&lt;br /&gt;
		['text-align'] = 'center',&lt;br /&gt;
		['font-size'] = '90%',&lt;br /&gt;
		['background-color'] = maincolor,&lt;br /&gt;
		['color'] = thirdcolor,&lt;br /&gt;
		flex= &amp;quot;auto&amp;quot;,&lt;br /&gt;
		width=&amp;quot;100%&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&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;
&lt;br /&gt;
	local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue&lt;br /&gt;
	if text == '-' then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&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;
&lt;br /&gt;
	local title = mw.html.create('div')&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:css(style)&lt;br /&gt;
		:tag('div')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:allDone()&lt;br /&gt;
&lt;br /&gt;
	return title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.buildSubTitle = p.buildsubtitle&lt;br /&gt;
&lt;br /&gt;
function p.buildtable(params)&lt;br /&gt;
	local tab = mw.html.create('table'):css(params.style or {})&lt;br /&gt;
&lt;br /&gt;
	local rows = params.rows&lt;br /&gt;
	&lt;br /&gt;
	-- expand parameters so that we have a list of tables&lt;br /&gt;
	local i = 1&lt;br /&gt;
&lt;br /&gt;
	while (i &amp;lt;= #rows) do &lt;br /&gt;
		local l = rows[i]&lt;br /&gt;
		if type(l) == 'function' then &lt;br /&gt;
			l = l(localdata, localdata.item)&lt;br /&gt;
		end&lt;br /&gt;
		if (type(l) == 'table') and (l.type == 'multi') then&lt;br /&gt;
			table.remove(rows, i)  &lt;br /&gt;
			for j, row in ipairs(l.rows) do&lt;br /&gt;
				table.insert(rows, i + j - 1, row) &lt;br /&gt;
			end&lt;br /&gt;
		elseif type(l) == 'nil' then&lt;br /&gt;
			table.remove(rows, i)&lt;br /&gt;
		elseif type(l) ~= 'table' then &lt;br /&gt;
			return error('أسطر قالب البطاقة (&amp;quot;rows&amp;quot;) على شكل جداول (table), وليست ' .. type(l))&lt;br /&gt;
		else&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	end &lt;br /&gt;
&lt;br /&gt;
	-- CREATE ROW&lt;br /&gt;
	local expandedrows = {}&lt;br /&gt;
	for k, row in ipairs(rows) do&lt;br /&gt;
		local v = p.buildblock(row)&lt;br /&gt;
		if v then&lt;br /&gt;
			table.insert(expandedrows, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (#expandedrows == 0) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	rows = expandedrows&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 {display = 'table-caption'}&lt;br /&gt;
		style['text-align'] = style['text-align'] or 'center'&lt;br /&gt;
		style['color'] = style['color'] or thirdcolor&lt;br /&gt;
		style['background-color'] = style['background-color'] or secondcolor&lt;br /&gt;
&lt;br /&gt;
		title = mw.html.create('caption')&lt;br /&gt;
			:attr({colspan = '2'})&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;
p.buildTable = p.buildtable&lt;br /&gt;
&lt;br /&gt;
function p.buildinvalidblock(args)&lt;br /&gt;
	addMaintenanceCat(defaultcat)&lt;br /&gt;
	local text = ''&lt;br /&gt;
	if type(args) ~= 'table' then&lt;br /&gt;
		text = &amp;quot;لبنات قالب بطاقة يجب أن تكتب على شكل جداول (table)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		text = i18n[&amp;quot;invalid block type&amp;quot;] .. ' : ' .. (args.type or '??')&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
p.buildInvalidBlock = p.buildinvalidblock&lt;br /&gt;
&lt;br /&gt;
function p.buildmap(params)&lt;br /&gt;
&lt;br /&gt;
	local latitude = getValue({'latitude','دائرة العرض','دائرة عرض'})&lt;br /&gt;
	local longitude = getValue({'longitude','خط الطول','خط طول'})&lt;br /&gt;
	&lt;br /&gt;
	local itemid&lt;br /&gt;
	if localdata.item and localdata.item.id then itemid = localdata.item.id end&lt;br /&gt;
		&lt;br /&gt;
	if(not params.ids  and not longitude and not itemid	)		then return end&lt;br /&gt;
	&lt;br /&gt;
	local width = tonumber(params.width) or 260&lt;br /&gt;
	if width &amp;gt; 260 then&lt;br /&gt;
		addMaintenanceCat(&amp;quot;خطأ في بطاقة/صورة بأبعاد كبيرة&amp;quot;)&lt;br /&gt;
		 width = 260&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	newparams = {&lt;br /&gt;
		  ['marker-symbol'] = params.marker or 'marker'&lt;br /&gt;
		, ['marker-color'] = params.markercolor or '#FF0000'&lt;br /&gt;
		, ['marker-size'] =  params.markersize&lt;br /&gt;
		, frameless='yes'&lt;br /&gt;
		, ['width']=width&lt;br /&gt;
		, ['height']=width&lt;br /&gt;
		, ['latitude']= latitude&lt;br /&gt;
		, ['longitude']=  longitude&lt;br /&gt;
		, ['align']='center'&lt;br /&gt;
		, type='mapframe'&lt;br /&gt;
		, item = itemid&lt;br /&gt;
		, ids = params.ids&lt;br /&gt;
		, zoom= params.zoom or params.default_zoom or 9&lt;br /&gt;
		, lang=&amp;quot;ar&amp;quot;&lt;br /&gt;
        , title = mw.title.getCurrentTitle().text&lt;br /&gt;
		--, debug = 1&lt;br /&gt;
	}&lt;br /&gt;
	if params.params and type(params.params) == 'table' then -- بيانات اضافية&lt;br /&gt;
		for i, j in pairs(params.params) do&lt;br /&gt;
			if(not newparams[i]) then newparams[i] = j end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    local f_tag = require('Module:Map')._tag&lt;br /&gt;
	noerr,data = pcall(f_tag,newparams)	&lt;br /&gt;
	if noerr == true&lt;br /&gt;
		then return data&lt;br /&gt;
		else &lt;br /&gt;
			addMaintenanceCat('مقالات بها أخطاء مصدرها وحدة بطاقة')&lt;br /&gt;
			mw.log(&amp;quot;Error from [[Module:Map]] : &amp;quot;..mw.dumpObject(data))&lt;br /&gt;
			return nil &lt;br /&gt;
	end    &lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
p.buildMap = p.buildmap&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) == 'string') then&lt;br /&gt;
		externaltext = externaltext .. value&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
p.buildExternalText = p.buildexternaltext&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 = 'navbar noprint bordered ' .. (params.class or '')&lt;br /&gt;
	local style = params.style or {flex= &amp;quot;auto&amp;quot;;}&lt;br /&gt;
	style['border-top'] = style['border-top'] or '2px dotted ' .. maincolor&lt;br /&gt;
	style['display'] =  'block'&lt;br /&gt;
	&lt;br /&gt;
	local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.name, 'veaction=edit&amp;amp;section=0' ) ) .. ' ' .. i18n['edit'] .. ']'&lt;br /&gt;
		.. ' - [' .. tostring( mw.uri.fullUrl( page.name, 'action=edit&amp;amp;section=0' ) ) .. ' ' .. i18n['edit code'] .. ']'&lt;br /&gt;
&lt;br /&gt;
	local itemlinkstr&lt;br /&gt;
	if localdata.item and  localdata.item.id then&lt;br /&gt;
		itemlinkstr = '[[d:' .. localdata.item.id .. '|' .. i18n['edit item'] .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
	local editstr = backlinkstr&lt;br /&gt;
	if itemlinkstr then&lt;br /&gt;
		editstr = editstr .. ' - ' .. itemlinkstr&lt;br /&gt;
	end&lt;br /&gt;
	local editlinkspan =  mw.html.create('span')&lt;br /&gt;
		:css({['text-align'] = &amp;quot;right&amp;quot;})&lt;br /&gt;
		:addClass('plainlinks')&lt;br /&gt;
		:wikitext(editstr)&lt;br /&gt;
		:done()&lt;br /&gt;
	local doclinkstr = '[[File:Test_Template_Info-Icon_-_Version_(2).svg|30x15px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]'&lt;br /&gt;
&lt;br /&gt;
	local doclinkspan = mw.html.create('span')&lt;br /&gt;
		:css({['text-align'] = &amp;quot;left&amp;quot;,['float'] = &amp;quot;left&amp;quot;})&lt;br /&gt;
		:wikitext(doclinkstr)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	local footer = mw.html.create('p')&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;
p.buildFooter = p.buildfooter&lt;br /&gt;
&lt;br /&gt;
function p.buildblock(block)&lt;br /&gt;
	if type(block) == 'function' then&lt;br /&gt;
		block = block( localdata )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local blocktypes = { -- list of functions for block buildings&lt;br /&gt;
		['invalid'] = p.buildinvalidblock,&lt;br /&gt;
		['external text'] = p.buildexternaltext,&lt;br /&gt;
		['footer'] = p.buildfooter,&lt;br /&gt;
		['images'] = p.buildimages,&lt;br /&gt;
		['map']= p.buildmap,&lt;br /&gt;
		['mixed'] = p.buildrow,&lt;br /&gt;
		['navbox'] = p.buildnavbox,&lt;br /&gt;
		['table'] = p.buildtable,&lt;br /&gt;
		['row'] = p.buildrow,&lt;br /&gt;
		['row1col'] = p.buildrow1col,&lt;br /&gt;
		['succession'] = p.buildsuccession,&lt;br /&gt;
		['text'] = p.buildtext,&lt;br /&gt;
		['title'] = p.buildtitle,&lt;br /&gt;
		['subtitle'] = p.buildsubtitle,&lt;br /&gt;
	}&lt;br /&gt;
	if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then&lt;br /&gt;
		return blocktypes['invalid'](block)&lt;br /&gt;
	end&lt;br /&gt;
	return blocktypes[block.type](block) &lt;br /&gt;
end&lt;br /&gt;
p.buildBlock = p.buildblock&lt;br /&gt;
&lt;br /&gt;
function p.build()&lt;br /&gt;
	&lt;br /&gt;
	localdata = require( 'وحدة:بطاقة/بيانات')&lt;br /&gt;
	item = localdata.item&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 = 'main' -- main infobox of the page, with coordinates displayed in title etc.&lt;br /&gt;
	if page.namespace ~= 0 then&lt;br /&gt;
		infoboxrank = 'secondary'&lt;br /&gt;
	end&lt;br /&gt;
	-- if infobox is linked to another item: rank = secondary&lt;br /&gt;
	if localdata.item and localdata.item.id then&lt;br /&gt;
		local itemlink = mw.wikibase.sitelink(localdata.item.id)&lt;br /&gt;
		local pagetitle = mw.title.getCurrentTitle().text&lt;br /&gt;
		if (itemlink or '') ~= pagetitle then&lt;br /&gt;
			infoboxrank = 'secondary'&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;
	local moduledata = require('وحدة:بطاقة/قالب/' .. localdata.modulename )&lt;br /&gt;
&lt;br /&gt;
	moduledata.name = localdata.modulename&lt;br /&gt;
	localdata.wikimod = moduledata.wikimod or moduledata.wikidatamod or moduledata.wdmod&lt;br /&gt;
	&lt;br /&gt;
	-- defines main color&lt;br /&gt;
	maincolor = localdata['infobox color'] or localdata['لون البطاقة'] or moduledata.maincolor or maincolor&lt;br /&gt;
	secondcolor = moduledata.secondcolor or secondcolor&lt;br /&gt;
	thirdcolor = localdata['text color'] or localdata['لون النص'] or moduledata.thirdcolor or thirdcolor&lt;br /&gt;
	if maincolor:match( '^%x%x%x%x%x%x$' ) or maincolor:match( '^%x%x%x$' ) then&lt;br /&gt;
		maincolor = '#' .. maincolor&lt;br /&gt;
	end&lt;br /&gt;
	if thirdcolor:match ('نعم') or thirdcolor:match( 'true' ) then&lt;br /&gt;
		thirdcolor = '#000'&lt;br /&gt;
	end&lt;br /&gt;
	if thirdcolor:match ('لا') or thirdcolor:match( 'false' ) then&lt;br /&gt;
		thirdcolor = '#fff'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- class&lt;br /&gt;
	local class = 'infobox_v3b mainTable infobox'&lt;br /&gt;
	if moduledata.class then&lt;br /&gt;
		class = class .. ' ' .. moduledata.class&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- style&lt;br /&gt;
	local style = moduledata.style or {}&lt;br /&gt;
&lt;br /&gt;
	-- build infobox&lt;br /&gt;
	-- النتيجة النهائية&lt;br /&gt;
	local infobox = mw.html.create('td') --mw.html.create('div')&lt;br /&gt;
         --:addClass(class)&lt;br /&gt;
         :css({display= &amp;quot;flex&amp;quot;&lt;br /&gt;
         	,[&amp;quot;flex-wrap&amp;quot;]= &amp;quot;wrap&amp;quot;&lt;br /&gt;
         	,[&amp;quot;flex-direction&amp;quot;]= &amp;quot;row&amp;quot;&lt;br /&gt;
         	,[&amp;quot;justify-content&amp;quot;]= &amp;quot;center&amp;quot;&lt;br /&gt;
         	,[&amp;quot;align-items&amp;quot;]= &amp;quot;center&amp;quot;}) &lt;br /&gt;
         :done()&lt;br /&gt;
&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;
    infobox=mw.html.create('table')&lt;br /&gt;
          :addClass(class)&lt;br /&gt;
         :css(style)&lt;br /&gt;
         :node(infobox)&lt;br /&gt;
         :done()&lt;br /&gt;
         &lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag( 'templatestyles', '', &lt;br /&gt;
		{src = &amp;quot;بطاقة/infobox v3b/styles.css&amp;quot;})&lt;br /&gt;
		..mw.getCurrentFrame():extensionTag( 'templatestyles', '', { src = &amp;quot;بطاقة/icones.css&amp;quot;}&lt;br /&gt;
	)&lt;br /&gt;
	;&lt;br /&gt;
	return templatestyles .. tostring(infobox) .. externaltext, maintenance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p['تركيب'] = p.build&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Gerges</name></author>
	</entry>
</feed>