|
|
Line 1: |
Line 1: |
| local p = {} | | local p = {} |
| | |
| | local i18n = { |
| | categoryUpcoming = 'Category:Upcoming', |
| | defaultFuel = 'Any fuel', |
| | moduleArgs = [[Module:ProcessArgs]], |
| | moduleRecipe = [[Module:Recipe table]], |
| | type = 'Smelting', |
| | } |
| | p.i18n = i18n |
| | |
| | local recipeTable = require( i18n.moduleRecipe ).table |
| | |
| function p.table( f ) | | function p.table( f ) |
| local args = f | | local args = f |
| if f == mw.getCurrentFrame() then | | if f == mw.getCurrentFrame() then |
| args = f:getParent().args | | args = require( i18n.moduleArgs ).merge( true ) |
| else | | else |
| f = mw.getCurrentFrame() | | f = mw.getCurrentFrame() |
| end | | end |
| local grid = require( 'Module:Grid' )
| |
| | | |
| -- Start table when appropriate | | args.Input = args[1] |
| local multirow = f:callParserFunction( '#dplvar', 'multirow' )
| | args.Output = args[2] |
| if multirow ~= '1' then
| | args.Fuel = args.fuel or i18n.defaultFuel |
| 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 = 'Name !! '
| |
| f:callParserFunction( '#dplvar:set', 'smeltingname', '1' )
| |
| end
| |
| if args.showdescription == '1' then
| |
| description = ' !! class="unsortable" | Description'
| |
| 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 .. 'Ingredients !! ' .. recipeClass .. ' [[Smelting]] recipe' .. 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 = 'Any fuel'
| |
| 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 out = recipeTable( args, { |
| local newArgs = { | | uiFunc = 'furnace', |
| Input = args[1],
| | type = i18n.type, |
| Output = args[2], | | ingredientArgs = { 'Input', 'Fuel' }, |
| Fuel = fuel,
| | outputArgs = { 'Output' }, |
| 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 = '' | | local title = mw.title.getCurrentTitle() |
| if mw.title.getCurrentTitle().namespace == 0 and args.nocat ~= '1' and args.upcoming == '1' then
| | local category |
| category = '[[Category:Upcoming]]' | | if args.upcoming and args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage then |
| | category = '[[' .. i18n.categoryUpcoming .. ']]' |
| end | | end |
| | | |
| return header .. '\n' .. row .. '\n|-\n' .. footer .. category | | return out, category |
| end | | end |
| | |
| return p | | return p |