Modifica di Modulo:Infobox

Vai alla navigazione Vai alla ricerca
Attenzione: non hai effettuato l'accesso. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se accedi o crei un'utenza, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.

Questa modifica può essere annullata. Controlla le differenze mostrate sotto fra le due versioni per essere certo che il contenuto corrisponda a quanto desiderato, e quindi pubblicare le modifiche per completare la procedura di annullamento.

Versione attuale Il tuo testo
Riga 1: Riga 1:
local p = {}
-- Modulo per implementare le funzionalità di infobox
local args = {}
local p = {} -- per l'esportazione delle funzioni del modulo
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false


local function fixChildBoxes(sval, tt)
local args = {}-- variabile che contiene gli argomenti passati al template
local function notempty( s ) return s and s:match( '%S' ) end
local origArgs
local root -- radice del markup html
if notempty(sval) then
local dump = {}
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
 
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
 
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)


local vals = {}
local function checkList(valore)
for k, v in pairs(t1) do
-- Permette al software Mediawiki di gestire le liste # o *
vals[v] = true
local c = mw.ustring.sub(valore, 1, 1)
end
if c == '#' or c == '*' then
for k, v in pairs(t2) do
valore = '<div>\n' .. valore .. '\n</div>'
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
end
return ret
return valore .. '\n'
end
end


-- Returns a table containing the numbers of the arguments that exist
local function getArgNums(...)
-- for the specified prefix. For example, if the prefix was 'data', and
-- Restituisce una lista che contiene il suffisso numerico  di tutti gli argomenti
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
-- che iniziano con il prefisso "prefix"
local function getArgNums(prefix)
-- Per esempio se nella lista argomenti sono valorizzati "Valore1, Valore2 e Valore4"
-- retistuirà la lista [1, 2, 4]
local prefixs = {...}
local nums = {}
local nums = {}
for k, v in pairs(args) do
for k, _ in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
local num = nil
for _, candidate in ipairs(prefixs) do
num = ('' .. k):match('^' .. candidate .. '(%d+)$')
if num ~= nil then break end
end
if num then table.insert(nums, tonumber(num)) end
if num then table.insert(nums, tonumber(num)) end
end
end
Riga 106: Riga 35:
end
end


-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
local function addRow(rowArgs)
-- Aggiunge una riga alla tabella
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
-- Se rowArgs.gruppo non è nullo la considera come una riga di testata di gruppo
has_rows = true
-- e ignora eventuali valorizzazioni di rowArgs.valore
if rowArgs.gruppo then
root
root
:tag('tr')
:tag('tr')
:addClass(rowArgs.rowclass)
:addClass("sinottico_divisione")
:cssText(rowArgs.rowstyle)
:tag('th')
:tag('th')
:attr('colspan', '2')
:attr('colspan', 2)
:addClass('infobox-header')
:cssText(rowArgs.stile or args.StileGruppo or '')
:addClass(rowArgs.class)
:wikitext(rowArgs.gruppo)
:addClass(args.headerclass)
-- Altrimenti se rowArgs.valore non è nullo inserisce una riga dati, verificando
-- @deprecated next; target .infobox-<name> .infobox-header
-- se esiste o meno la testata
:cssText(args.headerstyle)
elseif rowArgs.valore then
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
has_rows = true
local row = root:tag('tr')
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
local dataCell
row:cssText(rowArgs.rowstyle)
if rowArgs.nome then
if rowArgs.label then
row
row
:tag('th')
:tag('th')
:attr('scope', 'row')
:cssText(args.StileNome or '')
:addClass('infobox-label')
:wikitext(rowArgs.nome)
-- @deprecated next; target .infobox-<name> .infobox-label
dataCell = row:tag('td')
:cssText(args.labelstyle)
else
:cssText(rowArgs.rowcellstyle)
dataCell = row:tag('td')
:wikitext(rowArgs.label)
:addClass('sinottico_testo_centrale')
:done()
:attr('colspan', 2)
end
end
local dataCell = row:tag('td')
dataCell
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(rowArgs.classe or '')
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:cssText(args.StileValore or '')
:addClass(rowArgs.class)
:wikitext(checkList(rowArgs.valore))
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
end
end


local function renderTitle()
local function renderTitle()
if not args.title then return end
local suptitle = mw.html.create('')
 
