Module:Tableau d'artisanat

Révision datée du 5 juin 2021 à 12:16 par Kharmitch (discussion | contributions) (Page créée avec « local p = {} local n_liste = 15 -- Nombre maximal d'éléments de chaque liste. -- Liste des paramètres acceptés pour les matériaux et les produits -- Compatible fran… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
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.

-- Liste des paramètres acceptés pour les matériaux et les produits
-- Compatible français-anglais
local parametres = {
	materiau = {
		nom = { 'materiau', 'material'},
		qte = { 'materiau#', '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 .. ' x ' .. quantite)
			:done()
		items = items .. tostring(item)
	end
	
	local res = mw.html.create('div')
		:addClass('artisanat-liste')
		:tag('div')
			:addClass('artisanat-liste-titre')
			:wikitext(titre .. ' :')
			:done()
		:tag('ul')
		:node(items)
		:allDone()
	
	return tostring(res)
end

local function creerListePrerequis(args)
	local items = ''
	
	local atelier = args['atelier'] or args['worspace'] 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 materiau == '' 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-liste')
		:tag('div')
			:addClass('artisanat-liste-titre')
			:wikitext('Prérequis :')
			:done()
		:tag('ul')
		:node(items)
		:allDone()
	
	return tostring(res)
end

local function creerSeparateur(nomIcone, infobulle)
	local res = mw.html.create('span')
		:wikitext('{{icône|' .. nomIcone .. '|tooltip=' .. infobulle .. '}}')
		:allDone()
		
	return tostring(res)
end

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

	res
		:node(creerListeSimple(args, parametres.materiau, 'Matériaux'))
		:node(creerSeparateur('portée', 'nécessite'))
		:node(creerListePrerequis(args, 'prerequis', 'Prérequis'))
		:node(creerSeparateur('niveau'))
		: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