"ମଡ୍ୟୁଲ:Infobox" ପୃଷ୍ଠାର ସଂସ୍କରଣ‌ଗୁଡ଼ିକ ମଧ୍ୟରେ ତଫାତ

Content deleted Content added
ଟିକେ Protected Module:Infobox: High-risk Lua module ([Edit=Block all non-admin users] (indefinite) [Move=Block all non-admin users] (indefinite))
fix phantom reference bug
୭ କ ଧାଡ଼ି:
local HtmlBuilder = require('Module:HtmlBuilder')
local args = {}
local origArgs
local root
Line ୨୬୩ ⟶ ୨୬୪:
end
 
local function touchParameterspreprocessSingleArg(prefixTable, origArgs, stepargName)
-- ParseIf the parametersargument withexists theand givenisn't prefixesblank, inadd order,it into the batchesargument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
-- of the step size specified. This is to prevent references etc. from
if origArgs[argName] and origArgs[argName] ~= '' then
-- appearing in the wrong order.
args[argName] = origArgs[argName]
if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then
error("Invalid input to the touchParameters function detected. Both parameters must be tables.", 2)
end
end
if step and type(step) ~= 'number' then
 
error("Non-numerical step value detected.", 2)
local function preprocessArgs(prefixTable, step)
-- 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.
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
step = step or 20 -- If the step size is not given, the default is 20.
for i,v in ipairs(prefixTable) do
local temp
if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then
local a = 1 -- Counter variable.
error('Invalid input detected to preprocessArgs prefix table', 2)
local moreArgumentsExist = true
for j,v in ipairs(prefixTable) doend
if not typepreprocessSingleArg(v.prefix) == "string" then
-- Only parse the error("Non-stringdepend valueparameter detected inif the prefix tableparameter inis thepresent touchParametersand function.",not 2)blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
temp = origArgs[v]
end
 
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
templocal prefixArgName = origArgs[v.prefix .. tostring(i)]
if temporigArgs[prefixArgName] then
moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present and not blank, or
-- we are processing "prefix1" and "prefix" is 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
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
Line ୨୯୯ ⟶ ୩୩୧:
function p.infobox(frame)
local origArgs
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
Line ୩୦୯ ⟶ ୩୪୦:
-- Parse the data parameters in the same order that the old {{infobox}} did, so that
-- references etc. will display in the expected places. Parameters that depend on
-- another parameter are only processed if that parameter is present, to avoid
local temp
-- phantom references appearing in article reference lists.
temp = origArgs.title
preprocessSingleArg('child')
temp = origArgs.above
preprocessSingleArg('bodyclass')
touchParameters({'subheader'}, origArgs, 5)
preprocessSingleArg('subbox')
touchParameters({'image', 'caption'}, origArgs, 5)
preprocessSingleArg('bodystyle')
touchParameters({'header', 'label', 'data'}, origArgs, 20)
preprocessSingleArg('title')
temp = origArgs.below
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
-- ParserFunctions considers whitespace to be false, so to preserve the previous
preprocessSingleArg('above')
-- behavior of {{infobox}}, change any whitespace arguments to nil, so Lua will consider
preprocessSingleArg('aboveclass')
-- them false too. (Except the 'italic title' param, which specifies different behavior
preprocessSingleArg('abovestyle')
-- depending on whether it's absent or empty)
args = preprocessArgs({}
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
for k, v in pairs(origArgs) do
}, 10)
if mw.ustring.match(v, '%S') or k == 'italic title' then
preprocessSingleArg('subheaderstyle')
args[k] = v
preprocessSingleArg('subheaderclass')
end
preprocessArgs({
end
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label', 'rowclass'}},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
args['italic title'] = origArgs['italic title'] -- different behaviour if blank or absent
preprocessSingleArg('decat')
return _infobox()