if args.SopraTitolo then
has_rows = true
suptitle
root
:tag('span')
:tag('caption')
:addClass('sinottico_sottotitolo')
:addClass('infobox-title')
:cssText(args.StileSopraTitolo or '')
:addClass(args.titleclass)
:wikitext(args.SopraTitolo)
-- @deprecated next; target .infobox-<name> .infobox-title
:done()
:cssText(args.titlestyle)
:tag('br'):done()
:wikitext(args.title)
end
end
local subtitle = mw.html.create('')
 
if args.SottoTitolo then
local function renderAboveRow()
subtitle
if not args.above then return end
:tag('br'):done()
 
:tag('span')
has_rows = true
:addClass('sinottico_sottotitolo')
root
:cssText(args.StileSottoTitolo or '')
:tag('tr')
:wikitext(args.SottoTitolo)
end
if args.TitoloEst then
root
:tag('caption')
:addClass('sinottico_testata')
:cssText(args.StileTitoloEst or '')
:node(suptitle)
:wikitext(args.TitoloEst)
:node(subtitle)
elseif args.TitoloInt then
root
:tag('tr')
:addClass('sinottico_testata')
:tag('th')
:tag('th')
:attr('colspan', '2')
:attr('colspan', '2')
:addClass('infobox-above')
:node(suptitle)
:addClass(args.aboveclass)
:cssText(args.StileTitoloInt or '')
-- @deprecated next; target .infobox-<name> .infobox-above
:wikitext(args.TitoloInt)
:cssText(args.abovestyle)
:node(subtitle)
:wikitext(fixChildBoxes(args.above,'th'))
end
 
local function renderBelowRow()
if not args.below then return end
 
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
 
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
 
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
end
end


