Module:Recipe: Difference between revisions
SlyAceZeta (talk | contribs) m (forgot to apply the default image to the output) |
SlyAceZeta (talk | contribs) (adding background icon logic; adding basic div's for testing out styling; hiding quantity output if only 1 is needed) |
||
Line 34: | Line 34: | ||
function p.SN(frame) |
function p.SN(frame) |
||
local args = getArgs(frame) |
local args = getArgs(frame) |
||
local output = "" |
local output = "<div style='display:flex'>" |
||
-- First, get the ID of the product item provided by template; pagename used by default |
-- First, get the ID of the product item provided by template; pagename used by default |
||
Line 50: | Line 50: | ||
for i,v in ipairs(dataSN[itemID].recipe) do |
for i,v in ipairs(dataSN[itemID].recipe) do |
||
local image = dataSN[v[1]].image |
local image = dataSN[v[1]].image |
||
local iconBG |
|||
if not image then |
if not image then |
||
image = dataSN[v[1]].name .. " Icon.png" |
image = dataSN[v[1]].name .. " Icon.png" |
||
if dataSN[v[1]].icon then |
|||
local iconBGSize = dataSN[v[1]].icon[size] or "1x1" |
|||
local iconBGType = dataSN[v[1]].icon[bg] or "default" |
|||
iconBG = iconBGSize .. " " .. iconBGType |
|||
else |
|||
iconBG = "1x1 default" |
|||
end |
|||
end |
end |
||
local quantity = "" |
|||
⚫ | |||
if v[2] > 1 then |
|||
quantity = "<span>x" .. v[2] .. "</span>" |
|||
end |
|||
⚫ | |||
end |
end |
||
return output |
return output .. "</div>" |
||
else |
else |
||
-- If there is no recipe for the item |
-- If there is no recipe for the item |
Revision as of 00:59, 10 June 2022
This module standardizes the display of crafting recipes and makes it easy to display a specified item's recipe or all recipes that use a specified ingredient. See Template:RecipeNew for more information. Thanks to BryghtShadow for helping out with the loops!
--[[
This module standardizes the display of crafting recipes
and makes it easy to display a specified item's recipe
or all recipes that use a specified ingredient.
Thanks to User:BryghtShadow for helping out with the loops!
--]]
-- <nowiki>
local p = {}
local dataSN = mw.loadData('Module:Recipe/SN')
-- local dataBZ = mw.loadData('Module:Recipe/BZ')
local getArgs = require('Dev:Arguments').getArgs
function p.getItemID(id, data)
-- removing disambiguations from pagenames
id = string.gsub(id, " %(Subnautica%)", "")
id = string.gsub(id, " %(Below Zero%)", "")
-- if item ID is provided directly...
if data[id] then
return id
end
-- ...otherwise try to find by item name
for k, v in pairs(data) do
if v.name == id then -- item found
return k
end
end
return nil -- Could not find item
end
function p.SN(frame)
local args = getArgs(frame)
local output = "<div style='display:flex'>"
-- First, get the ID of the product item provided by template; pagename used by default
local id = args[1] or mw.title.getCurrentTitle().text
local itemID = p.getItemID(id, dataSN)
if not itemID then error("Could not find recipe for item '" .. id .. "'") end
-- Item is found, start processing it
if dataSN[itemID].original then
-- If the item is made as part of a different item's recipe
error ("No standalone recipe for item '" .. itemID .. "' (use '" .. dataSN[itemID].original .. "' instead)")
else
if dataSN[itemID].recipe then
-- Recipe is found, start creating the output
for i,v in ipairs(dataSN[itemID].recipe) do
local image = dataSN[v[1]].image
local iconBG
if not image then
image = dataSN[v[1]].name .. " Icon.png"
if dataSN[v[1]].icon then
local iconBGSize = dataSN[v[1]].icon[size] or "1x1"
local iconBGType = dataSN[v[1]].icon[bg] or "default"
iconBG = iconBGSize .. " " .. iconBGType
else
iconBG = "1x1 default"
end
end
local quantity = ""
if v[2] > 1 then
quantity = "<span>x" .. v[2] .. "</span>"
end
output = output .. "<div><span>[[File:" .. iconBG .. " bg.png|50px]]</span><span>[[File:" .. image .. "|50px]]</span>" .. quantity .. "</div>"
end
return output .. "</div>"
else
-- If there is no recipe for the item
error ("Cannot craft item '" .. itemID .. "' (use Template:Uses instead)")
end
end
end
return p
-- </nowiki>