Module:RecipeTable

local p = {}

-- Header for the wikitable function header( args ) local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'

-- Show or hide the Crafting Station column if args[1] == 1 then headerStr = headerStr .. '! Crafting Station !' end

-- Item, Level Needed, Materials, Related Specialty headerStr = headerStr .. '! colspan=\"4\" | Item !! Level Needed !! colspan=\"4\" | Materials !! Crafting Time (Mins) !! style="width: 100px" | Related Specialty\n'

return headerStr end

function imagedisp( name ) local str = '' local image -- Manual override for image file if name then image = string.gsub(name, ' ', '') .. '_Icon.png' else image = 'NoImage.png' end str = str .. ' ' .. name .. '' return str end

function stationcell( args ) local str = '' str = str .. '| ' .. imagedisp(args[1]) return str end

function itemcell( args ) local str = '' str = str .. '| ' .. imagedisp(args[1]) str = str .. ' x' .. args[2] .. '\n' return str end

function skillreqcell( args ) local str = '' str = str .. '| ' .. imagedisp(args[1]) str = str .. ' Level ' .. args[2] .. ' \n' return str end

function groupedskillcell( args ) local str = '' str = str .. '| ' .. imagedisp(args[1]) if args[2] ~= nil then str = str .. ' ' .. imagedisp(args[2]) end return str end

-- Create a wikitable of recipes function p.main( recipes ) local rows = '' -- find number of times each Affect by Skill occurs local prevSkill = recipes[1].efficiencySkills[1] local skillIndex = {} local prevSkillnum = 0 local count = 0 for num = 1, #recipes do		if prevSkill ~= recipes[num].efficiencySkills[1] then skillIndex[#skillIndex + 1] = prevSkillnum + count prevSkillnum = 1 if #recipes[num].ingredients > 4 then count = 1 else count = 0 end prevSkill = recipes[num].efficiencySkills[1] else prevSkillnum = prevSkillnum + 1 if #recipes[num].ingredients > 4 then count = count + 1 end end end skillIndex[#skillIndex + 1] = prevSkillnum + count -- Get each row local j = 0 local k = 1 for i = 1, #recipes do	-- get information from the current recipe for building local checkImage = recipes[i].checkImage local craftStn = recipes[i].craftStn local products = recipes[i].products local skillNeeds = recipes[i].skillNeeds local ingredients = recipes[i].ingredients local ctime = recipes[i].ctime -- determine the size needed for products to display correctly local ingrednum = #ingredients local rowspan = '|' if ingrednum > 4 then rowspan = '| rowspan=\"2\" ' end -- String to return local row = '|-\n' -- Add new row if products or ingredients are passed in with at least 1 item if (products[1] and ingredients[1]) then -- Show or hide the Crafting Station column if recipes[i].dispCraftStn == 1 then row = row .. rowspan .. stationcell({craftStn[1]}) .. '\n' end -- Add the products columns local prodnum = #products for a = 1, prodnum do				if prodnum == 1 then row = row .. rowspan .. ' colspan=\"4\" ' end if ((prodnum == 2) or (prodnum == 3 and a == 2)) then row = row .. rowspan .. ' colspan=\"2\" ' end row = row .. itemcell({products[a][1], products[a][2]}) end -- Add the Skill needed column if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2]}) else row = row .. rowspan if ingrednum > 4 then row = row .. '|'				end row = row .. ' \'\'None\'\' \n' end -- Add the FIRST row of Ingredients column local numing = ingrednum if ingrednum > 4 then numing = 4 end for b = 1, numing do				if (ingrednum == 1) then row = row .. '| colspan=\"4\" ' end if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then row = row .. '| colspan=\"2\" ' end row = row .. itemcell({ingredients[b][1], ingredients[b][2]}) end -- Add the Crafting time column row = row .. rowspan if ingrednum > 4 then row = row .. '|'			end if ctime then row = row .. ctime .. '\n' else row = row .. rowspan .. ' \'\'missing\'\' \n' end -- Add the Affect by Skills column IF new skill grouping if j == 0 and (recipes[i].efficiencySkills[1] ~= nil and recipes[i].efficiencySkills[1] ~= 'nil') then row = row .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. groupedskillcell({recipes[i].efficiencySkills[1], recipes[i].speedSkills}) .. '\n' elseif (recipes[i].efficiencySkills[1] == nil or recipes[i].efficiencySkills[1] == 'nil') then row = row .. '| \n' end j = j + 1 if #ingredients > 4 then j = j + 1 end if j == skillIndex[k] then k = k + 1 j = 0 end -- Add the SECOND row of ingredients to ingredients column if applicable if ingrednum > 4 then row = row .. '|-\n' for b = 5, ingrednum do					if (ingrednum == 5) then row = row .. '| colspan=\"4\" ' end if ((ingrednum == 6) or (ingrednum == 7 and b == 6)) then row = row .. '| colspan=\"2\" ' end row = row .. itemcell({ingredients[b][1], ingredients[b][2]}) end end rows = rows .. row end end -- Return the full wikitable return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n' end

return p