Module:Infobox: Difference between revisions
better comments
m>Mr. Stradivarius on tour (use tostring() in getArgNums() - this is quicker than forcing concatenation of numbers) |
m>Mr. Stradivarius (better comments) |
||
Line 11: | Line 11: | ||
function union(t1, t2) | function union(t1, t2) | ||
-- | -- Returns the union of the values of two tables, as a sequence. | ||
local vals = {} | local vals = {} | ||
for k, v in pairs(t1) do | for k, v in pairs(t1) do | ||
Line 27: | Line 27: | ||
local function getArgNums(prefix) | local function getArgNums(prefix) | ||
-- Returns a table containing the numbers of the arguments that exist | |||
-- for the specified prefix. For example, if the prefix was 'data', and | |||
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. | |||
local nums = {} | local nums = {} | ||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
Line 37: | Line 40: | ||
local function addRow(rowArgs) | local function addRow(rowArgs) | ||
-- Adds a row to the infobox, with either a header cell | |||
-- or a label/data cell combination. | |||
if rowArgs.header then | if rowArgs.header then | ||
root | root | ||
Line 159: | Line 164: | ||
local function renderRows() | local function renderRows() | ||
-- Gets the union of the header and data argument numbers, | |||
-- and renders them all in order using addRow. | |||
local rownums = union(getArgNums('header'), getArgNums('data')) | local rownums = union(getArgNums('header'), getArgNums('data')) | ||
table.sort(rownums) | table.sort(rownums) | ||
Line 206: | Line 213: | ||
local function _infobox() | local function _infobox() | ||
-- Specify the overall layout of the infobox, with special settings | |||
-- if the infobox is used as a 'child' inside another infobox. | |||
if args.child ~= 'yes' then | if args.child ~= 'yes' then | ||
root = HtmlBuilder.create('table') | root = HtmlBuilder.create('table') | ||
Line 249: | Line 258: | ||
end | end | ||
local function touchParameters(prefixTable, origArgs, step) | local function touchParameters(prefixTable, origArgs, step) | ||
-- Parse the parameters with the given prefixes, in order, in batches | |||
-- of the step size specified. This is to prevent references etc. from | |||
-- appearing in the wrong order. | |||
if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then | if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then | ||
error("Invalid input to the touchParameters function detected. Both parameters must be tables.", 2) | error("Invalid input to the touchParameters function detected. Both parameters must be tables.", 2) | ||
Line 259: | Line 269: | ||
end | end | ||
step = step or 20 | step = step or 20 -- If the step size is not given, the default is 20. | ||
local temp | local temp | ||
local a = 1 | local a = 1 -- Counter variable. | ||
local moreArgumentsExist = true | local moreArgumentsExist = true | ||
for j,v in ipairs(prefixTable) do | for j,v in ipairs(prefixTable) do |