<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.americanmusicclub.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox3cols</id>
	<title>Module:Infobox3cols - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.americanmusicclub.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox3cols"/>
	<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Infobox3cols&amp;action=history"/>
	<updated>2026-04-06T02:33:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.americanmusicclub.com/index.php?title=Module:Infobox3cols&amp;diff=26299&amp;oldid=prev</id>
		<title>Amc-admin: 24 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.americanmusicclub.com/index.php?title=Module:Infobox3cols&amp;diff=26299&amp;oldid=prev"/>
		<updated>2016-11-21T21:15:20Z</updated>

		<summary type="html">&lt;p&gt;24 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox3cols}}&lt;br /&gt;
--&lt;br /&gt;
-- The initial version was created by modifying [[Module:Infobox]]&lt;br /&gt;
--&lt;br /&gt;
 &lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require(&amp;#039;Module:Navbar&amp;#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
    -- Returns the union of the values of two tables, as a sequence.&lt;br /&gt;
    local vals = {}&lt;br /&gt;
    for k, v in pairs(t1) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(t2) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    for k, v in pairs(vals) do&lt;br /&gt;
        table.insert(ret, k)&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix,suffix)&lt;br /&gt;
    -- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
    -- for the specified prefix. For example, if the prefix was &amp;#039;data&amp;#039;, and&lt;br /&gt;
    -- &amp;#039;data1&amp;#039;, &amp;#039;data2&amp;#039;, and &amp;#039;data5&amp;#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
    local nums = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        local num = tostring(k):match(&amp;#039;^&amp;#039; .. prefix .. &amp;#039;([0-9]%d*)&amp;#039; .. suffix .. &amp;#039;$&amp;#039;)&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;
    -- Adds a row to the infobox, with either a header cell&lt;br /&gt;
    -- or a label/data cell combination.&lt;br /&gt;
    if rowArgs.header then&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
                :addClass(rowArgs.rowclass)&lt;br /&gt;
                :cssText(rowArgs.rowstyle)&lt;br /&gt;
                :attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
                :tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;colspan&amp;#039;, 4)&lt;br /&gt;
                    :attr(&amp;#039;id&amp;#039;, rowArgs.headerid)&lt;br /&gt;
                    :addClass(rowArgs.class)&lt;br /&gt;
                    :addClass(args.headerclass)&lt;br /&gt;
                    :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
                    :cssText(args.headerstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(rowArgs.header)&lt;br /&gt;
    elseif rowArgs.label then&lt;br /&gt;
        if rowArgs.data then&lt;br /&gt;
            local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            row:addClass(rowArgs.rowclass)&lt;br /&gt;
            row:cssText(rowArgs.rowstyle)&lt;br /&gt;
            row:attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
            row&lt;br /&gt;
                :tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;id&amp;#039;, rowArgs.labelid)&lt;br /&gt;
                    :cssText(args.labelstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(rowArgs.label)&lt;br /&gt;
                    :done()&lt;br /&gt;
        &lt;br /&gt;
            local dataCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            dataCell&lt;br /&gt;
                :attr(&amp;#039;colspan&amp;#039;, 3)&lt;br /&gt;
                :attr(&amp;#039;id&amp;#039;, rowArgs.dataid)&lt;br /&gt;
                :addClass(rowArgs.class)&lt;br /&gt;
                :cssText(rowArgs.datastyle)&lt;br /&gt;
                :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                :newline()&lt;br /&gt;
                :wikitext(rowArgs.data)&lt;br /&gt;
        elseif rowArgs.dataa or rowArgs.datab then&lt;br /&gt;
            local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            row:addClass(rowArgs.rowclass)&lt;br /&gt;
            row:cssText(rowArgs.rowstyle)&lt;br /&gt;
            row:attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
            row&lt;br /&gt;
                :tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
                    :attr(&amp;#039;id&amp;#039;, rowArgs.labelid)&lt;br /&gt;
                    :cssText(args.labelstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(rowArgs.label)&lt;br /&gt;
                    :done()&lt;br /&gt;
&lt;br /&gt;
            local dataCella = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            dataCella&lt;br /&gt;
                :attr(&amp;#039;id&amp;#039;, rowArgs.dataaid)&lt;br /&gt;
                :addClass(rowArgs.classa)&lt;br /&gt;
                :cssText(rowArgs.dataastyle)&lt;br /&gt;
                :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                :newline()&lt;br /&gt;
                :wikitext(rowArgs.dataa)&lt;br /&gt;
            if rowArgs.renderb then&lt;br /&gt;
                local dataCellb = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                dataCellb&lt;br /&gt;
                    :attr(&amp;#039;id&amp;#039;, rowArgs.databid)&lt;br /&gt;
                    :addClass(rowArgs.classb)&lt;br /&gt;
                    :cssText(rowArgs.databstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :newline()&lt;br /&gt;
                    :wikitext(rowArgs.datab)&lt;br /&gt;
            end&lt;br /&gt;
            if rowArgs.renderc then&lt;br /&gt;
                local dataCellc = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                dataCellc&lt;br /&gt;
                    :attr(&amp;#039;id&amp;#039;, rowArgs.datacid)&lt;br /&gt;
                    :addClass(rowArgs.classc)&lt;br /&gt;
                    :cssText(rowArgs.datacstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :newline()&lt;br /&gt;
                    :wikitext(rowArgs.datac)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    elseif rowArgs.data then&lt;br /&gt;
        local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
        row:addClass(rowArgs.rowclass)&lt;br /&gt;
        row:cssText(rowArgs.rowstyle)&lt;br /&gt;
        row:attr(&amp;#039;id&amp;#039;, rowArgs.rowid)&lt;br /&gt;
                    &lt;br /&gt;
        local dataCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
        dataCell&lt;br /&gt;
            :attr(&amp;#039;colspan&amp;#039;, 4)&lt;br /&gt;
            :attr(&amp;#039;id&amp;#039;, rowArgs.dataid)&lt;br /&gt;
            :addClass(rowArgs.class)&lt;br /&gt;
            :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;) &lt;br /&gt;
            :cssText(rowArgs.datastyle)&lt;br /&gt;
            :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
            :newline()&lt;br /&gt;
            :wikitext(rowArgs.data)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
    if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
    root&lt;br /&gt;
        :tag(&amp;#039;caption&amp;#039;)&lt;br /&gt;
            :addClass(args.titleclass)&lt;br /&gt;
            :cssText(args.titlestyle)&lt;br /&gt;
            :wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
    if not args.above then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
                :attr(&amp;#039;colspan&amp;#039;, 4)&lt;br /&gt;
                :addClass(args.aboveclass)&lt;br /&gt;
                :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;font-size&amp;#039;, &amp;#039;125%&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
                :cssText(args.abovestyle)&lt;br /&gt;
                :wikitext(args.above)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
    if not args.below then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                :attr(&amp;#039;colspan&amp;#039;, 4)&lt;br /&gt;
                :addClass(args.belowclass)&lt;br /&gt;
                :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
                :cssText(args.belowstyle)&lt;br /&gt;
                :newline()&lt;br /&gt;
                :wikitext(args.below)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
    if args.subheader then&lt;br /&gt;
        args.subheader1 = args.subheader&lt;br /&gt;
    end&lt;br /&gt;
    if args.subheaderrowclass then&lt;br /&gt;
        args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
    end&lt;br /&gt;
    local subheadernums = getArgNums(&amp;#039;subheader&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
    for k, num in ipairs(subheadernums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = args[&amp;#039;subheader&amp;#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.subheaderstyle or args[&amp;#039;subheaderstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
            class = args.subheaderclass,&lt;br /&gt;
            rowclass = args[&amp;#039;subheaderrowclass&amp;#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
    if args.image then&lt;br /&gt;
        args.image1 = args.image&lt;br /&gt;
    end&lt;br /&gt;
    if args.caption then&lt;br /&gt;
        args.caption1 = args.caption&lt;br /&gt;
    end&lt;br /&gt;
    local imagenums = getArgNums(&amp;#039;image&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
    for k, num in ipairs(imagenums) do&lt;br /&gt;
        local caption = args[&amp;#039;caption&amp;#039; .. tostring(num)]&lt;br /&gt;
        local data = mw.html.create():wikitext(args[&amp;#039;image&amp;#039; .. tostring(num)])&lt;br /&gt;
        if caption then&lt;br /&gt;
            data&lt;br /&gt;
                :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                    :cssText(args.captionstyle)&lt;br /&gt;
                    :wikitext(caption)&lt;br /&gt;
        end&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = tostring(data),&lt;br /&gt;
            datastyle = args.imagestyle,&lt;br /&gt;
            class = args.imageclass,&lt;br /&gt;
            rowclass = args[&amp;#039;imagerowclass&amp;#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
    -- Gets the union of the header and data argument numbers,&lt;br /&gt;
    -- and renders them all in order using addRow.&lt;br /&gt;
    local rownums = union(getArgNums(&amp;#039;header&amp;#039;,&amp;#039;&amp;#039;), getArgNums(&amp;#039;data&amp;#039;,&amp;#039;[ab]?&amp;#039;))&lt;br /&gt;
    local datab_count = #(getArgNums(&amp;#039;data&amp;#039;,&amp;#039;b&amp;#039;))&lt;br /&gt;
    local datac_count = #(getArgNums(&amp;#039;data&amp;#039;,&amp;#039;c&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
    table.sort(rownums)&lt;br /&gt;
    for k, num in ipairs(rownums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            renderb = datab_count &amp;gt; 0,&lt;br /&gt;
            renderc = datac_count &amp;gt; 0,&lt;br /&gt;
            header = args[&amp;#039;header&amp;#039; .. tostring(num)],&lt;br /&gt;
            label = args[&amp;#039;label&amp;#039; .. tostring(num)],&lt;br /&gt;
            data = args[&amp;#039;data&amp;#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.datastyle,&lt;br /&gt;
            class = args[&amp;#039;class&amp;#039; .. tostring(num)],&lt;br /&gt;
            dataa = args[&amp;#039;data&amp;#039; .. tostring(num) .. &amp;#039;a&amp;#039;],&lt;br /&gt;
            dataastyle = args.datastylea,&lt;br /&gt;
            classa = args[&amp;#039;class&amp;#039; .. tostring(num) .. &amp;#039;a&amp;#039;],&lt;br /&gt;
            datab = args[&amp;#039;data&amp;#039; .. tostring(num) .. &amp;#039;b&amp;#039;],&lt;br /&gt;
            databstyle = args.datastyleb,&lt;br /&gt;
            classb = args[&amp;#039;class&amp;#039; .. tostring(num) .. &amp;#039;b&amp;#039;],&lt;br /&gt;
            datac = args[&amp;#039;data&amp;#039; .. tostring(num) .. &amp;#039;c&amp;#039;],&lt;br /&gt;
            datacstyle = args.datastylec,&lt;br /&gt;
            classc = args[&amp;#039;class&amp;#039; .. tostring(num) .. &amp;#039;c&amp;#039;],&lt;br /&gt;
            rowclass = args[&amp;#039;rowclass&amp;#039; .. tostring(num)],&lt;br /&gt;
            rowstyle = args[&amp;#039;rowstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
            rowcellstyle = args[&amp;#039;rowcellstyle&amp;#039; .. tostring(num)],&lt;br /&gt;
            dataid = args[&amp;#039;dataid&amp;#039; .. tostring(num)],&lt;br /&gt;
            dataaid = args[&amp;#039;dataid&amp;#039; .. tostring(num) .. &amp;#039;a&amp;#039;],&lt;br /&gt;
            dataaib = args[&amp;#039;dataid&amp;#039; .. tostring(num) .. &amp;#039;b&amp;#039;],&lt;br /&gt;
            dataaic = args[&amp;#039;dataid&amp;#039; .. tostring(num) .. &amp;#039;c&amp;#039;],&lt;br /&gt;
            labelid = args[&amp;#039;labelid&amp;#039; .. tostring(num)],&lt;br /&gt;
            headerid = args[&amp;#039;headerid&amp;#039; .. tostring(num)],&lt;br /&gt;
            rowid = args[&amp;#039;rowid&amp;#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
    if not args.name then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
                :attr(&amp;#039;colspan&amp;#039;, &amp;#039;4&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;text-align&amp;#039;, &amp;#039;right&amp;#039;)&lt;br /&gt;
                :wikitext(navbar{&lt;br /&gt;
                    args.name,&lt;br /&gt;
                    mini = 1,&lt;br /&gt;
                })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
    local italicTitle = args[&amp;#039;italic title&amp;#039;] and mw.ustring.lower(args[&amp;#039;italic title&amp;#039;])&lt;br /&gt;
    if italicTitle == &amp;#039;&amp;#039; or italicTitle == &amp;#039;force&amp;#039; or italicTitle == &amp;#039;yes&amp;#039; then&lt;br /&gt;
        root:wikitext(mw.getCurrentFrame():expandTemplate({title = &amp;#039;italic title&amp;#039;}))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
    if args.decat ~= &amp;#039;yes&amp;#039; then&lt;br /&gt;
        if #(getArgNums(&amp;#039;data&amp;#039;,&amp;#039;[abc]?&amp;#039;)) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
            root:wikitext(&amp;#039;[[Category:Articles which use infobox templates with no data rows]]&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
    -- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
    -- if the infobox is used as a &amp;#039;child&amp;#039; inside another infobox.&lt;br /&gt;
&lt;br /&gt;
    root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
        &lt;br /&gt;
    root&lt;br /&gt;
        :addClass(&amp;#039;infobox&amp;#039;)&lt;br /&gt;
        :addClass(args.bodyclass)&lt;br /&gt;
    if args.child == &amp;#039;yes&amp;#039; or args.subbox == &amp;#039;yes&amp;#039; then&lt;br /&gt;
        root&lt;br /&gt;
            :css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;margin&amp;#039;, (args.subbox == &amp;#039;yes&amp;#039;) and &amp;#039;-3px&amp;#039; or &amp;#039;auto&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;min-width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;font-size&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;clear&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;float&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;background-color&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
    else&lt;br /&gt;
        root&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;22em&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    root:cssText(args.bodystyle)&lt;br /&gt;
    &lt;br /&gt;
    renderTitle()&lt;br /&gt;
    renderAboveRow()&lt;br /&gt;
    renderSubheaders()&lt;br /&gt;
    renderImages() &lt;br /&gt;
    renderRows() &lt;br /&gt;
    renderBelowRow()  &lt;br /&gt;
    renderNavBar()&lt;br /&gt;
    renderItalicTitle()&lt;br /&gt;
    renderTrackingCategories()&lt;br /&gt;
    &lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
    -- If the argument exists and isn&amp;#039;t blank, add it to the argument table.&lt;br /&gt;
    -- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
    if origArgs[argName] and origArgs[argName] ~= &amp;#039;&amp;#039; 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;
    -- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
    -- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
    -- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
    -- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
    -- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
    -- table if the prefix parameter is present and non-blank.&lt;br /&gt;
    if type(prefixTable) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
        error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    if type(step) ~= &amp;#039;number&amp;#039; then&lt;br /&gt;
        error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
    for i,v in ipairs(prefixTable) do&lt;br /&gt;
        if type(v) ~= &amp;#039;table&amp;#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= &amp;#039;table&amp;#039;) then&lt;br /&gt;
            error(&amp;#039;Invalid input detected to preprocessArgs prefix table&amp;#039;, 2)&lt;br /&gt;
        end&lt;br /&gt;
        preprocessSingleArg(v.prefix)&lt;br /&gt;
        -- Only parse the depend parameter if the prefix parameter is present and not blank.&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) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
                    error(&amp;#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
                preprocessSingleArg(dependValue)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get arguments with number suffixes.&lt;br /&gt;
    local a = 0 -- 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) .. (v.suffix or &amp;#039;&amp;#039;)&lt;br /&gt;
                if origArgs[prefixArgName] then&lt;br /&gt;
                    moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
                    preprocessSingleArg(prefixArgName)&lt;br /&gt;
                end&lt;br /&gt;
                -- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
                -- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
                -- if the depend table is present.&lt;br /&gt;
                if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
                    for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
                        local dependArgName = dependValue .. tostring(i) .. (v.dependsuffix or &amp;#039;&amp;#039;)&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;
    -- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
    -- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
    -- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
    -- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
    -- phantom references appearing in article reference lists.&lt;br /&gt;
    preprocessSingleArg(&amp;#039;child&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;bodyclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;subbox&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;bodystyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;title&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;titleclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;titlestyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;above&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;aboveclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;abovestyle&amp;#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &amp;#039;subheader&amp;#039;, depend = {&amp;#039;subheaderstyle&amp;#039;, &amp;#039;subheaderrowclass&amp;#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;subheaderstyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;subheaderclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;image&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;caption&amp;#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &amp;#039;image&amp;#039;, depend = {&amp;#039;caption&amp;#039;, &amp;#039;imagerowclass&amp;#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;captionstyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;imagestyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;imageclass&amp;#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &amp;#039;header&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;data&amp;#039;, depend = {&amp;#039;label&amp;#039;}},&lt;br /&gt;
        {prefix = &amp;#039;data&amp;#039;, suffix = &amp;#039;a&amp;#039;, depend = {&amp;#039;label&amp;#039;}},&lt;br /&gt;
        {prefix = &amp;#039;data&amp;#039;, suffix = &amp;#039;a&amp;#039;, depend = {&amp;#039;data&amp;#039;}, dependsuffix=&amp;#039;c&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;data&amp;#039;, suffix = &amp;#039;b&amp;#039;, depend = {&amp;#039;label&amp;#039;}},&lt;br /&gt;
        {prefix = &amp;#039;data&amp;#039;, suffix = &amp;#039;b&amp;#039;, depend = {&amp;#039;data&amp;#039;}, dependsuffix=&amp;#039;c&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;rowclass&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;rowstyle&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;rowcellstyle&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;class&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;dataid&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;labelid&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;headerid&amp;#039;},&lt;br /&gt;
        {prefix = &amp;#039;rowid&amp;#039;}&lt;br /&gt;
    }, 50)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;headerclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;headerstyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;labelstyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;datastyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;datastylea&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;datastyleb&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;datastylec&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;below&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;belowclass&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;belowstyle&amp;#039;)&lt;br /&gt;
    preprocessSingleArg(&amp;#039;name&amp;#039;)&lt;br /&gt;
    args[&amp;#039;italic title&amp;#039;] = origArgs[&amp;#039;italic title&amp;#039;] -- different behaviour if blank or absent&lt;br /&gt;
    preprocessSingleArg(&amp;#039;decat&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
    return _infobox()&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Amc-admin</name></author>
	</entry>
</feed>