local function renderSubheaders()
local function renderImage()
if args.subheader then
if not args.Immagine then return end
args.subheader1 = args.subheader
local cell_immagine = mw.html.create('td')
end
cell_immagine
if args.subheaderrowclass then
:addClass('sinottico_testo_centrale ' .. (args.ClasseImmagine or ''))
args.subheaderrowclass1 = args.subheaderrowclass
:attr('colspan', '2')
end
:cssText(args.StileImmagine or '')
local subheadernums = getArgNums('subheader')
:wikitext(args.Immagine)
for k, num in ipairs(subheadernums) do
if args.Didascalia then
addSubheaderRow({
cell_immagine
data = args['subheader' .. tostring(num)],
:tag('br', {selfClosing = true})
-- @deprecated next; target .infobox-<name> .infobox-subheader
:done()
datastyle = args.subheaderstyle,
:tag('span')
rowcellstyle = args['subheaderstyle' .. tostring(num)],
:cssText(args.StileDidascalia or '')
class = args.subheaderclass,
:wikitext(args.Didascalia)
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
root:tag('tr'):node(cell_immagine)
end
end


local function addImageRow(imageArgs)


if imageArgs.data and
local function renderRows()
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
local rownums = getArgNums('Valore', 'GruppoOpzionale', 'Gruppo')
 
has_rows = true
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
 
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
 
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
 
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
local skip = false
if lastheader then
if args['GruppoOpzionale' .. num] ~= nil then
args['header' .. tostring(lastheader)] = nil
skip = true
end
for j = k+1, #rownums do
lastheader = num
if args['Gruppo' .. rownums[j]] ~= nil or args['GruppoOpzionale' .. rownums[j]]~=nil then break end
elseif args['data' .. tostring(num)] and
if args['Valore' .. rownums[j]] ~= nil then
args['data' .. tostring(num)]:gsub(
skip = false
category_in_empty_row_pattern, ''
break
):match('^%S') then
end
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
end
end
if not skip and args['GruppoOpzionale' .. num] ~= '$fine' then
if lastheader then
addRow({
args['header' .. tostring(lastheader)] = nil
gruppo = args['GruppoOpzionale' .. num] or args['Gruppo' .. num],
nome = args['Nome' .. num],
valore = args['Valore' .. num],
classe = args['Classe' .. num],
stile = args['GruppoStile' .. num]
})
end
end
end
end
end


-- Gets the union of the header and data argument numbers,
local function renderLastRow()
-- and renders them all in order
if not args.Ultima then return end
local function renderRows()
root
 
:tag('tr')
local rownums = union(getArgNums('header'), getArgNums('data'))
:tag('td')
table.sort(rownums)
:attr('colspan', '2')
for k, num in ipairs(rownums) do
:addClass('sinottico_piede')
addRow({
:cssText(args.StileUltima or '')
header = args['header' .. tostring(num)],
:wikitext(args.Ultima)
label = args['label' .. tostring(num)],
:newline()
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
end


local function renderNavBar()
local function renderNavBar()
if not args.name then return end
if not args.NomeTemplate then return end
 
has_rows = true
root
root
:tag('tr')
:tag('tr')
:tag('td')
:tag('td')
:addClass('sinottico_piede2 noprint nomobile metadata')
:attr('colspan', '2')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(mw.getCurrentFrame():expandTemplate({
:wikitext(require('Module:Navbar')._navbar{
title = 'Link sinottico',
args.name,
args = args.LinkWikidata and
mini = 1,
{ args.NomeTemplate } or
})
{ args.NomeTemplate, nowd = 1 }
end
}))
 
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
end
end
end


-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
base_templatestyles, -- see function description
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
local function _infobox()
if args.child ~= 'yes' then
-- Crea l'albero html che rappresenta la tabella del sinottico e restituisce il markup
if args.CreaTable == 'no' then
root = mw.html.create('')
else
root = mw.html.create('table')
root = mw.html.create('table')
root
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass('sinottico')
:addClass(args.bodyclass)
:cssText(args.StileTabella or '')
-- @deprecated next; target .infobox-<name>
:attr('summary', args.Summary or 'Tabella sinottica che riassume i principali dati del soggetto')
:cssText(args.bodystyle)
 
renderTitle()
renderAboveRow()
else
root = mw.html.create()
 
root
:wikitext(args.title)
end
end
structure_infobox_common()
renderTitle()
renderImage()
return loadTemplateStyles() .. root
renderRows()
renderLastRow()
renderNavBar()
return tostring(root)
end
end


-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
local function preprocessSingleArg(argName)
-- Se l'argomento esiste e non è una stringa vuota lo aggiunge alla tabella degli argomenti
-- Argomenti uguali a stringa vuota sono trattati come nulli come da comportamento
-- precedente del template {{Infobox}}
if origArgs[argName] and origArgs[argName] ~= '' then
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
args[argName] = origArgs[argName]
Riga 482: Riga 212:
end
end


-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
local function preprocessArgs(prefixTable, step)
-- Assegna i parametri con i dati prefissi alla tabella args, in ordine e secondo lotti di
-- dimensione specificata. La prefixTable dovrebbe essere un  array contenente tabelle, ognuna
-- delle quali con due possibili campi, una stringa "prefisso" e una tabella di "dipendenze". La
-- funsione esamina tutti i parametri contenenti la stringa prefisso, ma esamina quelli della
-- tabella dipendenti solo se il prefisso da cui dipendono è presente e non nullo.
if type(prefixTable) ~= 'table' then
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
error("Valore non tabella trovato nella tabella prefissi", 2)
end
end
if type(step) ~= 'number' then
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
error("Passo di tipo non valido", 2)
end
end


-- Get arguments without a number suffix, and check for bad input.
-- Ottiene gli argmenti senza un suffisso numerico e controlla per input errati.
for i,v in ipairs(prefixTable) do
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then
(v.depend and type(v.depend) ~= 'table') then
error('Valori non validi riscontrati per la tabella di prefissi preprocessArgs', 2)
error('Invalid input detected to preprocessArgs prefix table', 2)
end
end
preprocessSingleArg(v.prefix)
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- Esamina i parametri dipendenti solo se il parametro prefisso è presente e non nullo.
-- and not blank.
if args[v.prefix] and v.depend then
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
error('Parametro "dipendente" non valido riscontrato in preprocessArgs')
end
end
preprocessSingleArg(dependValue)
preprocessSingleArg(dependValue)
Riga 515: Riga 241:
end
end
end
end
 
if step == 0 then return end
-- Get arguments with number suffixes.
-- Estrae gli argomenti con un suffisso numerico
local a = 1 -- Counter variable.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
local moreArgumentsExist = true
Riga 525: Riga 251:
local prefixArgName = v.prefix .. tostring(i)
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true -- Aggiunge una passata se un parametro è stato trovato, anche se nullo.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
preprocessSingleArg(prefixArgName)
end
end
-- Process the depend table if the prefix argument is present
-- Processa la tavola dei dipendenti  se il parametro da cui dipendono esiste e non è nullo
-- and not blank, or we are processing "prefix1" and "prefix" is
if v.depend and args[prefixArgName] then
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
local dependArgName = dependValue .. tostring(i)
Riga 544: Riga 267:
end
end


-- Parse the data parameters in the same order that the old {{infobox}} did, so
function p.infobox(frame)
-- that references etc. will display in the expected places. Parameters that
-- Se chiamata mediante  #invoke, usa gli argomenti passati al template invocante.
-- depend on another parameter are only processed if that parameter is present,
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
-- to avoid phantom references appearing in article reference lists.
if frame == mw.getCurrentFrame() then
local function parseDataParameters()
origArgs = frame:getParent().args
else
origArgs = frame.args
end


preprocessSingleArg('autoheaders')
-- Le funzioni Parser considerano la stringa vuota come falsa, così per preservare il
preprocessSingleArg('child')
-- comportamento di {{infobox}} tutti gli argomenti vuoti non vengono memorizzati
preprocessSingleArg('bodyclass')
-- nella tabella globale args, così da essere considerati falsi
preprocessSingleArg('subbox')
-- Nota: args è una variabile globale per il modulo dichiarata al suo inizio
preprocessSingleArg('bodystyle')
-- Scandisce i parametri nello stesso ordine in cui lo faceva il vecchio {{infobox}}
preprocessSingleArg('title')
-- così che eventuali istruzioni ref compariranno in posizione e ordine corretto. Parametri che dipendono da
preprocessSingleArg('titleclass')
-- altri parametri sono processati solo se il parametro è presente, così da evitare
preprocessSingleArg('titlestyle')
-- la comparsa di riferimenti fantasma in posti inattesi.
preprocessSingleArg('above')
preprocessSingleArg('StileTabella')
preprocessSingleArg('aboveclass')
preprocessArgs({
preprocessSingleArg('abovestyle')
{prefix='SopraTitolo', depend={'StileSopraTitolo'}}
}, 0)
preprocessArgs({
{prefix='TitoloEst', depend={'StileTitoloEst'}}
}, 0)
preprocessArgs({
{prefix='TitoloInt', depend={'StileTitoloInt'}}
}, 0)
preprocessArgs({
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
{prefix='SottoTitolo', depend={'StileSottoTitolo'}}
}, 10)
}, 0)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
{prefix='Immagine', depend={'ClasseImmagine', 'StileImmagine',
}, 10)
'Didascalia', 'StileDidascalia'}}
preprocessSingleArg('captionstyle')
}, 0)
preprocessSingleArg('imagestyle')
preprocessSingleArg('StileGruppo')
preprocessSingleArg('imageclass')
preprocessSingleArg('StileNome')
preprocessSingleArg('StileValore')
preprocessArgs({
preprocessArgs({
{prefix = 'header'},
{prefix = 'Gruppo', depend={'GruppoStile'}},
{prefix = 'data', depend = {'label'}},
{prefix = 'GruppoOpzionale', depend={'GruppoStile'}},
{prefix = 'rowclass'},
{prefix = 'Valore', depend={'Nome', 'Classe'}},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('Ultima')
preprocessSingleArg('headerstyle')
preprocessSingleArg('StileUltima')
preprocessSingleArg('labelstyle')
preprocessSingleArg('NomeTemplate')
preprocessSingleArg('datastyle')
preprocessSingleArg('LinkWikidata')
preprocessSingleArg('below')
preprocessSingleArg('CreaTable')
preprocessSingleArg('belowclass')
preprocessSingleArg('Summary')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
 
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
return _infobox()
end
end


-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
return p
Per favore tieni presente che tutti i contributi a Tematiche di genere si considerano pubblicati nei termini d'uso della licenza Creative Commons Attribuzione-Condividi allo stesso modo (vedi Tematiche di genere:Copyright per maggiori dettagli). Se non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.
Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera. Non inviare materiale protetto da copyright senza autorizzazione!
Annulla Guida (si apre in una nuova finestra)

Template utilizzato in questa pagina: