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

De WikiPerche
Aucun résumé des modifications
Aucun résumé des modifications
 
(3 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :


local p = {}
local p = {}
-- Renvoie la valeur nettoyée, ou nil si absente/vide
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
-- Ajoute une ligne seulement si la valeur existe ; renvoie toujours l'infobox
local function addRow(box, label, value)
value = clean(value)
if value then
box:addRow(label, value)
end
return box
end
-- Ajoute un en-tête + ses lignes, uniquement si au moins une valeur existe
-- rows = { {'Label', valeur}, {'Label', valeur}, ... }
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)
function p.main(frame)
local args = frame:getParent().args
local args = frame:getParent().args
local headerStyle
 
if args.headerstyle and args.headerstyle ~= '' then
local headerStyle = 'background-color:' .. (clean(args.headerstyle) or 'green') .. ';'
headerStyle = string.format('background-color:%s;', args.headerstyle)
local titleStyle  = 'background-color:' .. (clean(args.titlestyle) or 'green') .. ';'
else
 
headerStyle = 'background-color:green;'
local box = capiunto.create{
end
title = clean(args.title),
local retval = capiunto.create( {
titleStyle = titleStyle,
title = args.title,
headerStyle = headerStyle,
headerStyle = headerStyle,  
}
} )
 
    :addHeader('Général')
addRow(box, 'Numéro officiel', args.numeroofficiel)
    :addRow( 'Numéro officiel', args.numeroofficiel )
addRow(box, 'Propriétaire', args.proprietaire)
    :addRow( 'Propriétaire', args.proprietaire )
 
    :addHeader( 'Historique' )
addSection(box, 'Historique', {
:addRow( 'Mise en service', args.miseenservice )
{ 'Mise en service', args.miseenservice },
:addRow( 'Fermeture', args.fermeture )
{ 'Fermeture', args.fermeture },
    :addRow( 'Déclassement', args.declassement)
{ 'Déclassement', args.declassement },
:addRow( 'Concessionnaire original', args.concessionnaireoriginal )
{ 'Concessionnaire original', args.concessionnaireoriginal },
:addHeader( 'Caractéristiques techniques' )
})
    :addRow( 'Longueur', args.longueur )
 
    :addRow( 'Ecartement', args.ecartement)
addSection(box, 'Caractéristiques techniques', {
    :addRow( 'Electrification', args.electrification)
{ 'Longueur', args.longueur },
    :addRow( 'Nombre de voies', args.nbvoies)
{ 'Ecartement', args.ecartement },
    :addRow( 'Pente maximale', args.pentemax)
{ 'Electrification', args.electrification },
return retval
{ 'Nombre de voies', args.nbvoies },
{ 'Pente maximale', args.pentemax },
})
 
return box
end
end


return p
return p

Dernière version du 8 octobre 2026 à 16:42

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

local capiunto = require 'capiunto'

local p = {}

-- Renvoie la valeur nettoyée, ou nil si absente/vide
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

-- Ajoute une ligne seulement si la valeur existe ; renvoie toujours l'infobox
local function addRow(box, label, value)
	value = clean(value)
	if value then
		box:addRow(label, value)
	end
	return box
end

-- Ajoute un en-tête + ses lignes, uniquement si au moins une valeur existe
-- rows = { {'Label', valeur}, {'Label', valeur}, ... }
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 'green') .. ';'
	local titleStyle  = 'background-color:' .. (clean(args.titlestyle) or 'green') .. ';'

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

	addRow(box, 'Numéro officiel', args.numeroofficiel)
	addRow(box, 'Propriétaire', args.proprietaire)

	addSection(box, 'Historique', {
		{ 'Mise en service', args.miseenservice },
		{ 'Fermeture', args.fermeture },
		{ 'Déclassement', args.declassement },
		{ 'Concessionnaire original', args.concessionnaireoriginal },
	})

	addSection(box, 'Caractéristiques techniques', {
		{ 'Longueur', args.longueur },
		{ 'Ecartement', args.ecartement },
		{ 'Electrification', args.electrification },
		{ 'Nombre de voies', args.nbvoies },
		{ 'Pente maximale', args.pentemax },
	})

	return box
end

return p