Módulo:Smelting
Revisión del 18:56 1 ene 2015 de Leynaf (discusión | contribuciones)
local p = {} function p.table( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args else f = mw.getCurrentFrame() end local grid = require( 'Module:Grid' ) -- Start table when appropriate local multirow = f:callParserFunction( '#dplvar', 'multirow' ) if multirow ~= '1' then multirow = nil end local head = args.head or '' if multirow then head = '' elseif head ~= '' then multirow = 1 f:callParserFunction( '#dplvar:set', 'multirow', '1' ) else head = 1 end -- End table when appropriate local foot = args.foot or '' if multirow then if foot ~= '' then multirow = nil f:callParserFunction( '#dplvar:set', 'multirow', '0' ) end else foot = 1 end local header = '' if head ~= '' then local name = '' local description = '' if args.showname == '1' or multirow and args.showname ~= '0' then name = 'Nombre !! ' f:callParserFunction( '#dplvar:set', 'smeltingname', '1' ) end if args.showdescription == '1' then description = ' !! class="unsortable" | Descripción' f:callParserFunction( '#dplvar:set', 'smeltingdescription', '1' ) end local class = args.class or '' local recipeClass = '' if multirow then class = 'sortable collapsible ' .. class recipeClass = 'class="unsortable collapse-button" |' end header = table.concat( { '{| class="wikitable ' .. class .. '"', '! ' .. name .. 'Ingredientes !! ' .. recipeClass .. ' Receta de [[fundición]]' .. description, '|-' }, '\n' ) end local input = mw.text.trim( args[1] or '' ) local output = mw.text.trim( args[2] or '' ) local fuel = args.fuel or '' if fuel == '' then fuel = 'Combustible' end -- Name cell local nameCell if args.name or '' ~= '' then nameCell = args.name elseif multirow or f:callParserFunction( '#dplvar', 'smeltingname' ) == '1' then local names = {} local links = {} for v in mw.text.gsplit( args[2] or '', '%s*;%s*' ) do parts = grid.getParts( v ) if not names[( parts.mod or '' ) .. parts.name] then local link = '' if parts.mod then link = 'Mods/' .. parts.mod .. '/' .. parts.name .. '|' end if parts.name:find( '^Any ' ) then table.insert( links, 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' ) else table.insert( links, '[[' .. link .. parts.name .. ']]' ) end names[( parts.mod or '' ) .. parts.name] = 1 end end nameCell = table.concat( links, ' or<br>' ) end if nameCell and args.upcoming == '1' then nameCell = nameCell .. '<br>(upcoming)' end -- Ingredients cell local ingredientsCell if args.ingredients or '' ~= '' then ingredientsCell = args.ingredients else ingredientsCell = {} local ingredients = {} for k, v in ipairs{ input, fuel } do local separator = '' if k == 2 and next( ingredients ) then separator = ' +<br>\n' end for item in mw.text.gsplit( v, '%s*;%s*' ) do local parts = grid.getParts( item ) if parts.name ~= '' and not ingredients[parts.name] and ( k == 2 or k == 1 and v ~= fuel ) then local link = '' if separator == '' and next( ingredients ) then separator = ' or<br>\n' end if parts.mod then link = 'Mods/'.. parts.mod .. '/' .. parts.name .. '|' end if parts.name:find( '^Any ' ) then table.insert( ingredientsCell, separator .. 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' ) else table.insert( ingredientsCell, separator .. '[[' .. link .. parts.name .. ']]' ) end separator = '' ingredients[parts.name] = 1 end end end ingredientsCell = table.concat( ingredientsCell ) end -- Any args we want to pass along local newArgs = { Input = args[1], Output = args[2], Fuel = fuel, Ititle = args.Ititle, Otitle = args.Otitle, Ftitle = args.Ftitle } -- Recipe cell local recipeCell = grid.furnace( newArgs ) local row = { ingredientsCell, recipeCell } if nameCell then table.insert( row, 1, nameCell ) end if ( args.description or '' ) ~= '' and f:callParserFunction( '#dplvar', 'smeltingdescription' ) == '1' then table.insert( row, args.description ) end row = table.concat( row, '\n|\n' ) if nameCell then row = '!\n' .. row else row = '|\n' .. row end local footer = '' if foot ~= '' then footer = '|}' f:callParserFunction( '#dplvar:set', 'smeltingname', '0', 'smeltingdescription', '0' ) end local category = '' if mw.title.getCurrentTitle().namespace == 0 and args.nocat ~= '1' and args.upcoming == '1' then category = '[[Category:Upcoming]]' end return header .. '\n' .. row .. '\n|-\n' .. footer .. category end return p