Editing Module:Infobox Item
From Eco - English Wiki
Your changes will be displayed to readers once an authorized user accepts them. (help)
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 2: | Line 2: | ||
local p = {} | local p = {} | ||
local | |||
local | -- Grabs args from the parent frame | ||
-- Trims and parses the args into a table, then returns the table | |||
function norm() | |||
local origArgs = mw.getCurrentFrame():getParent().args | |||
local args = {} | |||
for k, v in pairs( origArgs ) do | |||
v = mw.text.trim( tostring( v ) ) | |||
if v ~= '' then | |||
args[k] = v | |||
end | |||
end | |||
return args | |||
end | |||
-- Build an Item Infobox | -- Build an Item Infobox | ||
function itemBox(args, itemData) | function itemBox( args, itemData ) | ||
-- check that all necessary arguments are passed correctly | -- check that all necessary arguments are passed correctly | ||
if args.name == nil or args.name == '' then | if args.name == nil or args.name == '' then | ||
return '\'name\' must be specified.' | return '\'name\' must be specified.' | ||
end | end | ||
local item = args.name | |||
local itemTable = itemData.items[item] | |||
local itemimagename = string.gsub(item, ' ', '') | |||
local itemTable = itemData.items[item] | |||
if itemTable == nil then | |||
return item .. ' could not be found in Module:ItemData.' | |||
end | |||
-- string used to build the infobox | -- string used to build the infobox | ||
local infobox = '{| class=\"infobox\"\n' | local infobox = '{| class=\"infobox\"\n' | ||
-- 'Name and Image' section | |||
-- name of the item | |||
infobox = infobox .. '|- style=\"color: white; background-color: #1165AF; text-align: center;\"\n| colspan=\"2\" | \'\'\'<big>' .. item .. '</big>\'\'\'\n' | |||
-- the item's type (ItemData - group) | |||
infobox = infobox .. '|- style=\"text-align: center; color: white; background-color: ' | |||
if itemTable.group == 'Food' then | |||
infobox = infobox .. '#85D66B;\"\n| colspan=\"2\" | \'\'\'Food\'\'\'\n' | |||
-- Items:Food Icon Image | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Icon.png|[[Category:Pages_with_missing_icon]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Icon.png').file.exists then | |||
image = itemimagename .. '_Icon.png' | |||
elseif mw.title.makeTitle('File', itemimagename .. '_Icon.jpg').file.exists then | |||
image = itemimagename .. '_Icon.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | <div class="iconContainer"><div class="iconStack">[[File:' .. image .. '|frameless|class=iconGreen]]</div><div class=iconBorder style=\"position:absolute;\"></div></div> \n' | |||
elseif itemTable.group == 'Skill Books' or itemTable.group == 'Skill Scrolls' then | |||
infobox = infobox .. '#FFCF4D;\"\n| colspan=\"2\" | \'\'\'' .. itemTable.group .. '\'\'\'\n' | |||
-- Items:Skill Books Icon Image | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Icon.png|[[Category:Pages_with_missing_icon]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Icon.png').file.exists then | |||
image = itemimagename .. '_Icon.png' | |||
elseif mw.title.makeTitle('File', itemimagename .. '_Icon.jpg').file.exists then | |||
image = itemimagename .. '_Icon.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | <div class="iconContainer"><div class="iconStack">[[File:' .. image .. '|frameless|class=iconGold]]</div><div class=iconBorder style=\"position:absolute;\"></div></div> \n' | |||
else | |||
infobox = infobox .. '#78B1FF;\"\n| colspan=\"2\" | \'\'\'' .. itemTable.group .. '\'\'\'\n' | |||
-- Items: Other Icon Image | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Icon.png|[[Category:Pages_with_missing_icon]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Icon.png').file.exists then | |||
image = itemimagename .. '_Icon.png' | |||
elseif mw.title.makeTitle('File', itemimagename .. '_Icon.jpg').file.exists then | |||
image = itemimagename .. '_Icon.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | <div class="iconContainer"><div class="iconStack">[[File:' .. image .. '|frameless|class=iconBlue]]</div><div class=iconBorder style=\"position:absolute;\"></div></div> \n' | |||
end | |||
-- 'Description' section header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Description\'\'\'\n' | |||
if itemTable.description == nil then | |||
infobox = infobox .. '|- style=\"text-align: center;\"\n| colspan=\"2\" | \'\'\'None\'\'\'\n' | |||
elseif itemTable.description == '' then | |||
infobox = infobox .. '|- style=\"text-align: center;\"\n| colspan=\"2\" | \'\'\'None\'\'\'\n' | |||
else | |||
infobox = infobox .. '|- style=\"text-align: center;\"\n| colspan=\"2\" | ' .. itemTable.description .. '\n' | |||
end | |||
-- 'General' section header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'General\'\'\'\n' | |||
-- created at | |||
local craftingRecipes = require( "Module:CraftingRecipes" ) | |||
local recipes = craftingRecipes.recipes | |||
local function addToSet(set, key) | |||
set[key] = true | |||
end | |||
local function setNotContains(set, key) | |||
return set[key] == nil | |||
end | |||
if craftingRecipes.items[item] ~= nil and #craftingRecipes.items[item] >= 1 then | |||
local count = 0 | |||
local stations = {} | |||
local sortStations = {} | |||
local stationString = '' | |||
local found = false | |||
for k, v in ipairs( craftingRecipes.items[item] ) do | |||
for num = 1, #recipes[v] do | |||
if (recipes[v].numberOfVariants == nil or recipes[v].numberOfVariants <= tostring(1) or recipes[v].numberOfVariants == tostring(0)) then | |||
if setNotContains(stations, recipes[v].craftStn[1]) then | |||
addToSet(stations, recipes[v].craftStn[1]) | |||
count = count + 1 | |||
end | |||
if found == false then | |||
found = true | |||
infobox = infobox .. '|-\n| Created at:\n| style=\"text-align: right; padding: 3px;\" |' | |||
end | |||
end | |||
end | |||
end | |||
local track = 0 | |||
if found == true then | |||
for a, b in pairs(stations) do | |||
table.insert(sortStations, a) | |||
end | |||
table.sort(sortStations) | |||
for i, n in ipairs(sortStations) do | |||
stationString = stationString .. ' [[' .. n .. ']]' | |||
track = track + 1 | |||
if track ~= count then -- Changed these line to produce comma if not last table. | |||
stationString = stationString .. ',' | |||
end | |||
end | |||
infobox = infobox .. stationString .. '\n' | |||
else | |||
infobox = infobox .. '|-\n| Created at:\n| style=\"text-align: right; padding: 3px;\" | N/A\n' | |||
end | |||
elseif args.created ~= nil and args.created ~= '' then | |||
infobox = infobox .. '|-\n| Created at:\n| style=\"text-align: right; padding: 3px;\" | ' .. args.created .. '\n' | |||
else | |||
infobox = infobox .. '|-\n| Created at:\n| style=\"text-align: right; padding: 3px;\" | N/A\n' | |||
end | |||
-- calories and nutrients (if itemTable.group == 'Food') | |||
if itemTable.group == 'Food' then | |||
infobox = infobox .. '|-\n| Calories:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.calories .. '\n|- valign=\"center\"\n| rowspan=\"4\" | Nutrients:\n' | |||
infobox = infobox .. '| style=\"color: red; text-align: right; padding: 3px;\" | Carbs: ' .. itemTable.carbs .. '\n' | |||
infobox = infobox .. '|- valign=\"center\"\n| style=\"color: orange; text-align: right; padding: 3px;\" | Protein: ' .. itemTable.protein .. '\n' | |||
infobox = infobox .. '|- valign=\"center\"\n| style=\"color: yellow; text-align: right; padding: 3px;\" | Fat: ' .. itemTable.fat .. '\n' | |||
infobox = infobox .. '|- valign=\"center\"\n| style=\"color: limegreen; text-align: right; padding: 3px;\" | Vitamins: ' .. itemTable.vitamins .. '\n' | |||
infobox = infobox .. '|-\n| Nutrition Density:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.density .. ' per 100 cals\n' | |||
end | |||
-- carried | |||
if args.carried ~= nil and args.carried ~= '' then | |||
infobox = infobox .. '|-\n| Carried in:\n| style=\"text-align: right; padding: 3px;\" | ' .. args.carried .. '\n' | |||
else | |||
infobox = infobox .. '|-\n| Carried in:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.carried .. '\n' | |||
end | |||
-- weight | |||
if itemTable.weight ~= nil then | |||
infobox = infobox .. '|-\n| Weight:\n| style="text-align: right; padding: 3px;" | ' .. itemTable.weight .. ' kg\n' | |||
else | |||
-- | infobox = infobox .. '|-\n| Weight:\n| style="text-align: right; padding: 3px;" | 0.00kg\n' | ||
end | |||
-- stack limit | |||
if itemTable.maxStack ~= nil then | |||
infobox = infobox .. '|-\n| Stack limit:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.maxStack .. '\n' | |||
end | |||
-- yield | |||
if itemTable.yield ~= nil then | |||
infobox = infobox .. '|-\n| Improve Gathering: \n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.yield .. '\n' | |||
end | |||
-- fuel | |||
if itemTable.fuel ~= nil then | |||
infobox = infobox .. '|-\n| Fuel energy:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.fuel .. ' J\n' | |||
end | |||
-- currency | |||
if itemTable.currency ~= nil then | |||
infobox = infobox .. '|-\n| Used as Currency:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.currency .. '\n' | |||
end | |||
-- 'IDs' section header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'IDs\'\'\'\n' | |||
-- item id (type) | |||
infobox = infobox .. '|- valign=\"center\"\n| Item ID:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.type .. '\n' | |||
-- id number (type id) | |||
infobox = infobox .. '|- valign=\"center\"\n| ID Number:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.typeID .. '\n' | |||
-- 'Item' World Object header (if itemTable.group = Placeable or Blocks) | -- 'Item' World Object header (if itemTable.group = Placeable or Blocks) | ||
if itemTable.group == 'Block Items' or itemTable.group == 'World Object Items' then | |||
infobox = infobox .. '|- style=\"text-align: center; background-color: #517ab2;\"\n| colspan=\"2\" | \'\'\'World Object\'\'\'\n' | |||
-- Object Placed Image | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Placed.png|[[Category:Pages_with_missing_placed]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Placed.png').file.exists then | |||
image = itemimagename .. '_Placed.png' | |||
elseif mw.title.makeTitle('File', itemimagename .. '_Placed.jpg').file.exists then | |||
image = itemimagename .. '_Placed.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | [[File:' .. image .. '|center|border|240px]]\n' | |||
-- 'Placement' section | |||
--Placement Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Placement\'\'\'\n' | |||
--Vechile | |||
if itemTable.mobile ~= nil then | |||
infobox = infobox .. '|-\n| Vehicle/Mobile Object:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.mobile .. '\n' | |||
end | |||
--Dimensions | |||
if itemTable.footprint ~= nil then | |||
infobox = infobox .. '|-\n| Dimensions (X,Y,Z):\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.footprint .. '\n' | |||
end | |||
--Material Tier | |||
if itemTable.materialTier ~= nil or itemTable.materialTier == 0 then | |||
infobox = infobox .. '|-\n| Room Material:\n| style=\"text-align: right; padding: 3px;\" | Tier ' .. itemTable.materialTier .. '\n' | |||
end | |||
--Room Req. | |||
if itemTable.roomContainReq ~= nil then | |||
infobox = infobox .. '|-\n| Room Required:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.roomContainReq .. '\n' | |||
end | |||
--Room Size. Req. | |||
if itemTable.roomSizeReq ~= nil then | |||
infobox = infobox .. '|-\n| Room Size:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.roomSizeReq .. ' m³\n' | |||
end | |||
--Room Mat. Req. | |||
if itemTable.roomMatReq ~= nil then | |||
infobox = infobox .. '|-\n| Room Materials:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.roomMatReq .. '\n' | |||
end | |||
-- Object Form Image | |||
if itemTable.group == 'Block Items' then | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Form.png|[[Category:Pages_with_missing_form]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Form.png').file.exists then | |||
image = itemimagename .. '_Form.png' | |||
elseif mw.title.makeTitle('File', itemimagename .. '_Form.jpg').file.exists then | |||
image = itemimagename .. '_Form.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | [[File:' .. image .. '|center|border|240px]]\n' | |||
end | |||
-- 'Housing' section (if there is a Room Category) | |||
if itemTable.roomCategory ~= nil then | |||
-- Housing Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Housing\'\'\'\n' | |||
--roomCategory | |||
infobox = infobox .. '|-\n| Room Category:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.roomCategory .. '\n' | |||
if itemTable.roomCategory ~= 'Industrial' then | |||
if itemTable.furnitureType ~= nil then | |||
--furnitureType | |||
infobox = infobox .. '|-\n| Furniture Type:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.furnitureType .. '\n' | |||
--Value of the object | |||
infobox = infobox .. '|-\n| Value:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.skillValue .. '\n' | |||
--Dim. Return % of Object | |||
infobox = infobox .. '|-\n| Dim. Return %:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.repeatsDepreciation .. '\n' | |||
end | |||
end | |||
if itemTable.roomCategory == 'Industrial' then | |||
infobox = infobox .. '|- style=\"background-color: red; text-align: center;\"\n| colspan=\"2\" | \'\'\'ALL ROOM VALUE LOST\'\'\'\n' | |||
end | |||
end | |||
-- 'Storage' Section (if inventorySlots is not nil) | |||
if itemTable.inventorySlots ~= nil then | |||
-- Storage Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Storage\'\'\'\n' | |||
--Inventory Slots | |||
infobox = infobox .. '|-\n| Inventory Slots:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.inventorySlots .. '\n' | |||
--inventoryMaxWeight | |||
if itemTable.inventoryMaxWeight ~= nil then | |||
maxWeightKg = itemTable.inventoryMaxWeight/1000 | |||
infobox = infobox .. '|-\n| Inventory Max Weight:\n| style=\"text-align: right; padding: 3px;\" | ' .. maxWeightKg .. ' Kg\n' | |||
else | |||
infobox = infobox .. '|-\n| Inventory Max Weight:\n| style=\"text-align: right; padding: 3px;\" | Unlimited \n' | |||
end | |||
end | |||
-- 'Power' section (if EngeryType is ``not nil) | |||
if itemTable.energyType ~= nil then | |||
-- Power Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Power\'\'\'\n' | |||
--EngergyType | |||
infobox = infobox .. '|-\n| Energy Type:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.energyType .. '\n' | |||
--Grid Radius | |||
infobox = infobox .. '|-\n| Grid Radius:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.gridRadius .. ' m\n' | |||
--Energy Produced | |||
infobox = infobox .. '|-\n| Energy Produced:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.energyProduced .. ' J\n' | |||
--Energy Used | |||
infobox = infobox .. '|-\n| Energy Used:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.energyUsed .. ' J\n' | |||
end | |||
-- 'Fuel' Section (if fuelsUsed by Object) | |||
if itemTable.fuelsUsed ~= nil then | |||
-- Fuel Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Fuel\'\'\'\n' | |||
--Fuels Used by Object | |||
infobox = infobox .. '|-\n| Fuels Used:\n| style=\"text-align: right; padding: 3px;\" | ' .. itemTable.fuelsUsed .. '\n' | |||
end | |||
-- 'Fluid' section (if fludisUsed is not nil) | |||
if itemTable.fluidsUsed ~= nil then | |||
-- Liquid/Gas Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Liquid/Gas\'\'\'\n' | |||
--Input (fludisUsed) | |||
infobox = infobox .. '|-\n| Input: \n| style=\"text-align: right; padding: 3px;\" | ' | |||
for a,b in ipairs(itemTable.fluidsUsed) do | |||
local acceptedType = b[1] | |||
local cRateString = string.gsub(b[2], "%s+", "") | |||
local consumingRate = tonumber(cRateString) | |||
infobox = infobox .. acceptedType .. ' at ' .. consumingRate .. ' L' | |||
if (a ~= #itemTable.fluidsUsed) then | |||
infobox = infobox .. ', ' | |||
end | |||
end | |||
infobox = infobox .. '\n' | |||
--Output (liquidProduced) | |||
infobox = infobox .. '|-\n| Output: \n| style=\"text-align: right; padding: 3px;\" | ' | |||
for a,b in ipairs(itemTable.fluidsProduced) do | |||
local producedType = b[1] | |||
local pRateString = string.gsub(b[2], "%s+", "") | |||
local producingRate = tonumber(pRateString) | |||
end | if (producingRate == 0) then | ||
producingRate = 'Rate of Input' | |||
end | |||
infobox = infobox .. producedType .. ' at ' .. producingRate .. ' L' | |||
if (a ~= #itemTable.fluidsProduced) then | |||
infobox = infobox .. ', ' | |||
end | |||
end | |||
infobox = infobox .. '\n' | |||
end | |||
end | |||
-- Road Object header (if group == Road Items) | |||
if itemTable.group == 'Road Items' then | |||
infobox = infobox .. '|- style=\"text-align: center; background-color: #517ab2;\"\n| colspan=\"2\" | \'\'\'Road Object\'\'\'\n' | |||
-- Object Placed Image | |||
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' .. itemimagename .. '_Placed.png|[[Category:Pages_with_missing_placed]]' | |||
if mw.title.makeTitle('File', itemimagename .. '_Placed.png').file.exists then | |||
if | image = itemimagename .. '_Placed.png' | ||
elseif mw.title.makeTitle('File', itemimagename .. '_Placed.jpg').file.exists then | |||
image = itemimagename .. '_Placed.jpg' | |||
end | |||
infobox = infobox .. '|-\n| colspan=\"2\" style=\"padding: 10px;\" | [[File:' .. image .. '|center|border|240px]]\n' | |||
end | |||
-- Tags Header | |||
if itemTable.tagGroups ~= nil and itemTable.tagGroups ~= {} then | |||
-- Tags Header | |||
infobox = infobox .. '|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | \'\'\'Tags\'\'\'\n' | |||
local tags = itemTable.tagGroups | |||
local list = '' | |||
-- for each item in the list (a is position, b is value) | |||
for a,b in ipairs(tags) do | |||
--if not these tags listed here | |||
if (b ~='[[Object]]' or b ~= '[[World Object]]' or b ~= '[[Housing Object]]') then | |||
-- add the tag to the list | |||
list = list .. b | |||
end | |||
-- if not the last item in the list | |||
if (b ~= tags[#tags]) then | |||
-- add a comma | |||
list = list .. ', ' | |||
end | end | ||
end | end | ||
-- Now the list is made add it to the infobox | |||
infobox = infobox .. '|- style=\"text-align: center;\"\n| colspan=\"2\" | ' .. list .. '\n' | |||
end | end | ||
infobox = infobox .. '|}' | |||
return infobox | |||
end | |||
-- Main entry point for the Module | -- Main entry point for the Module | ||
function p.ItemMain( | function p.ItemMain() | ||
-- get args from the Template | -- get args from the Template | ||
local args = | local args = norm() | ||
-- get item data | -- get item data | ||
local itemData = | local itemData = require( "Module:ItemData" ) | ||
return itemBox(args, itemData) | return itemBox( args, itemData ) | ||
end | end | ||
return p | return p |