Module:Fermentation

De Les Archives de Vault-Tec

La documentation pour ce module peut être créée à Module:Fermentation/doc

local p = {}

local OUI = 'oui'
local LF = '\n'

------------------------------------------------
-----     Référentiel des interactions     ----- 
------------------------------------------------

local data = {
    -- Interaction spéciale si aucune autre, ne pas toucher --------
	["aucune"] = {
		image        = "Neutral test color.png",
		description  = "Ce personnage ne possède pas d'interaction particulière."
	},
    ----------------------------------------------------------------
	["fermentable"] = {
		checkIfYes   = false,
	},
	["fermenté"] = {
		checkIfYes   = false,
	},   
	["mature"] = {
		checkIfYes   = false,
	}
}

------------------------------------------------

function buildRow(args, def)	
	local note = def.note
	if note then
		if type(note) == 'function' then
			note = note(args)
		end
	end
	
	return mw.html.create( 'li' )
		:addClass( 'avt-interactions-row' )
		:node(image)
		:tag( 'div' )
			:addClass( 'avt-interactions-text' )
			:node(description)
			:node(note)
		:done()
end

function p._build(args)
	local res = mw.html.create( 'ul' )
		:addClass( 'avt-interactions' )
	
	-- on trie les arguments par ordre alphabétique
	local keys = {}
	for k, v in pairs(args) do
		table.insert(keys, k)
	end
	table.sort(keys)
	
	local isEmpty = true
	
	for i, key in ipairs(keys) do
		argValue = args[key]
		local def = data[key:lower()]
		if def and (not def.checkIfYes or argValue:lower() == OUI) and argValue ~= '-' then
			isEmpty = false
			res:node(buildRow(args, def))
		end
	end
	
	-- cas particulier le pnj n'a aucune interaction
	if isEmpty then
		res:node(buildRow(args, data.aucune))
	end
	
	res:allDone()
	
	return res
end

function p.build(frame)
	local args = {}
	
	local argsParent = frame:getParent().args
	for cle, val in pairs(argsParent) do
		if val then
			val = mw.text.trim(val)
			if val ~= '' then
				args[cle] = mw.text.trim(val)
			end
		end
	end
	
	return p._build(args)
end

return p