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', 'material'},
		qte = { 'matériau#', 'matcnt'}
	},
	produit = {
		nom = { 'produit', 'product'},
		qte = { 'produit#', 'product#'}
	}
}

local function creerListeSimple(args, param, titre)
	local items = ''
	
	for i = 1, n_liste do
		local materiau = args[param.nom[1] .. i] or args[param.nom[2] .. i] or ''
		if materiau == '' then break end
		
		local quantite = args[param.qte[1] .. i] or args[param.qte[2] .. 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'] or args['workspace'] or ''
	if atelier ~= '' then
		local item = mw.html.create('li')
			:wikitext(atelier)
			:done()
		items = items .. tostring(item)
	end
	
	local saison = args['saison'] or args['season'] or ''
	if saison ~= '' then
		local item = mw.html.create('li')
			:wikitext(saison)
			:done()
		items = items .. tostring(item)
	end
	
	local recette = args['recette'] or args['plan'] or ''
	if recette ~= '' then
		local item = mw.html.create('li')
			:wikitext(recette)
			:done()
		items = items .. tostring(item)
	end
	
	local competence = args['compétence'] or args['skill'] or ''
	if competence ~= '' then
		local niveau = args['niveau'] or args['level'] 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] or args['perk' .. i] or ''
		if aptitude == '' then break end
		
		local item = mw.html.create('li')
			:wikitext(aptitude)
			:done()
		
		items = items .. tostring(item)
	end
	
	local cout = args['coût'] or args['cost'] or ''
	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