Modul:RecipeTable
Aus Eco - Deutsches Wiki
Documentation
This module is a part of the Vorlage:GetRecipes, and is used to generate a wikitable of recipes. It returns a wikitable as a string. The wikitable contains all of the recipes that were passed into the module.
If the template is passed, this module is used with the following Modules:
local p = {}
-- A cell in the table
function cell( args )
local str = ''
local image
-- Manual override for image file
if args[3] then
image = string.gsub(args[3], ' ', '')
else
image = string.gsub(args[2], ' ', '') .. '_Icon.png'
end
-- Check if file exists
--if args[1] == 1 then
-- if not mw.title.makeTitle('File', image).exists then
-- image = 'NoImage.png'
-- end
--end
str = str .. '| [[File:' .. image .. '|frameless|50px|link=' .. args[2] .. ']] <br> [[' .. args[2] .. ']] '
if args[4] ~= nil then
str = str .. 'x' .. args[4] .. ' |'
elseif args[5] ~= nil then
str = str .. '<br> Level ' .. args[5] .. ' |'
elseif args[6] then
if args[7] then
local image2
-- Manual override for image file
if args[8] then
image2 = string.gsub(args[8], ' ', '')
else
image2 = string.gsub(args[7], ' ', '') .. '_Icon.png'
end
-- Check if file exists
if args[1] == 1 then
if not mw.title.makeTitle('File', image2).exists then
image2 = 'NoImage.png'
end
end
str = str .. '<br> <br> [[File:' .. image2 .. '|frameless|50px|link=' .. args[7] .. ']] <br> [[' .. args[7] .. ']]'
end
else
str = str .. '|'
end
return str
end
-- 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, Skill needed, Materials, Affected by skills
headerStr = headerStr .. '! colspan=\"2\" | Item !! Skill needed !! colspan=\"4\" | Materials !! Crafting <br> time !! style="width: 100px" | Affected <br> by skills\n'
return headerStr
end
-- Row for recipe
function recipeRow( recipe )
-- Parse recipe
local checkImage = recipe.checkImage
local craftStn = recipe.craftStn
local item1 = recipe.item1
local item2 = recipe.item2
local skillNeed = recipe.skillNeed
local mater1 = recipe.mater1
local mater2 = recipe.mater2
local mater3 = recipe.mater3
local mater4 = recipe.mater4
local ctime = recipe.ctime
-- String to return
local row = '|-\n'
-- Return '' if item1 or mater1 aren't passed in
if not item1[1] then
return ''
elseif not mater1[1] then
return ''
end
-- Show or hide the Crafting Station column
if recipe.dispCraftStn == 1 then
row = row .. cell({checkImage, craftStn[1], craftStn[2]})
end
-- Add the Item columns
if item2[1] then
row = row .. cell({checkImage, item1[1], item1[2], item1[3]}) .. cell({checkImage, item2[1], item2[2], item2[3]})
else
row = row .. '| colspan=\"2\" ' .. cell({checkImage, item1[1], item1[2], item1[3]})
end
-- Add the Skill needed column
if recipe.skillNeed[1] ~= '' then
row = row .. cell({checkImage, skillNeed[1], skillNeed[2], nil, skillNeed[3]})
else
row = row .. '| \'\'None\'\' |'
end
-- Add the Materials column
if mater2[1] then
if mater3[1] then
if mater4[1] then
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]}) .. cell({chackImage, mater4[1], mater4[2], mater4[3]})
else
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]})
end
else
row = row .. '| colspan=\"2\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]})
end
else
row = row .. '| colspan=\"4\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]})
end
-- Add the Crafting time column
if ctime then
row = row .. '| ' .. ctime
else
row = row .. '| \'\'missing\'\''
end
row = row .. '\n'
return row
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].affSkill1[1]
local skillIndex = {}
local prevSkillnum = 0
for num = 1, #recipes do
if prevSkill ~= recipes[num].affSkill1[1] then
skillIndex[#skillIndex + 1] = prevSkillnum
prevSkillnum = 1
prevSkill = recipes[num].affSkill1[1]
else
prevSkillnum = prevSkillnum + 1
end
end
skillIndex[#skillIndex + 1] = prevSkillnum
-- Get each row
local j = 0
local k = 1
for i = 1, #recipes do
-- Main part of the row
rows = rows .. recipeRow(recipes[i])
-- Affect by Skill
if j == 0 and recipes[i].affSkill1[1] ~= nil then
rows = rows .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. cell({recipes[i].checkImage, recipes[i].affSkill1[1], recipes[i].affSkill1[2], nil, nil, 1, recipes[i].affSkill2[1], recipes[i].affSkill2[2]}) .. '\n'
elseif recipes[i].affSkill1[1] == nil then
rows = rows .. '| |\n'
end
j = j + 1
if j == skillIndex[k] then
k = k + 1
j = 0
end
end
-- Return the full wikitable
return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n'
end
return p