Module:Liste éléments
La documentation pour ce module peut être créée à Module:Liste éléments/Documentation
-- http://lua-users.org/wiki/StringTrim
local function trim( s )
return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )
end
local p = {}
function p.main( frame )
local args = frame:getParent().args
local function getParam( name, default )
if args[ name ] ~= nil and args[ name ] ~= '' then
return args[ name ]
else
return default -- nil si non spécifié
end
end
local paramSep = getParam( 'séparateur', getParam( 'sép', '·' ) )
local espaces = tonumber( getParam( 'espaces', '1' ) )
local glue
if paramSep == ',' then
glue = ', '
elseif ( paramSep:len() > 10 and mw.text.unstripNoWiki( paramSep ) == ' ' ) or paramSep == ' ' then -- {{espace}}
if espaces == 0 then
glue = ''
else
glue = ( '\194\160' ):rep( espaces - 1 ) .. paramSep
end
elseif paramSep == '2·' or paramSep == '·2' then
-- '\194\160' est une espace insécable (code UTF-8 sur deux octets)
glue = '\194\160\194\160<span class="sep-liste">·</span>\194\160 '
elseif paramSep == '2•' or paramSep == '•2' then
glue = '\194\160\194\160•\194\160 '
else
if paramSep == '·' then
paramSep = '<span class="sep-liste">·</span>'
elseif paramSep == '-' then
paramSep = '–' -- tiret demi-cadratin
end
if espaces == 0 then
glue = paramSep
else
glue = ( '\194\160' ):rep( espaces ) .. paramSep .. ( '\194\160' ):rep( espaces - 1 ) .. ' '
end
end
local secable = ( args[ 'sécable' ] == 'oui' )
local items = {}
-- il est permis de laisser des paramètres vides (e.g. {{Liste éléments|foo||baz}}),
-- ceux-ci sont simplement ignorés et ne doivent pas interrompre l'itération
for i, v in ipairs( args ) do
local item = trim( v )
if item ~= '' then
if not secable and ( item:find( ' ', nil, true ) or item:find( '-', nil, true ) ) then
items[ #items + 1 ] = '<span class="nowrap">' .. item .. '</span>'
else
items[ #items + 1 ] = item
end
end
end
-- si la liste est vide, le modèle/module ne doit absolument rien retourner, pas même le templatestyles
if #items > 0 then
local templatestyles = frame:extensionTag( 'templatestyles', '', { src = 'Modèle:Liste éléments/styles.css' } )
return templatestyles .. table.concat( items, glue )
else
return ''
end
end
--[[
Outil pour conversion de {{Liste éléments}} vers {{Liste horizontale}}
remplacer : {{Liste éléments
par : {{subst:Liste éléments vers horizontale
]]--
function p.listeElementsVersHorizontale( frame )
local args = frame:getParent().args
local items = {}
for i, v in ipairs( args ) do
local item = trim( v )
if item ~= '' then
items[ #items + 1 ] = '* ' .. item .. '\n'
end
end
return '{{Liste horizontale|\n' .. table.concat( items ) .. '}}'
end
return p