Module:Infobox commune

De WikiPerche
Version datée du 8 octobre 2026 à 15:45 par Admin (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

La documentation pour ce module peut être créée à Module:Infobox commune/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 'grey') .. ';'
	local titleStyle  = 'background-color:' .. (clean(args.titlestyle) or 'grey') .. ';'

	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, "Nombre d'habitants", args.habitants)
	addRow(box, 'Gentilé', args.gentile)
	addRow(box, 'Site web', args.siteweb)

	addSection(box, 'Géographie', {
		{ 'Superficie', args.superficie },
		{ 'Densité de population', args.densite },
		{ 'Altitude', args.altitude },
		{ 'Bassin de vie', args.bassin },
	})

	addSection(box, 'Informations administratives', {
		{ 'Maire', args.maire },
		{ 'Intercommunalité', args.cdc },
		{ 'Département', args.departement },
		{ 'Région', args.region },
		{ 'Code postal', args.codepostal },
		{ 'Code INSEE', args.codeinsee },
	})

	return box
end

return p