Module:Crafting: Difference between revisions

From Vintage Story Wiki
mNo edit summary
mNo edit summary
Line 10: Line 10:
local link = ''
local link = ''
local split = {}
local split = {}
-- Checks for localized 'Any' and links to appropriate page
if name:match(i18n.any .. '%s(.*)') then
if name:match(i18n.any .. '%s(.*)') then
split = name:match(i18n.any .. '%s(.*)')
split = name:match(i18n.any .. '%s(.*)')
link, image = langVars.link(split)
link, image = langVars.link(split)
out = i18n.any .. ' [[' .. link .. '|' .. split .. ']]'
out = i18n.any .. ' [[' .. link .. '| ' .. split .. ']]'
end
end
if out == '' then
if out == '' then
out = '[[' .. langVars.link(name) .. '|' .. name .. ']]'
out = '[[' .. langVars.link(name) .. '| ' .. name .. ']]'
end
end

Revision as of 02:54, 23 August 2022

Documentation for this module may be created at Module:Crafting/doc

local p = {}

local lang = mw.getContentLanguage():getCode()
local langVars = require( 'Module:LangVars' )
local i18n = langVars.processLang(lang)

function p.ingredient( name )
	local out = ''
	local image = name
	local link = ''
	local split = {}
	
	-- Checks for localized 'Any' and links to appropriate page
	if name:match(i18n.any .. '%s(.*)') then
		split = name:match(i18n.any .. '%s(.*)')
		link, image = langVars.link(split)
		out = i18n.any .. ' [[' .. link .. '| ' .. split .. ']]'
	end
	
	if out == '' then
		out = '[[' .. langVars.link(name) .. '| ' .. name .. ']]'
	end
	
	return out, image
end

function p.main(f)
	args = require( 'Module:ProcessArgs' ).merge( true )
	local frame = mw.getCurrentFrame()
	local cells = {'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3', 'out'}
	
	-- Inserts the item name at the key of the same name to avoid duplicates
	local inputItems = {}
	local itemImages = {}
	for i,v in pairs(cells) do
		if _G.args[v] and i ~= 10 then
			local ingredient, image = p.ingredient(_G.args[v])
			inputItems[ingredient] = ingredient
			itemImages[i] = image
		end
	end
	
	local ingredients = {}
	for i,v in pairs(inputItems) do
		table.insert(ingredients, v)
	end
		
	ingredients = table.concat(ingredients, ' +<br>')
		
	local background = '<td><div style="position:relative; width:170px; height:240px; background: rgb(91,76,62); background: linear-gradient(to bottom, rgba(91,76,62,1) 0px, rgba(91,76,62,0) 15px, rgba(56,43,30,0) calc(100% - 15px), rgba(56,43,30,1) 100%), linear-gradient(to left, rgba(91,76,62,1) 0px, rgba(69,52,36,1) 15px, #403529 50%, rgba(69,52,36,1) calc(100% - 15px), rgba(56,43,30,1) 100%); margin:auto;">'
	
	local notes = ''
	if args.notes then
		notes = '<th style="width:400px"><b>Notes</b></th>'
	end
	
	local header = ''
	if args.header then
		header = '<table class="wikitable mw-collapsible"> <tr><th style="width:200px"><b>Ingredients</b></th> <th><b>Crafting recipe</b></th>' .. notes .. '</tr>'
	end
	
	local hCells = ''
	for i,v in pairs(cells) do
		local str = frame:expandTemplate{title = 'Item cell', args = {i, itemImages[i], _G.args[v .. '_alt']} }
		hCells = hCells .. str
	end
	
	local body = header .. '<tr style="text-align:center;"><td>' .. ingredients .. '</td>' .. background .. hCells .. '</td>' 

	if notes ~= '' then
		body = body .. '<td style="text-align:left;">' .. args.notes .. '</td>'
	end
	
	body = body .. '</tr>'
	
	if args.footer then
		body = body .. '</table>'
	end
	
	return body
end
return p