Editing Module:Infobox Recipe
Jump to navigation
Jump to search
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 1: | Line 1: | ||
local currency = require('Module:Currency') |
local currency = require('Module:Currency') |
||
local |
local parse = require('Module:Param Parse') |
||
local yn = require('Module:Yesno') |
local yn = require('Module:Yesno') |
||
local editButton = require('Module:Edit button') |
|||
local function currency_cell(amount) |
local function currency_cell(amount) |
||
Line 15: | Line 14: | ||
--If set to true, will check if any of the items passed as a rawmaterialparam are actually intermediate materials. Will then change the display order of the infobox. |
--If set to true, will check if any of the items passed as a rawmaterialparam are actually intermediate materials. Will then change the display order of the infobox. |
||
local showFullRecipe = yn(args.showFull or 'no', false) |
local showFullRecipe = yn(args.showFull or 'no', false) |
||
--Get each of the rawmatX parameters from params and store their values in a new table |
--Get each of the rawmatX parameters from params and store their values in a new table |
||
local argsMaterials = p._extractRawMaterials(args) |
local argsMaterials = p._extractRawMaterials(args) |
||
--empty tables to hold materials |
--empty tables to hold materials |
||
local rawMaterials = {} |
local rawMaterials = {} |
||
local intermediateMaterials = {} |
local intermediateMaterials = {} |
||
--counter for total price of raw materials |
--counter for total price of raw materials |
||
local rawMaterialCost = 0 |
local rawMaterialCost = 0 |
||
--get the value for the output product |
--get the value for the output product |
||
local output1Value = |
local output1Value = args.output1 and mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') |
||
if args.output1 then |
|||
output1Value = mw.smw.ask('[[:+]][[' .. args.output1 .. ']]|?Value|limit=1') or 0 |
|||
end |
|||
--Calculate total value of output material(s) |
|||
local output1TotalValue = 0 |
local output1TotalValue = 0 |
||
if |
if output1Value[1]['Value'] ~= nil then |
||
output1TotalValue = output1Value[1]['Value'] * (tonumber(args.output1qty) or 1) |
|||
⚫ | |||
output1TotalValue = output1Value[1]['Value'] * (tonumber(args.output1qty) or 1) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
end |
end |
||
--Check if any of the raw mats provided are intermediate products, if they are, return their own raw materials |
--Check if any of the raw mats provided are intermediate products, if they are, return their own raw materials |
||
Line 50: | Line 38: | ||
if next(Materials) ~= nil then |
if next(Materials) ~= nil then |
||
rawMaterials = Materials.rawMaterials |
rawMaterials = Materials.rawMaterials |
||
intermediateMaterials = |
intermediateMaterials = Materials.intermediateMaterials |
||
end |
end |
||
else |
else |
||
rawMaterials = argsMaterials |
rawMaterials = argsMaterials |
||
end |
end |
||
--Simple query to get the shop buy price for the provided material, if no buy price is available returns 0 |
--Simple query to get the shop buy price for the provided material, if no buy price is available returns 0 |
||
Line 66: | Line 52: | ||
return 0 |
return 0 |
||
end |
end |
||
--If one of the raw materials provided as a param has been identified as an intermediate material then get the facility it is created at to display in the intermediate Ingredient row |
--If one of the raw materials provided as a param has been identified as an intermediate material then get the facility it is created at to display in the intermediate Ingredient row |
||
Line 79: | Line 63: | ||
return pageName |
return pageName |
||
end |
end |
||
--Set SMW properties |
--Set SMW properties |
||
Line 89: | Line 71: | ||
}) |
}) |
||
end |
end |
||
if args.facility then |
if args.facility then |
||
mw.smw.set({ |
mw.smw.set({ |
||
Line 95: | Line 76: | ||
}) |
}) |
||
end |
end |
||
--Creates a row suitable for the raw materials section of the infobox. |
--Creates a row suitable for the raw materials section of the infobox. |
||
Line 118: | Line 97: | ||
:done() |
:done() |
||
end |
end |
||
--Creates a row suitable for the intermediate materials section of the infobox. |
--Creates a row suitable for the intermediate materials section of the infobox. |
||
Line 139: | Line 116: | ||
:tag('td') |
:tag('td') |
||
:attr{ colspan = '10' } |
:attr{ colspan = '10' } |
||
:css{ ['text-align'] = ' |
:css{ ['text-align'] = 'right' } |
||
:wikitext('[[File:' .. facility .. '.png|30px|link=' .. facility .. ']] [[' .. facility .. ']]') |
:wikitext('[[File:' .. facility .. '.png|30px|link=' .. facility .. ']] [[' .. facility .. ']]') |
||
:done() |
:done() |
||
:done() |
:done() |
||
end |
end |
||
-- Recipe Table Head |
-- Recipe Table Head |
||
Line 163: | Line 138: | ||
:tag('td') |
:tag('td') |
||
:attr{ colspan = '11' } |
:attr{ colspan = '11' } |
||
:wikitext |
:wikitext(args.facility and ('[[File:%s.png|link=%s|30px]] [[%s]]'):format(args.facility, args.facility, args.facility) or 'Unknown') |
||
:done() |
:done() |
||
:done() |
:done() |
||
Line 184: | Line 158: | ||
:attr{ colspan = '2' } |
:attr{ colspan = '2' } |
||
:css{ ['text-align'] = 'center' } |
:css{ ['text-align'] = 'center' } |
||
:wikitext |
:wikitext(args.profession and '[[' .. args.profession .. ']]' or 'Unknown') |
||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:css{ ['text-align'] = 'center' } |
:css{ ['text-align'] = 'center' } |
||
:wikitext |
:wikitext(args.level or 'Unknown') |
||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:attr{ colspan = '10' } |
:attr{ colspan = '10' } |
||
:css{ ['text-align'] = 'center' } |
:css{ ['text-align'] = 'center' } |
||
:wikitext |
:wikitext(args.exp or 'Unknown') |
||
:done() |
:done() |
||
:done() |
:done() |
||
-- Add raw materials |
-- Add raw materials |
||
-- Headers |
|||
:tag('tr') |
:tag('tr') |
||
:tag('th') |
:tag('th') |
||
Line 213: | Line 187: | ||
:done() |
:done() |
||
-- Values |
|||
for _, material in ipairs(rawMaterials) do |
for _, material in ipairs(rawMaterials) do |
||
out:node(createRawMaterialRow(material)) |
out:node(createRawMaterialRow(material)) |
||
end |
end |
||
-- Add total raw cost |
-- Add total raw cost |
||
out |
out |
||
:tag('tr') |
:tag('tr') |
||
Line 228: | Line 202: | ||
:done() |
:done() |
||
-- Add Intermediate steps if required |
-- Add Intermediate steps if required |
||
-- Headers |
-- Headers |
||
if next(intermediateMaterials) ~= nil then |
if next(intermediateMaterials) ~= nil then |
||
Line 247: | Line 221: | ||
:done() |
:done() |
||
-- Values |
|||
for _, material in ipairs(intermediateMaterials) do |
for _, material in ipairs(intermediateMaterials) do |
||
mw.logObject(material) |
|||
out:node(createIntermediateMaterialRow(material)) |
out:node(createIntermediateMaterialRow(material)) |
||
end |
end |
||
end |
end |
||
-- Add output data |
-- Add output data |
||
⚫ | |||
out |
out |
||
⚫ | |||
:tag('tr') |
:tag('tr') |
||
:tag('th') |
:tag('th') |
||
Line 270: | Line 243: | ||
:done() |
:done() |
||
:done() |
:done() |
||
if args.output1 then |
|||
⚫ | |||
out |
|||
⚫ | |||
:tag('tr') |
:tag('tr') |
||
:tag('td') |
:tag('td') |
||
:css{ ['border-right'] = 'none' } |
:css{ ['border-right'] = 'none' } |
||
:wikitext('[[File:' .. args.output1 .. '.png|30px|link=' .. args.output1 .. ']] |
:wikitext('[[File:' .. args.output1 .. '.png|30px|link=' .. args.output1 .. ']]') |
||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:css{ ['border-left'] = 'none' } |
:css{ ['border-left'] = 'none' } |
||
:wikitext('[[' .. args.output1 .. ']]' or 'Unknown') |
:wikitext(args.output1 and '[[' .. args.output1 .. ']]' or 'Unknown') |
||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
Line 289: | Line 260: | ||
:wikitext(currency_cell(output1TotalValue)) |
:wikitext(currency_cell(output1TotalValue)) |
||
:done() |
:done() |
||
end |
|||
-- Add profit data |
-- Add profit data |
||
out |
|||
:tag('tr') |
:tag('tr') |
||
:tag('th') |
:tag('th') |
||
Line 302: | Line 272: | ||
return out |
return out |
||
end |
end |
||
function p._extractRawMaterials(args) |
function p._extractRawMaterials(args) |
||
Line 320: | Line 288: | ||
return rawMaterials |
return rawMaterials |
||
end |
end |
||
--This function takes a table containing the raw materials params received from the calling template. |
--This function takes a table containing the raw materials params received from the calling template. |
||
Line 332: | Line 298: | ||
local intermediateMaterials = {} |
local intermediateMaterials = {} |
||
⚫ | |||
local function _processMaterial(material, quantity) |
|||
if |
if item["name"] then |
||
local result = mw.smw.ask('[[:+]][[' .. |
local result = mw.smw.ask('[[:+]][[' .. item["name"] .. ']]|?Uses item|?Uses item_and_quantity') |
||
if result and result[1] and result[1]["Uses item"] then |
if result and result[1] and result[1]["Uses item"] then |
||
-- The item is an intermediate material, add it to intermediateMaterials |
-- The item is an intermediate material, add it to intermediateMaterials |
||
table.insert(intermediateMaterials, { ["name"] = |
table.insert(intermediateMaterials, { ["name"] = item["name"], ["quantity"] = item["quantity"] }) |
||
-- Add the raw materials used by this intermediate material to rawMaterials |
-- Add the raw materials used by this intermediate material to rawMaterials |
||
Line 346: | Line 312: | ||
for index, usedItem in ipairs(usesItems) do |
for index, usedItem in ipairs(usesItems) do |
||
local pageName = usedItem:gsub("%[%[", ""):gsub("%]%]", ""):gsub("|.*", ""):gsub("^:", "") |
local pageName = usedItem:gsub("%[%[", ""):gsub("%]%]", ""):gsub("|.*", ""):gsub("^:", "") |
||
local |
local quantity = 1 |
||
if quantities and type(quantities) == "table" then |
if quantities and type(quantities) == "table" then |
||
local quantityString = quantities[index] |
local quantityString = quantities[index] |
||
local _, |
local _, qty = quantityString:match("(.-),(%d+)") |
||
quantity = tonumber(qty) or 1 |
|||
end |
end |
||
table.insert(rawMaterials, { ["name"] = pageName, ["quantity"] = quantity }) |
|||
end |
end |
||
else |
else |
||
local pageName = usesItems:gsub("%[%[", ""):gsub("%]%]", ""):gsub("|.*", ""):gsub("^:", "") |
local pageName = usesItems:gsub("%[%[", ""):gsub("%]%]", ""):gsub("|.*", ""):gsub("^:", "") |
||
local |
local quantity = 1 |
||
if quantities and type(quantities) == "string" then |
if quantities and type(quantities) == "string" then |
||
local _, |
local _, qty = quantities:match("(.-),(%d+)") |
||
quantity = tonumber(qty) or 1 |
|||
end |
end |
||
table.insert(rawMaterials, { ["name"] = pageName, ["quantity"] = quantity }) |
|||
end |
end |
||
else |
else |
||
-- The item is a raw material, add it to rawMaterials |
-- The item is a raw material, add it to rawMaterials |
||
table.insert(rawMaterials, { ["name"] = |
table.insert(rawMaterials, { ["name"] = item["name"], ["quantity"] = item["quantity"] }) |
||
end |
end |
||
end |
end |
||
end |
end |
||
-- Iterate over the initial argsMaterials |
|||
⚫ | |||
if item["name"] then |
|||
_processMaterial(item["name"], item["quantity"]) |
|||
end |
|||
end |
|||
return { rawMaterials = rawMaterials, intermediateMaterials = intermediateMaterials } |
return { rawMaterials = rawMaterials, intermediateMaterials = intermediateMaterials } |
||
end |
end |
||
function p._reverseTable(t) |
|||
local reversed = {} |
|||
for i = #t, 1, -1 do |
|||
table.insert(reversed, t[i]) |
|||
end |
|||
return reversed |
|||
end |
|||
return p |
return p |