<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://gears.worldongames.it/quattrogatti/index.php?action=history&amp;feed=atom&amp;title=Modulo%3AInfobox</id>
	<title>Modulo:Infobox - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://gears.worldongames.it/quattrogatti/index.php?action=history&amp;feed=atom&amp;title=Modulo%3AInfobox"/>
	<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Infobox&amp;action=history"/>
	<updated>2026-05-19T06:30:15Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Infobox&amp;diff=18&amp;oldid=prev</id>
		<title>GughyXIV: una versione importata</title>
		<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Infobox&amp;diff=18&amp;oldid=prev"/>
		<updated>2022-10-04T12:56:54Z</updated>

		<summary type="html">&lt;p&gt;una versione importata&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;it&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versione meno recente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versione delle 14:56, 4 ott 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;it&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nessuna differenza)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>GughyXIV</name></author>
	</entry>
	<entry>
		<id>https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Infobox&amp;diff=17&amp;oldid=prev</id>
		<title>wikipedia&gt;Daimona Eaytoy: Passa nil anziché la stringa vuota a cssText e addClass, così da non inserire attributi &quot;style&quot; o &quot;class&quot; vuoti.</title>
		<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Infobox&amp;diff=17&amp;oldid=prev"/>
		<updated>2022-09-26T20:54:03Z</updated>

		<summary type="html">&lt;p&gt;Passa nil anziché la stringa vuota a cssText e addClass, così da non inserire attributi &amp;quot;style&amp;quot; o &amp;quot;class&amp;quot; vuoti.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Modulo per implementare le funzionalità di infobox&lt;br /&gt;
