Module:Tableau d'artisanat

De Les Archives de Vault-Tec
Documentation du module

Ce module génère le modèle {{Tableau d'artisanat}}.

Documentation transclues de Module:Tableau d'artisanat/doc.
local p = {}

local n_liste = 15 -- Nombre maximal d'éléments de chaque liste.

-- à supprimer lorsque le module Icone sera OK
local icone = {
	['portée'] = 'Icon range.png',
	['niveau'] = 'Icon level.png'
}

--[[
	Liste des paramètres acceptés pour les matériaux et les produits
	Compatible français-anglais
]]
local parametres = {
	materiau = {
		nom = 'matériau',
		qte = 'matériau#'
	},
	produit = {
		nom = 'produit',
		qte = 'produit#'
	}
}

local function creerListeSimple(args, param, titre)
	local items = ''
	
	for i = 1, n_liste do
		local materiau = args[param.nom .. i]
		if not materiau then
			break
		end
		
		local quantite = args[param.qte .. i] or '1'
		
		local item = mw.html.create('li')
			:wikitext(materiau .. ' × ' .. quantite)
			:done()
		items = items .. tostring(item)
	end
	
	local res = mw.html.create('div')
		:addClass('artisanat-colonne')
		:tag('div')
			:addClass('artisanat-colonne-titre')
			:wikitext(titre)
			:done()
		:tag('div')
			:addClass('artisanat-colonne-liste')
			:tag('ul')
			:node(items)
		:allDone()
	
	return tostring(res)
end

local function creerListePrerequis(args)
	local items = ''
	
	local atelier = args['poste de travail']
	if atelier then
		local item = mw.html.create('li')
			:wikitext(atelier)
			:done()
		items = items .. tostring(item)
	end
	
	local saison = args['saison']
	if saison then
		local item = mw.html.create('li')
			:wikitext(saison)
			:done()
		items = items .. tostring(item)
	end
	
	local recette = args['recette']
	if recette then
		local item = mw.html.create('li')
			:wikitext(recette)
			:done()
		items = items .. tostring(item)
	end

	local plan = args['plan']
	if plan then
		local item = mw.html.create('li')
			:wikitext(plan)
			:done()
		items = items .. tostring(item)
	end
	
	local competence = args['compétence']
	if competence then
		local niveau = args['niveau'] or 'niveau ?'
		local item = mw.html.create('li')
			:wikitext(competence .. ' : ' .. niveau)
			:done()
		items = items .. tostring(item)
	end
	
	for i = 1, n_liste do
		local aptitude = args['aptitude' .. i]
		if not aptitude then
			break
		end
		
		local item = mw.html.create('li')
			:wikitext(aptitude)
			:done()
		
		items = items .. tostring(item)
	end
	
	local cout = args['coût']
	if cout then
		local item = mw.html.create('li')
			:wikitext('Coût : ' .. cout)
			:done()
		items = items .. tostring(item)
	end
	
	local res = mw.html.create('div')
		:addClass('artisanat-colonne')
		:tag('div')
			:addClass('artisanat-colonne-titre')
			:wikitext('Prérequis')
			:done()
		:tag('div')
			:addClass('artisanat-colonne-liste')
			:tag('ul')
			:node(items)
		:allDone()
	
	return tostring(res)
end

local function creerSeparateur(nomIcone, infobulle)
	local res = mw.html.create('span')
		:addClass('artisanat-separateur')
		:wikitext('[[Fichier:' .. icone[nomIcone] .. '|' .. infobulle .. '|15px|link=|alt=' .. infobulle .. ']]')
		:allDone()
		
	return tostring(res)
end

function p._artisanat(args)
	local res = mw.html.create('div')
		:addClass('artisanat')

	res
		:node(creerListePrerequis(args))
		:node(creerSeparateur('portée', 'nécessite'))
		:node(creerListeSimple(args, parametres.materiau, 'Matériaux'))
		:node(creerSeparateur('niveau', 'produit'))
		:node(creerListeSimple(args, parametres.produit, 'Produits'))

	return res
end

function p.artisanat(frame)
	local args = {}
	local argsParent = frame:getParent().args

	-- Paramètres vides interprétés par Lua.
	for cle, val in pairs(argsParent) do
		if val ~= '' then
			args[cle] = val
		end
	end

	return p._artisanat(args)
end

return p