« Module:Infobox personnage » : différence entre les versions

De WikiPerche
Aucun résumé des modifications
Aucun résumé des modifications
 
Ligne 3 : Ligne 3 :
local p = {}
local p = {}


-- Renvoie la valeur nettoyée, ou nil si absente/vide
local function clean(v)
local function clean(v)
if v == nil then return nil end
if v == nil then return nil end
Ligne 11 : Ligne 10 :
end
end


-- Ajoute une ligne seulement si la valeur existe ; renvoie toujours l'infobox
local function addRow(box, label, value)
local function addRow(box, label, value)
value = clean(value)
value = clean(value)
if value then
if value then
box:addRow(label, value)
box:addRow(label, value)
end
return box
end
local function addSection(box, title, rows)
local hasContent = false
for _, r in ipairs(rows) do
if clean(r[2]) then
hasContent = true
break
end
end
if not hasContent then
return box
end
box:addHeader(title)
for _, r in ipairs(rows) do
addRow(box, r[1], r[2])
end
end
return box
return box
Ligne 40 : Ligne 57 :
addRow(box, 'Décès', args.deces)
addRow(box, 'Décès', args.deces)


box:addHeader('Métier & vocations')
addSection(box, 'Métier & vocations', {
addRow(box, 'Profession(s)', args.metiers)
{ 'Profession(s)', args.metiers },
addRow(box, 'Mandat(s)', args.mandats)
{ 'Mandat(s)', args.mandats },
})


return box
return box

Dernière version du 8 octobre 2026 à 15:44

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

local capiunto = require 'capiunto'

local p = {}

local function clean(v)
	if v == nil then return nil end
	v = mw.text.trim(tostring(v))
	if v == '' then return nil end
	return v
end

local function addRow(box, label, value)
	value = clean(value)
	if value then
		box:addRow(label, value)
	end
	return box
end

local function addSection(box, title, rows)
	local hasContent = false
	for _, r in ipairs(rows) do
		if clean(r[2]) then
			hasContent = true
			break
		end
	end
	if not hasContent then
		return box
	end

	box:addHeader(title)
	for _, r in ipairs(rows) do
		addRow(box, r[1], r[2])
	end
	return box
end

function p.main(frame)
	local args = frame:getParent().args

	local headerStyle = 'background-color:' .. (clean(args.headerstyle) or '#E3C234') .. ';'
	local titleStyle  = 'background-color:' .. (clean(args.titlestyle) or '#E3C234') .. ';'

	local box = capiunto.create{
		title = clean(args.title),
		titleStyle = titleStyle,
		headerStyle = headerStyle,
	}

	if clean(args.image) then
		box:addImage(args.image, clean(args.caption))
	end

	addRow(box, 'Nom complet', args.nomcomplet)
	addRow(box, 'Naissance', args.naissance)
	addRow(box, 'Décès', args.deces)

	addSection(box, 'Métier & vocations', {
		{ 'Profession(s)', args.metiers },
		{ 'Mandat(s)', args.mandats },
	})

	return box
end

return p