local p = {} -- per l'esportazione delle funzioni del modulo&lt;br /&gt;
&lt;br /&gt;
local args = {}-- variabile che contiene gli argomenti passati al template&lt;br /&gt;
local origArgs&lt;br /&gt;
local root -- radice del markup html&lt;br /&gt;
local dump = {}&lt;br /&gt;
&lt;br /&gt;
local function checkList(valore)&lt;br /&gt;
	-- Permette al software Mediawiki di gestire le liste # o *&lt;br /&gt;
	local c = mw.ustring.sub(valore, 1, 1)&lt;br /&gt;
	if c == '#' or c == '*' then&lt;br /&gt;
		valore = '&amp;lt;div&amp;gt;\n' .. valore .. '\n&amp;lt;/div&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	return valore .. '\n'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(...)&lt;br /&gt;
	-- Restituisce una lista che contiene il suffisso numerico  di tutti gli argomenti&lt;br /&gt;
	-- che iniziano con il prefisso &amp;quot;prefix&amp;quot;&lt;br /&gt;
	-- Per esempio se nella lista argomenti sono valorizzati &amp;quot;Valore1, Valore2 e Valore4&amp;quot;&lt;br /&gt;
	-- retistuirà la lista [1, 2, 4]&lt;br /&gt;
	local prefixs = {...}&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		local num = nil&lt;br /&gt;
		for _, candidate in ipairs(prefixs) do&lt;br /&gt;
			num = ('' .. k):match('^' .. candidate .. '(%d+)$')&lt;br /&gt;
			if num ~= nil then break end&lt;br /&gt;
		end&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addRow(rowArgs)&lt;br /&gt;
	-- Aggiunge una riga alla tabella&lt;br /&gt;
	-- Se rowArgs.gruppo non è nullo la considera come una riga di testata di gruppo&lt;br /&gt;
	-- e ignora eventuali valorizzazioni di rowArgs.valore&lt;br /&gt;
	if rowArgs.gruppo then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('tr')&lt;br /&gt;
				:addClass(&amp;quot;sinottico_divisione&amp;quot;)&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:attr('colspan', 2)&lt;br /&gt;
					:cssText(rowArgs.stilegruppoN or args.StileGruppo or nil)&lt;br /&gt;
					:wikitext(rowArgs.gruppo)&lt;br /&gt;
	-- Altrimenti se rowArgs.valore non è nullo inserisce una riga dati, verificando&lt;br /&gt;
	-- se esiste o meno la testata&lt;br /&gt;
	elseif rowArgs.valore then&lt;br /&gt;
		local row = root:tag('tr')&lt;br /&gt;
		local dataCell&lt;br /&gt;
		if rowArgs.nome then&lt;br /&gt;
			row&lt;br /&gt;
				:tag('th')&lt;br /&gt;
					:cssText(rowArgs.stilenomeN or args.StileNome or nil)&lt;br /&gt;
					:wikitext(rowArgs.nome)&lt;br /&gt;
			dataCell = row:tag('td')&lt;br /&gt;
		else&lt;br /&gt;
			dataCell = row:tag('td')&lt;br /&gt;
				:addClass('sinottico_testo_centrale')&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
		end&lt;br /&gt;
		dataCell&lt;br /&gt;
			:addClass(rowArgs.classe or nil)&lt;br /&gt;
			:cssText(rowArgs.stilevaloreN or args.StileValore or nil)&lt;br /&gt;
			:wikitext(checkList(rowArgs.valore))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
	local suptitle = mw.html.create('')&lt;br /&gt;
	if args.SopraTitolo then&lt;br /&gt;
		suptitle&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:addClass('sinottico_sottotitolo')&lt;br /&gt;
				:cssText(args.StileSopraTitolo or nil)&lt;br /&gt;
				:wikitext(args.SopraTitolo)&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag('br'):done()&lt;br /&gt;
	end&lt;br /&gt;
	local subtitle = mw.html.create('')&lt;br /&gt;
	if args.SottoTitolo then&lt;br /&gt;
		subtitle&lt;br /&gt;
			:tag('br'):done()&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:addClass('sinottico_sottotitolo')&lt;br /&gt;
				:cssText(args.StileSottoTitolo or nil)&lt;br /&gt;
				:wikitext(args.SottoTitolo)&lt;br /&gt;
	end&lt;br /&gt;
	if args.TitoloEst then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('caption')&lt;br /&gt;
			:addClass('sinottico_testata')&lt;br /&gt;
			:cssText(args.StileTitoloEst or nil)&lt;br /&gt;
			:node(suptitle)&lt;br /&gt;
			:wikitext(args.TitoloEst)&lt;br /&gt;
			:node(subtitle)&lt;br /&gt;
	elseif args.TitoloInt then&lt;br /&gt;
		root&lt;br /&gt;
			:tag('tr')&lt;br /&gt;
			:addClass('sinottico_testata')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:node(suptitle)&lt;br /&gt;
				:cssText(args.StileTitoloInt or nil)&lt;br /&gt;
				:wikitext(args.TitoloInt)&lt;br /&gt;
				:node(subtitle)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImage()&lt;br /&gt;
	if not args.Immagine then return end&lt;br /&gt;
	local cell_immagine = mw.html.create('td')&lt;br /&gt;
	cell_immagine&lt;br /&gt;
		:addClass('sinottico_testo_centrale ' .. (args.ClasseImmagine or ''))&lt;br /&gt;
		:attr('colspan', '2')&lt;br /&gt;
		:cssText(args.StileImmagine or nil)&lt;br /&gt;
		:wikitext(args.Immagine)&lt;br /&gt;
	 if args.Didascalia then&lt;br /&gt;
		cell_immagine&lt;br /&gt;
			:tag('br', {selfClosing = true})&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag('span')&lt;br /&gt;
			:cssText(args.StileDidascalia or nil)&lt;br /&gt;
			:wikitext(args.Didascalia)&lt;br /&gt;
	end&lt;br /&gt;
	root:tag('tr'):node(cell_immagine)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
	local rownums = getArgNums('Valore', 'GruppoOpzionale',  'Gruppo')&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		local skip = false&lt;br /&gt;
		if args['GruppoOpzionale' .. num] ~= nil then&lt;br /&gt;
			skip = true&lt;br /&gt;
			for j = k+1, #rownums do&lt;br /&gt;
				if args['Gruppo' .. rownums[j]] ~= nil or args['GruppoOpzionale' .. rownums[j]]~=nil then break end&lt;br /&gt;
				if args['Valore' .. rownums[j]] ~= nil then&lt;br /&gt;
					skip = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not skip and args['GruppoOpzionale' .. num] ~= '$fine' then&lt;br /&gt;
			addRow({&lt;br /&gt;
				gruppo = args['GruppoOpzionale' .. num] or args['Gruppo' .. num],&lt;br /&gt;
				nome = args['Nome' .. num],&lt;br /&gt;
				valore = args['Valore' .. num],&lt;br /&gt;
				classe = args['Classe' .. num],&lt;br /&gt;
				stilegruppoN = args['GruppoStile' .. num],&lt;br /&gt;
				stilenomeN = args['NomeStile' .. num],&lt;br /&gt;
				stilevaloreN = args['ValoreStile' .. num]&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderLastRow()&lt;br /&gt;
	if not args.Ultima then return end&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:addClass('sinottico_piede')&lt;br /&gt;
				:cssText(args.StileUltima or nil)&lt;br /&gt;
				:wikitext(args.Ultima)&lt;br /&gt;
				:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
	if not args.NomeTemplate then return end&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('sinottico_piede2 noprint nomobile metadata')&lt;br /&gt;
				:attr('colspan', '2')&lt;br /&gt;
				:wikitext(mw.getCurrentFrame():expandTemplate({&lt;br /&gt;
					title = 'Link sinottico',&lt;br /&gt;
					args = args.LinkWikidata and&lt;br /&gt;
							{ args.NomeTemplate } or&lt;br /&gt;
							{ args.NomeTemplate, nowd = 1 }&lt;br /&gt;
				}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
	-- Crea l'albero html che rappresenta la tabella del sinottico e restituisce il markup&lt;br /&gt;
	if args.CreaTable == 'no' then&lt;br /&gt;
		root = mw.html.create('')&lt;br /&gt;
	else&lt;br /&gt;
		root = mw.html.create('table')&lt;br /&gt;
		root&lt;br /&gt;
			:addClass('sinottico')&lt;br /&gt;
			:cssText(args.StileTabella or nil)&lt;br /&gt;
			:attr('summary', args.Summary or 'Tabella sinottica che riassume i principali dati del soggetto')&lt;br /&gt;
	end&lt;br /&gt;
	renderTitle()&lt;br /&gt;
	renderImage()&lt;br /&gt;
	renderRows()&lt;br /&gt;
	renderLastRow()&lt;br /&gt;
	renderNavBar()&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
	-- Se l'argomento esiste e non è una stringa vuota lo aggiunge alla tabella degli argomenti&lt;br /&gt;
	-- Argomenti uguali a stringa vuota sono trattati come nulli come da comportamento&lt;br /&gt;
	-- precedente del template {{Infobox}}&lt;br /&gt;
	if origArgs[argName] and origArgs[argName] ~= '' then&lt;br /&gt;
		args[argName] = origArgs[argName]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
	-- Assegna i parametri con i dati prefissi alla tabella args, in ordine e secondo lotti di&lt;br /&gt;
	-- dimensione specificata. La prefixTable dovrebbe essere un  array contenente tabelle, ognuna&lt;br /&gt;
	-- delle quali con due possibili campi, una stringa &amp;quot;prefisso&amp;quot; e una tabella di &amp;quot;dipendenze&amp;quot;. La&lt;br /&gt;
	-- funsione esamina tutti i parametri contenenti la stringa prefisso, ma esamina quelli della&lt;br /&gt;
	-- tabella dipendenti solo se il prefisso da cui dipendono è presente e non nullo.&lt;br /&gt;
	if type(prefixTable) ~= 'table' then&lt;br /&gt;
		error(&amp;quot;Valore non tabella trovato nella tabella prefissi&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(step) ~= 'number' then&lt;br /&gt;
		error(&amp;quot;Passo di tipo non valido&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Ottiene gli argmenti senza un suffisso numerico e controlla per input errati.&lt;br /&gt;
	for i,v in ipairs(prefixTable) do&lt;br /&gt;
		if type(v) ~= 'table' or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= 'table') then&lt;br /&gt;
			error('Valori non validi riscontrati per la tabella di prefissi preprocessArgs', 2)&lt;br /&gt;
		end&lt;br /&gt;
		preprocessSingleArg(v.prefix)&lt;br /&gt;
		-- Esamina i parametri dipendenti solo se il parametro prefisso è presente e non nullo.&lt;br /&gt;
		if args[v.prefix] and v.depend then&lt;br /&gt;
			for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
				if type(dependValue) ~= 'string' then&lt;br /&gt;
					error('Parametro &amp;quot;dipendente&amp;quot;  non valido riscontrato in preprocessArgs')&lt;br /&gt;
				end&lt;br /&gt;
				preprocessSingleArg(dependValue)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if step == 0 then return end&lt;br /&gt;
	-- Estrae gli argomenti con un suffisso numerico&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a, a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(prefixTable) do&lt;br /&gt;
				local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
				if origArgs[prefixArgName] then&lt;br /&gt;
					moreArgumentsExist = true -- Aggiunge una passata se un parametro è stato trovato, anche se nullo.&lt;br /&gt;
					preprocessSingleArg(prefixArgName)&lt;br /&gt;
				end&lt;br /&gt;
				-- Processa la tavola dei dipendenti  se il parametro da cui dipendono esiste e non è nullo&lt;br /&gt;
				if v.depend and args[prefixArgName] then&lt;br /&gt;
					for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
						local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
						preprocessSingleArg(dependArgName)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	-- Se chiamata mediante  #invoke, usa gli argomenti passati al template invocante.&lt;br /&gt;
	-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame.args&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Le funzioni Parser considerano la stringa vuota come falsa, così per preservare il&lt;br /&gt;
	-- comportamento di {{infobox}} tutti gli argomenti vuoti non vengono memorizzati&lt;br /&gt;
	-- nella tabella globale args, così da essere considerati falsi&lt;br /&gt;
	-- Nota: args è una variabile globale per il modulo dichiarata al suo inizio&lt;br /&gt;
	-- Scandisce i parametri nello stesso ordine in cui lo faceva il vecchio {{infobox}}&lt;br /&gt;
	-- così che eventuali istruzioni ref compariranno in posizione e ordine corretto. Parametri che dipendono da&lt;br /&gt;
	-- altri parametri sono processati solo se il parametro è presente, così da evitare&lt;br /&gt;
	-- la comparsa di riferimenti fantasma in posti inattesi.&lt;br /&gt;
	preprocessSingleArg('StileTabella')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix='SopraTitolo', depend={'StileSopraTitolo'}}&lt;br /&gt;
		}, 0)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix='TitoloEst', depend={'StileTitoloEst'}}&lt;br /&gt;
		 }, 0)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix='TitoloInt', depend={'StileTitoloInt'}}&lt;br /&gt;
		}, 0)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix='SottoTitolo', depend={'StileSottoTitolo'}}&lt;br /&gt;
		}, 0)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix='Immagine', depend={'ClasseImmagine', 'StileImmagine',&lt;br /&gt;
						'Didascalia', 'StileDidascalia'}}&lt;br /&gt;
		}, 0)&lt;br /&gt;
	preprocessSingleArg('StileGruppo')&lt;br /&gt;
	preprocessSingleArg('StileNome')&lt;br /&gt;
	preprocessSingleArg('StileValore')&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = 'Gruppo', depend={'GruppoStile'}},&lt;br /&gt;
		{prefix = 'GruppoOpzionale', depend={'GruppoStile'}},&lt;br /&gt;
		{prefix = 'Valore', depend={'Nome', 'Classe', 'NomeStile', 'ValoreStile'}},&lt;br /&gt;
	}, 50)&lt;br /&gt;
	preprocessSingleArg('Ultima')&lt;br /&gt;
	preprocessSingleArg('StileUltima')&lt;br /&gt;
	preprocessSingleArg('NomeTemplate')&lt;br /&gt;
	preprocessSingleArg('LinkWikidata')&lt;br /&gt;
	preprocessSingleArg('CreaTable')&lt;br /&gt;
	preprocessSingleArg('Summary')&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;Daimona Eaytoy</name></author>
	</entry>
</feed>