« Module:Infobox ferroviaire » : différence entre les versions
De WikiPerche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (6 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 | |||
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), | |||
local | titleStyle = titleStyle, | ||
title = args.title, | headerStyle = headerStyle, | ||
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', { | |||
return | { 'Longueur', args.longueur }, | ||
{ 'Ecartement', args.ecartement }, | |||
{ 'Electrification', args.electrification }, | |||
{ '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
