<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://chunghwamc.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E7%B5%84%3A%E6%BB%BF%E6%84%8FRenderInfobox</id>
	<title>模組:滿意RenderInfobox - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://chunghwamc.com/wiki/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E7%B5%84%3A%E6%BB%BF%E6%84%8FRenderInfobox"/>
	<link rel="alternate" type="text/html" href="https://chunghwamc.com/wiki/index.php?title=%E6%A8%A1%E7%B5%84:%E6%BB%BF%E6%84%8FRenderInfobox&amp;action=history"/>
	<updated>2026-04-05T23:23:24Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://chunghwamc.com/wiki/index.php?title=%E6%A8%A1%E7%B5%84:%E6%BB%BF%E6%84%8FRenderInfobox&amp;diff=892&amp;oldid=prev</id>
		<title>Chunghwamc：​建立內容為「require(&quot;Module:滿意DocsUtils&quot;)  local p = {}  -- Hover tooltips for select labels loc.tooltips = {     maxSpeed = &quot;Applies on flat terrain, can be exceeded if going downhill&quot;,     time0_50 = &quot;Time to reach 50 km/h on flat terrain&quot;,     damagePerSecond = &quot;Damage per second&quot;, }  -- Group names loc.groups = {     item = &quot;Item&quot;,     liquid = &quot;Liquid&quot;,     gas = &quot;Gas&quot;,     unknown = &quot;Unknown&quot;,     building = &quot;Building&quot;,     vehicle = &quot;Vehicle&quot;,     fuel = &quot;Fue…」的新頁面</title>
		<link rel="alternate" type="text/html" href="https://chunghwamc.com/wiki/index.php?title=%E6%A8%A1%E7%B5%84:%E6%BB%BF%E6%84%8FRenderInfobox&amp;diff=892&amp;oldid=prev"/>
		<updated>2024-10-18T12:29:08Z</updated>

		<summary type="html">&lt;p&gt;建立內容為「require(&amp;quot;Module:滿意DocsUtils&amp;quot;)  local p = {}  -- Hover tooltips for select labels loc.tooltips = {     maxSpeed = &amp;quot;Applies on flat terrain, can be exceeded if going downhill&amp;quot;,     time0_50 = &amp;quot;Time to reach 50 km/h on flat terrain&amp;quot;,     damagePerSecond = &amp;quot;Damage per second&amp;quot;, }  -- Group names loc.groups = {     item = &amp;quot;Item&amp;quot;,     liquid = &amp;quot;Liquid&amp;quot;,     gas = &amp;quot;Gas&amp;quot;,     unknown = &amp;quot;Unknown&amp;quot;,     building = &amp;quot;Building&amp;quot;,     vehicle = &amp;quot;Vehicle&amp;quot;,     fuel = &amp;quot;Fue…」的新頁面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;quot;Module:滿意DocsUtils&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Hover tooltips for select labels&lt;br /&gt;
loc.tooltips = {&lt;br /&gt;
    maxSpeed = &amp;quot;Applies on flat terrain, can be exceeded if going downhill&amp;quot;,&lt;br /&gt;
    time0_50 = &amp;quot;Time to reach 50 km/h on flat terrain&amp;quot;,&lt;br /&gt;
    damagePerSecond = &amp;quot;Damage per second&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Group names&lt;br /&gt;
loc.groups = {&lt;br /&gt;
    item = &amp;quot;Item&amp;quot;,&lt;br /&gt;
    liquid = &amp;quot;Liquid&amp;quot;,&lt;br /&gt;
    gas = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
    unknown = &amp;quot;Unknown&amp;quot;,&lt;br /&gt;
    building = &amp;quot;Building&amp;quot;,&lt;br /&gt;
    vehicle = &amp;quot;Vehicle&amp;quot;,&lt;br /&gt;
    fuel = &amp;quot;Fuel&amp;quot;,&lt;br /&gt;
    equipment = &amp;quot;Equipment&amp;quot;,&lt;br /&gt;
    ingredients = &amp;quot;Ingre&amp;amp;shy;dients&amp;quot;,&lt;br /&gt;
    dimensions = &amp;quot;Dimensions&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Row labels (may be wiki links)&lt;br /&gt;
loc.labels = {&lt;br /&gt;
    unlockedBy = &amp;quot;Unlocked by&amp;quot;,&lt;br /&gt;
    className = &amp;quot;Class name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    stackSize = &amp;quot;Stack size&amp;quot;,&lt;br /&gt;
    radioactive = &amp;quot;[[Radioactivity|Radioactive]]&amp;quot;,&lt;br /&gt;
    sinkPoints = &amp;quot;[[AWESOME Sink|Sink points]]&amp;quot;,&lt;br /&gt;
    energy = &amp;quot;Energy&amp;quot;,&lt;br /&gt;
    stackEnergy = &amp;quot;Stack energy&amp;quot;,&lt;br /&gt;
    abbreviation = &amp;quot;Abbrev&amp;amp;shy;iation&amp;quot;,&lt;br /&gt;
    fluidColor = &amp;quot;Fluid color&amp;quot;,&lt;br /&gt;
    equipmentSlot = &amp;quot;Equipment slot&amp;quot;,&lt;br /&gt;
    ammo = &amp;quot;Ammo&amp;quot;,&lt;br /&gt;
    damage = &amp;quot;[[Health|Damage]]&amp;quot;,&lt;br /&gt;
    magSize = &amp;quot;Magazine size&amp;quot;,&lt;br /&gt;
    rateOfFire = &amp;quot;Rate of fire&amp;quot;,&lt;br /&gt;
    reloadTime = &amp;quot;Reload time&amp;quot;,&lt;br /&gt;
    damagePerSecond = &amp;quot;DPS&amp;quot;,&lt;br /&gt;
    range = &amp;quot;Range&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    powerUsage = &amp;quot;[[Power|Power&amp;lt;br/&amp;gt;usage]]&amp;quot;,&lt;br /&gt;
    powerGenerated = &amp;quot;[[Power|Power&amp;lt;br/&amp;gt;generated]]&amp;quot;,&lt;br /&gt;
    fuelBurnRate = &amp;quot;Fuel burn rate&amp;quot;,&lt;br /&gt;
    supplementPerMinute = &amp;quot;Supplement&amp;lt;br/&amp;gt;input rate&amp;quot;,&lt;br /&gt;
    overclockable = &amp;quot;[[Clock speed|Overclock&amp;amp;shy;able]]&amp;quot;,&lt;br /&gt;
    somersloopSlots = &amp;quot;[[Production amplifier|Somersloop&amp;lt;br/&amp;gt;slots]]&amp;quot;,&lt;br /&gt;
    inventorySize = &amp;quot;Inventory size&amp;quot;,&lt;br /&gt;
    inputBufferSize = &amp;quot;Input&amp;lt;br/&amp;gt;buffer&amp;amp;nbsp;size&amp;quot;,&lt;br /&gt;
    beltInputs = &amp;quot;Conveyor&amp;lt;br/&amp;gt;inputs&amp;quot;,&lt;br /&gt;
    beltOutputs = &amp;quot;Conveyor&amp;lt;br/&amp;gt;outputs&amp;quot;,&lt;br /&gt;
    pipeInputs = &amp;quot;Pipeline&amp;lt;br/&amp;gt;inputs&amp;quot;,&lt;br /&gt;
    pipeOutputs = &amp;quot;Pipeline&amp;lt;br/&amp;gt;outputs&amp;quot;,&lt;br /&gt;
    maxSpeed = &amp;quot;Max speed&amp;quot;,&lt;br /&gt;
    time0_50 = &amp;quot;0-50 km/h&amp;quot;,&lt;br /&gt;
    size_width = &amp;quot;Width&amp;quot;,&lt;br /&gt;
    size_length = &amp;quot;Length&amp;quot;,&lt;br /&gt;
    size_height = &amp;quot;Height&amp;quot;,&lt;br /&gt;
    size_area = &amp;quot;Area&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    yes = &amp;quot;Yes&amp;quot;,&lt;br /&gt;
    no = &amp;quot;No&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loc.categories = {&lt;br /&gt;
	items = &amp;quot;[[Category:Items]]&amp;quot;,&lt;br /&gt;
	fluids = &amp;quot;[[Category:Fluids]]&amp;quot;,&lt;br /&gt;
	liquids = &amp;quot;[[Category:Liquids]]&amp;quot;,&lt;br /&gt;
	gases = &amp;quot;[[Category:Gases]]&amp;quot;,&lt;br /&gt;
	buildings = &amp;quot;[[Category:Buildings]]&amp;quot;,&lt;br /&gt;
	vehicles = &amp;quot;[[Category:Vehicles]]&amp;quot;,&lt;br /&gt;
	fuels = &amp;quot;[[Category:Fuels]]&amp;quot;,&lt;br /&gt;
	radioactive = &amp;quot;[[Category:Radioactive]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loc.fuelSort = function(a, b)&lt;br /&gt;
    if a.isVehicle ~= b.isVehicle then&lt;br /&gt;
        return not a.isVehicle&lt;br /&gt;
    elseif not a.isVehicle then&lt;br /&gt;
        return a.buildingName &amp;lt; b.buildingName&lt;br /&gt;
    else&lt;br /&gt;
        return a.buildingName &amp;gt; b.buildingName&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Generate a single &amp;lt;data&amp;gt; row. Automatically get label from loc.labels and format the value.&lt;br /&gt;
-- - parameter - string - parameter name from the data JSON&lt;br /&gt;
-- - branchValues - table&lt;br /&gt;
-- - unit - string - unit to show after the values&lt;br /&gt;
-- - nowiki - boolean - whether to escape the values&lt;br /&gt;
local function infoboxRow(parameter, branchValues, unit, nowiki)&lt;br /&gt;
    local output = formatBranchDiff(getBranchValues(parameter, branchValues.stable, branchValues.experimental), nil, nowiki)&lt;br /&gt;
    if output ~= &amp;quot;&amp;quot; and unit ~= nil then&lt;br /&gt;
        output = output .. unit&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;quot;&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;&amp;quot; .. loc.labels[parameter] .. &amp;quot;&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;&amp;quot; .. output .. &amp;quot;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.generateItemInfobox(frame)&lt;br /&gt;
    local targetClassName = frame:getParent().args.className&lt;br /&gt;
	local target = getObjectFromClassName(targetClassName, itemsJSON)&lt;br /&gt;
	if target.stable == nil and target.experimental == nil then&lt;br /&gt;
		return tostring(mw.html.create(&amp;quot;strong&amp;quot;):addClass(&amp;quot;error&amp;quot;):wikitext(&amp;quot;Item infobox error: invalid target&amp;quot;):allDone())&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- image name&lt;br /&gt;
    local itemLink, _ = getLinkAndName(targetClassName, target.stable, target.experimental)&lt;br /&gt;
&lt;br /&gt;
    -- form&lt;br /&gt;
    local forms = getBranchValues(&amp;quot;form&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
    forms.stable = forms.stable ~= nil and (forms.stable == &amp;quot;solid&amp;quot; and loc.groups.item or (forms.stable == &amp;quot;liquid&amp;quot; and loc.groups.liquid or (forms.stable == &amp;quot;gas&amp;quot; and loc.groups.gas or loc.groups.item))) or nil&lt;br /&gt;
    forms.experimental = forms.experimental ~= nil and (forms.experimental == &amp;quot;solid&amp;quot; and loc.groups.item or (forms.experimental == &amp;quot;liquid&amp;quot; and loc.groups.liquid or (forms.experimental == &amp;quot;gas&amp;quot; and loc.groups.gas or loc.groups.item))) or nil&lt;br /&gt;
    forms.text = formatBranchDiff(forms)&lt;br /&gt;
    forms.eitherIsSolid = forms.stable == loc.groups.item or forms.experimental == loc.groups.item&lt;br /&gt;
    forms.eitherIsFluid = forms.stable == loc.groups.liquid or forms.experimental == loc.groups.liquid or forms.stable == loc.groups.gas or forms.experimental == loc.groups.gas&lt;br /&gt;
&lt;br /&gt;
    -- fuel&lt;br /&gt;
    local fuelValues = getBranchValues(&amp;quot;energy&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
    local fuelSection = &amp;quot;&amp;quot;&lt;br /&gt;
    if fuelValues.stable ~= 0 or fuelValues.experimental ~= 0 then&lt;br /&gt;
        local fuelConsumers = {}&lt;br /&gt;
        local fuelConsumersOrder = {}&lt;br /&gt;
&lt;br /&gt;
        -- list the item&amp;#039;s energy&lt;br /&gt;
        fuelSection = &amp;quot;&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;&amp;quot; .. loc.labels.energy .. &amp;quot;&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;&amp;quot; .. formatBranchDiff(fuelValues) .. loc.units.mj .. &amp;quot;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        -- if the item is a solid fuel, list the energy per stack&lt;br /&gt;
        if (target.stable ~= nil and target.stable.form == &amp;quot;solid&amp;quot;) or (target.experimental ~= nil and target.experimental.form == &amp;quot;solid&amp;quot;) then&lt;br /&gt;
            fuelSection = fuelSection .. &amp;quot;&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;&amp;quot; .. loc.labels.stackEnergy .. &amp;quot;&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;&amp;quot; .. formatBranchDiff(&lt;br /&gt;
                {stable = fuelValues.stable ~= nil and target.stable.form == &amp;quot;solid&amp;quot; and fuelValues.stable * target.stable.stackSize or nil,&lt;br /&gt;
                experimental = fuelValues.experimental ~= nil and target.experimental.form == &amp;quot;solid&amp;quot; and fuelValues.experimental * target.experimental.stackSize or nil},&lt;br /&gt;
                target.stable ~= nil and target.experimental ~= nil and target.stable.form ~= target.experimental.form) .. loc.units.mj .. &amp;quot;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        -- list the buildings that consume the item as fuel&lt;br /&gt;
        for _,branchBuildings in pairs(buildingsJSON) do&lt;br /&gt;
            for _,building in pairs(branchBuildings) do&lt;br /&gt;
                for _,fuelProcess in pairs(building.burnsFuel) do&lt;br /&gt;
                    if fuelProcess.fuel == targetClassName then&lt;br /&gt;
                        if fuelConsumers[building.className] == nil then&lt;br /&gt;
                            fuelConsumers[building.className] = {}&lt;br /&gt;
                        end&lt;br /&gt;
                        if building.stable then&lt;br /&gt;
                            fuelConsumers[building.className].stable = building&lt;br /&gt;
                        end&lt;br /&gt;
                        if building.experimental then&lt;br /&gt;
                            fuelConsumers[building.className].experimental = building&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        -- determine the order of the fuel consumers by retrieving names from their classNames, then sorting alphabetically&lt;br /&gt;
        for className,_ in pairs(fuelConsumers) do&lt;br /&gt;
            local buildingLink, buildingName = getLinkAndName(className, fuelConsumers[className].stable, fuelConsumers[className].experimental)&lt;br /&gt;
            table.insert(fuelConsumersOrder, {className = className, buildingName = buildingName, buildingLink = buildingLink, isVehicle = fuelConsumers[className].stable ~= nil and fuelConsumers[className].stable.isVehicle or fuelConsumers[className].experimental ~= nil and fuelConsumers[className].experimental.isVehicle})&lt;br /&gt;
        end&lt;br /&gt;
        table.sort(fuelConsumersOrder, loc.fuelSort)&lt;br /&gt;
&lt;br /&gt;
        -- list the fuel consumption of each building in both branches, in both per minute and per cycle&lt;br /&gt;
        for _,namedBuilding in pairs(fuelConsumersOrder) do&lt;br /&gt;
            local branchBuilding = fuelConsumers[namedBuilding.className]&lt;br /&gt;
            local buildingPowerGeneration = getBranchValues(&amp;quot;powerGenerated&amp;quot;, branchBuilding.stable, branchBuilding.experimental)&lt;br /&gt;
&lt;br /&gt;
            if buildingPowerGeneration.stable == 0 then&lt;br /&gt;
                buildingPowerGeneration.stable = nil&lt;br /&gt;
            end&lt;br /&gt;
            if buildingPowerGeneration.experimental == 0 then&lt;br /&gt;
                buildingPowerGeneration.experimental = nil&lt;br /&gt;
            end&lt;br /&gt;
            -- calculate the fuel consumption per minute and per cycle&lt;br /&gt;
            if buildingPowerGeneration.stable ~= nil and buildingPowerGeneration.stable ~= 0 and fuelValues.stable ~= nil then&lt;br /&gt;
                buildingPowerGeneration.stable = fuelValues.stable/buildingPowerGeneration.stable&lt;br /&gt;
                buildingPowerGeneration.stablePerMin = formatNumber(60/buildingPowerGeneration.stable)&lt;br /&gt;
                buildingPowerGeneration.stable = formatNumber(buildingPowerGeneration.stable)&lt;br /&gt;
            end&lt;br /&gt;
            if buildingPowerGeneration.experimental ~= nil and fuelValues.experimental ~= nil then&lt;br /&gt;
                buildingPowerGeneration.experimental = fuelValues.experimental/buildingPowerGeneration.experimental&lt;br /&gt;
                buildingPowerGeneration.experimentalPerMin = formatNumber(60/buildingPowerGeneration.experimental)&lt;br /&gt;
                buildingPowerGeneration.experimental = formatNumber(buildingPowerGeneration.experimental)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            -- manually do EA/EX formatting&lt;br /&gt;
            local fuelConsumption = &amp;quot;&amp;quot;&lt;br /&gt;
            -- if it&amp;#039;s the same for both branches, list it only once&lt;br /&gt;
            if buildingPowerGeneration.stable ~= nil and buildingPowerGeneration.stable == buildingPowerGeneration.experimental then&lt;br /&gt;
                fuelConsumption = &amp;quot;&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. buildingPowerGeneration.stable .. loc.units.sec .. &amp;quot; (&amp;quot; .. buildingPowerGeneration.stablePerMin .. loc.units.pmin .. &amp;quot;)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                -- if it&amp;#039;s different for each branch, list it twice, formatted for each branch&lt;br /&gt;
                if buildingPowerGeneration.stable ~= nil then&lt;br /&gt;
                    fuelConsumption = fuelConsumption .. &amp;quot;&amp;lt;li&amp;gt;{{EA|&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. buildingPowerGeneration.stable .. loc.units.sec .. &amp;quot;&amp;#039;&amp;#039;&amp;#039; (&amp;quot; .. buildingPowerGeneration.stablePerMin .. loc.units.pmin .. &amp;quot;)}}&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if buildingPowerGeneration.experimental ~= nil then&lt;br /&gt;
                    fuelConsumption = fuelConsumption .. &amp;quot;&amp;lt;li&amp;gt;{{EX|&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. buildingPowerGeneration.experimental .. loc.units.sec .. &amp;quot;&amp;#039;&amp;#039;&amp;#039; (&amp;quot; .. buildingPowerGeneration.experimentalPerMin .. loc.units.pmin .. &amp;quot;)}}&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            fuelSection = fuelSection .. &amp;quot;&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;{{ItemLink|&amp;quot; .. namedBuilding.buildingLink .. &amp;quot;|&amp;quot; .. namedBuilding.buildingName .. &amp;quot;}}&amp;lt;ul&amp;gt;&amp;quot; .. fuelConsumption .. &amp;quot;&amp;lt;/ul&amp;gt;&amp;lt;li/&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        -- wrap in a group, end the fuel consumers list and data row&lt;br /&gt;
        fuelSection = [=[&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.fuel .. [=[&amp;lt;/header&amp;gt;]=] .. fuelSection .. [=[&amp;lt;/group&amp;gt;]=]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- infobox&lt;br /&gt;
    local xml = [=[&amp;lt;infobox&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;&amp;lt;default&amp;gt;]=] .. formatBranchDiff(getBranchValues(&amp;quot;name&amp;quot;, target.stable, target.experimental), true) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;image&amp;gt;&amp;lt;default&amp;gt;]=] .. frame:callParserFunction(&amp;quot;#setmainimage&amp;quot;, itemLink .. &amp;quot;.png&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/image&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;lt;i&amp;gt;]=]  .. formatBranchDiff(getBranchValues(&amp;quot;description&amp;quot;, target.stable, target.experimental)) .. [=[&amp;lt;/i&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;unlockedBy&amp;quot;, target) .. [=[&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;className&amp;quot;, target) .. [=[&lt;br /&gt;
&lt;br /&gt;
&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. forms.text .. [=[&amp;lt;/header&amp;gt;&lt;br /&gt;
]=] .. (forms.eitherIsSolid and infoboxRow(&amp;quot;stackSize&amp;quot;, target) or &amp;quot;&amp;quot;) .. [=[&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;radioactive&amp;quot;, target) .. [=[&lt;br /&gt;
]=] .. (forms.eitherIsSolid and infoboxRow(&amp;quot;sinkPoints&amp;quot;, target) or &amp;quot;&amp;quot;) .. [=[&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;abbreviation&amp;quot;, target) .. [=[&lt;br /&gt;
]=] .. (forms.eitherIsFluid and infoboxRow(&amp;quot;fluidColor&amp;quot;, target, nil, true) or &amp;quot;&amp;quot;) .. [=[&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/group&amp;gt;]=] .. fuelSection .. [=[&lt;br /&gt;
&lt;br /&gt;
&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.equipment .. [=[&amp;lt;/header&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.equipmentSlot .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.equipmentSlot or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.ammo .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.ammo or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.damage .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.damage or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.magSize .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.magSize or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.rateOfFire .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.rateOfFire == nil or frame:getParent().args.rateOfFire == &amp;quot;&amp;quot;) and (frame:getParent().args.rateOfFire .. &amp;quot;/s&amp;quot;) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.reloadTime .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.reloadTime == nil or frame:getParent().args.reloadTime == &amp;quot;&amp;quot;) and (frame:getParent().args.reloadTime .. loc.units.sec) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.damagePerSecond .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.damagePerSecond or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.range .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.range or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/group&amp;gt;&lt;br /&gt;
&amp;lt;/infobox&amp;gt;]=]&lt;br /&gt;
&lt;br /&gt;
	-- categories&lt;br /&gt;
	local categories = &amp;quot;&amp;quot;&lt;br /&gt;
	if not (frame:getParent().args.nocat ~= nil and frame:getParent().args.nocat == &amp;quot;1&amp;quot;) then&lt;br /&gt;
		-- individual ifs to cover branch differences&lt;br /&gt;
		if forms.stable == loc.groups.item or forms.experimental == loc.groups.item then&lt;br /&gt;
			categories = categories .. loc.categories.items&lt;br /&gt;
		end&lt;br /&gt;
		if forms.stable == loc.groups.liquid or forms.experimental == loc.groups.liquid then&lt;br /&gt;
			categories = categories .. loc.categories.liquids .. loc.categories.fluids&lt;br /&gt;
		end&lt;br /&gt;
		if forms.stable == loc.groups.gas or forms.experimental == loc.groups.gas then&lt;br /&gt;
			categories = categories .. loc.categories.gases .. loc.categories.fluids&lt;br /&gt;
		end&lt;br /&gt;
		if fuelValues.stable ~= 0 or fuelValues.experimental ~= 0 then&lt;br /&gt;
			categories = categories .. loc.categories.fuels&lt;br /&gt;
		end&lt;br /&gt;
		local radioactiveValues = getBranchValues(&amp;quot;radioactive&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
		if radioactiveValues.stable ~= 0 or radioactiveValues.experimental ~= 0 then&lt;br /&gt;
			categories = categories .. loc.categories.radioactive&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    return mw.getCurrentFrame():preprocess(xml) .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.generateBuildingInfobox(frame)&lt;br /&gt;
	local targetClassName = frame:getParent().args.className&lt;br /&gt;
	local target = getObjectFromClassName(targetClassName, buildingsJSON)&lt;br /&gt;
	if target.stable == nil and target.experimental == nil then&lt;br /&gt;
		return tostring(mw.html.create(&amp;quot;strong&amp;quot;):addClass(&amp;quot;error&amp;quot;):wikitext(&amp;quot;Building infobox error: invalid target&amp;quot;):allDone())&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    -- image name&lt;br /&gt;
    local buildingLink, _ = getLinkAndName(targetClassName, target.stable, target.experimental)&lt;br /&gt;
    &lt;br /&gt;
    -- somersloop slots&lt;br /&gt;
    local somersloopValues = getBranchValues(&amp;quot;somersloopSlots&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
    &lt;br /&gt;
    -- fuel&lt;br /&gt;
    local fuelSection = &amp;quot;&amp;quot;&lt;br /&gt;
    local fuelValues = getBranchValues(&amp;quot;burnsFuel&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
&lt;br /&gt;
    if (fuelValues.stable ~= nil and fuelValues.stable[1] ~= nil) or (fuelValues.experimental ~= nil and fuelValues.experimental[1] ~= nil) then&lt;br /&gt;
        local fuels = {}&lt;br /&gt;
        local fuelsOrder = {}&lt;br /&gt;
&lt;br /&gt;
        -- if a fuel is burnable in a branch, set its name and energy&lt;br /&gt;
        for branchName,branch in pairs(getBranchValues(&amp;quot;burnsFuel&amp;quot;, target.stable, target.experimental)) do&lt;br /&gt;
            for _,fuel in pairs(branch) do&lt;br /&gt;
                if fuels[fuel.fuel] == nil then&lt;br /&gt;
                    fuels[fuel.fuel] = {fuel = {}, energy = {}, supplement = {}, byproduct = {}, byproductAmount = {}}&lt;br /&gt;
                end&lt;br /&gt;
                local fuelItem = getObjectFromClassName(fuel.fuel, itemsJSON)&lt;br /&gt;
                fuels[fuel.fuel].fuel[branchName] = fuel.fuel&lt;br /&gt;
                fuels[fuel.fuel].energy[branchName] = fuelItem[branchName].energy&lt;br /&gt;
                fuels[fuel.fuel].supplement[branchName] = fuel.supplement&lt;br /&gt;
                fuels[fuel.fuel].byproduct[branchName] = fuel.byproduct&lt;br /&gt;
                fuels[fuel.fuel].byproductAmount[branchName] = fuel.byproductAmount&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        -- order fuels by their energy&lt;br /&gt;
        for fuelClassName,_ in pairs(fuels) do&lt;br /&gt;
            table.insert(fuelsOrder, fuelClassName)&lt;br /&gt;
        end&lt;br /&gt;
        table.sort(fuelsOrder, function(a,b) return (fuels[a].energy.stable or fuels[a].energy.experimental or 0) &amp;lt; (fuels[b].energy.stable or fuels[b].energy.experimental or 0) end)&lt;br /&gt;
&lt;br /&gt;
        -- generate infobox fuel section&lt;br /&gt;
        for _,fuelClassName in pairs(fuelsOrder) do&lt;br /&gt;
        	local supplement = fuels[fuelClassName].supplement.stable or fuels[fuelClassName].supplement.experimental&lt;br /&gt;
        	local byproduct = fuels[fuelClassName].byproduct.stable or fuels[fuelClassName].byproduct.experimental&lt;br /&gt;
            fuelSection = fuelSection .. &amp;quot;&amp;lt;li&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. generateItemLink(fuelClassName, fuels[fuelClassName].fuel.stable, fuels[fuelClassName].fuel.experimental, false) .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
            fuelSection = fuelSection .. (supplement and (&amp;quot; +&amp;amp;nbsp;&amp;quot; .. generateItemLink(supplement, fuels[fuelClassName].supplement.stable, fuels[fuelClassName].supplement.experimental, false)) or &amp;quot;&amp;quot;) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;&lt;br /&gt;
            fuelSection = fuelSection .. (byproduct and (&amp;quot;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;→&amp;amp;nbsp;&amp;quot; .. formatBranchDiff(fuels[fuelClassName].byproductAmount) .. &amp;quot;× &amp;quot; .. generateItemLink(byproduct, fuels[fuelClassName].byproduct.stable, fuels[fuelClassName].byproduct.experimental, false) .. &amp;quot;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        fuelSection = [=[&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.fuel .. [=[&amp;lt;/header&amp;gt;]=] .. infoboxRow(&amp;quot;supplementPerMinute&amp;quot;, target, loc.units.pmin) .. [=[&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;lt;ul&amp;gt;]=] .. fuelSection .. [=[&amp;lt;/ul&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;lt;/group&amp;gt;]=]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- ingredients&lt;br /&gt;
    local ingredientSection = &amp;quot;&amp;quot;&lt;br /&gt;
    local recipes = {}&lt;br /&gt;
&lt;br /&gt;
    -- get all recipes that produce the target building (should be only one, or two if EA/EX)&lt;br /&gt;
    for _,branchRecipes in pairs(recipesJSON) do&lt;br /&gt;
        for _,recipe in pairs(branchRecipes) do&lt;br /&gt;
            for _,product in pairs(recipe.products) do&lt;br /&gt;
                if targetClassName == product.item then&lt;br /&gt;
                    if recipe.stable then&lt;br /&gt;
                        recipes.stable = recipe&lt;br /&gt;
                    end&lt;br /&gt;
                    if recipe.experimental then&lt;br /&gt;
                        recipes.experimental = recipe&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- if there is only one recipe, show ingredients in a group&lt;br /&gt;
    if (recipes.stable == recipes.experimental) or (recipes.stable == nil and recipes.experimental ~= nil) or (recipes.stable ~= nil and recipes.experimental == nil) then&lt;br /&gt;
        recipes.stable = recipes.stable or recipes.experimental&lt;br /&gt;
        for _,ingredient in pairs(recipes.stable.ingredients) do&lt;br /&gt;
            local itemLink, itemName = getLinkAndName(ingredient.item, true, true)&lt;br /&gt;
            ingredientSection = ingredientSection .. &amp;quot;&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. formatNumber(ingredient.amount) .. &amp;quot; &amp;amp;times; {{ItemLink|&amp;quot; .. itemLink .. &amp;quot;|&amp;quot; .. itemName .. &amp;quot;}}&amp;#039;&amp;#039;&amp;#039;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        ingredientSection = [=[&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.ingredients .. [=[&amp;lt;/header&amp;gt;]=] .. ingredientSection .. [=[&amp;lt;/group&amp;gt;]=]&lt;br /&gt;
&lt;br /&gt;
    -- else use a tabber section to show branch recipes completely separately&lt;br /&gt;
    elseif recipes.stable ~= nil and recipes.stable ~= recipes.experimental then&lt;br /&gt;
        ingredientSection = &amp;quot;&amp;lt;panel&amp;gt;&amp;quot;&lt;br /&gt;
        -- ensure stable is always first&lt;br /&gt;
        for _,branchName in ipairs({&amp;quot;stable&amp;quot;, &amp;quot;experimental&amp;quot;}) do&lt;br /&gt;
            local recipe = recipes[branchName]&lt;br /&gt;
            if recipe ~= nil then&lt;br /&gt;
                ingredientSection = ingredientSection .. [=[&amp;lt;section&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.branches[branchName] .. [=[&amp;lt;/label&amp;gt;&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.ingredients .. [=[&amp;lt;/header&amp;gt;]=]&lt;br /&gt;
&lt;br /&gt;
                -- list ingredients in individual data rows&lt;br /&gt;
                for _,ingredient in pairs(recipe.ingredients) do&lt;br /&gt;
                    local itemLink, itemName = getLinkAndName(ingredient.item, true, true)&lt;br /&gt;
                    ingredientSection = ingredientSection .. &amp;quot;&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. formatNumber(ingredient.amount) .. &amp;quot; &amp;amp;times; {{ItemLink|&amp;quot; .. itemLink .. &amp;quot;|&amp;quot; .. itemName .. &amp;quot;}}&amp;#039;&amp;#039;&amp;#039;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            ingredientSection = ingredientSection .. &amp;quot;&amp;lt;/group&amp;gt;&amp;lt;/section&amp;gt;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        ingredientSection = ingredientSection .. &amp;quot;&amp;lt;/panel&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- whether is a vehicle or a building&lt;br /&gt;
    local isVehicle = getBranchValues(&amp;quot;isVehicle&amp;quot;, target.stable, target.experimental)&lt;br /&gt;
    isVehicle = {(isVehicle.stable or isVehicle.experimental) and loc.groups.vehicle or loc.groups.building}&lt;br /&gt;
    local powerGenerated = formatBranchDiff(getBranchValues(&amp;quot;powerGenerated&amp;quot;, target.stable, target.experimental))&lt;br /&gt;
    if powerGenerated ~= &amp;quot;&amp;quot; then&lt;br /&gt;
    	powerGenerated = powerGenerated .. loc.units.mw&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- infobox&lt;br /&gt;
    local xml = [=[&amp;lt;infobox&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;&amp;lt;default&amp;gt;]=] .. formatBranchDiff(getBranchValues(&amp;quot;name&amp;quot;, target.stable, target.experimental), true) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;image&amp;gt;&amp;lt;default&amp;gt;]=] .. frame:callParserFunction(&amp;quot;#setmainimage&amp;quot;, buildingLink .. &amp;quot;.png&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/image&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;&amp;lt;i&amp;gt;]=]  .. formatBranchDiff(getBranchValues(&amp;quot;description&amp;quot;, target.stable, target.experimental)) .. [=[&amp;lt;/i&amp;gt;&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;unlockedBy&amp;quot;, target) .. [=[&lt;br /&gt;
]=] .. infoboxRow(&amp;quot;className&amp;quot;, target) .. [=[&lt;br /&gt;
&lt;br /&gt;
&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. isVehicle[1] .. [=[&amp;lt;/header&amp;gt;&lt;br /&gt;
]=] .. (isVehicle[1] == loc.groups.building and infoboxRow(&amp;quot;powerUsage&amp;quot;, target, loc.units.mw) or &amp;quot;&amp;quot;) .. [=[&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. (isVehicle[1] == loc.groups.vehicle and loc.labels.fuelBurnRate or loc.labels.powerGenerated) .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. powerGenerated .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.overclockable .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.overclockable == nil or frame:getParent().args.overclockable == &amp;quot;&amp;quot;) and (frame:getParent().args.overclockable == &amp;quot;1&amp;quot; and loc.labels.yes or loc.labels.no) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
]=] .. ((somersloopValues.stable ~= 0 or somersloopValues.experimental ~= 0) and infoboxRow(&amp;quot;somersloopSlots&amp;quot;, target) or &amp;quot;&amp;quot;) .. [=[&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.inventorySize .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.inventorySize or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.inputBufferSize .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.inputBufferSize or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.beltInputs .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.beltInputs or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.beltOutputs .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.beltOutputs or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.pipeInputs .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.pipeInputs or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.pipeOutputs .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.pipeOutputs or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;&amp;lt;span title=&amp;quot;]=] .. loc.tooltips.maxSpeed .. [=[&amp;quot;&amp;gt;]=] .. loc.labels.maxSpeed .. [=[&amp;lt;/span&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.maxSpeed == nil or frame:getParent().args.maxSpeed == &amp;quot;&amp;quot;) and (frame:getParent().args.maxSpeed .. loc.units.kmh) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;&amp;lt;span title=&amp;quot;]=] .. loc.tooltips.time0_50 .. [=[&amp;quot;&amp;gt;]=] .. loc.labels.time0_50 .. [=[&amp;lt;/span&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.time0_50 == nil or frame:getParent().args.time0_50 == &amp;quot;&amp;quot;) and (frame:getParent().args.time0_50 .. loc.units.sec) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;group collapse=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;header&amp;gt;]=] .. loc.groups.dimensions .. [=[&amp;lt;/header&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.size_width .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.size_width == nil or frame:getParent().args.size_width == &amp;quot;&amp;quot;) and (frame:getParent().args.size_width .. loc.units.m) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.size_length .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.size_length == nil or frame:getParent().args.size_length == &amp;quot;&amp;quot;) and (frame:getParent().args.size_length .. loc.units.m) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.size_height .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. (not (frame:getParent().args.size_height == nil or frame:getParent().args.size_height == &amp;quot;&amp;quot;) and (frame:getParent().args.size_height .. loc.units.m) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;label&amp;gt;]=] .. loc.labels.size_area .. [=[&amp;lt;/label&amp;gt;&amp;lt;default&amp;gt;]=] .. ((tonumber(frame:getParent().args.size_width) and tonumber(frame:getParent().args.size_length)) and (tonumber(frame:getParent().args.size_width)*tonumber(frame:getParent().args.size_length) .. loc.units.m2) or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;data&amp;gt;&amp;lt;default&amp;gt;]=] .. (frame:getParent().args.size_note or &amp;quot;&amp;quot;) .. [=[&amp;lt;/default&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/group&amp;gt;]=] .. fuelSection .. ingredientSection .. [=[&lt;br /&gt;
&amp;lt;/infobox&amp;gt;]=]&lt;br /&gt;
&lt;br /&gt;
    -- categories&lt;br /&gt;
	local categories = &amp;quot;&amp;quot;&lt;br /&gt;
	if not (frame:getParent().args.nocat ~= nil and frame:getParent().args.nocat == &amp;quot;1&amp;quot;) then&lt;br /&gt;
		if isVehicle[1] == loc.groups.vehicle then&lt;br /&gt;
			categories = loc.categories.vehicles&lt;br /&gt;
		else&lt;br /&gt;
			categories = loc.categories.buildings&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    return mw.getCurrentFrame():preprocess(xml) .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Chunghwamc</name></author>
	</entry>
</feed>