Aller au contenu

Module:Liste éléments

De Baripedia

La documentation pour ce module peut être créée à Module:Liste éléments/doc

-- module ayant pour rôle de remplacer le code « lourd » de {{m|Liste éléments}}

local p = {}

-- retourne le texte après avoir supprimer les espaces, retour ligne... en début et fin de texte.
-- si texte == nil, la fonction retourne nil. 
-- Si le texte est vide ou composé uniquement d'espces, la fonction retourne un texte vide ''.
function p.trim (texte)
    return texte and string.match (texte, '^%s*(.-)%s*$')
end


-- fonction principale
function p.liste(frame)
    -- on récupère les paramètres
    local args = frame:getParent().args
    local nbsp = nil  -- nombre d'espaces de séparation
    -- note : les paramètres sont testés en provenance du modèle (frame.args) et si absent
    --        en provenance de l'appel au modèle. Permet facilement une surcharge du
    --        comportement depuis les modèles.
    local sep = frame.args["séparateur"] or frame.args["sép"]
    if (sep == nil) then
        sep = args["séparateur"] or args["sép"]
    end
    -- cas spéciaux (de m....)
    if (sep == "2•" or sep == "•2") then
        sep = "•"
        nbsp = 2
    elseif (sep == "2·" or sep == "·2") then
        sep = "·"
        nbsp = 2
    -- on ne peut pas gérer en Lua pour le moment la réception de {{espace}} qui
    -- contient "<nowiki> </nowiki>" car c'est encodé avant d'arriver
    elseif (sep == " " or sep == "&nbsp;" or sep == "espace") then
        nbsp = 0
        sep = " "
    end
    -- caractère séparateur par défaut
    if (sep == nil) then
        sep = "·"
    end
    -- nombre d'espaces autour du séparateur (sauf si cas spécial)
    if (nbsp == nil) then
        nbsp = frame.args["espaces"] or args["espaces"]
    end
    -- valeur par défaut
    if (nbsp == nil) then
        nbsp = 1
    end
    -- on vérifie que c'est un nombre, et qu'il est valide
    nbsp = tonumber(nbsp)
    if (nbsp == nil) then
        -- on ignore et on met la valeur par défaut
        nbsp = 1
    end
    if (nbsp < 0) then
        nbsp = 0
    end

    -- on parcours les paramètres nom nommés dans l'ordre (dans args) pour construire le résultat
    local i = 1
    local res = ""
    local sept = mw.ustring.rep("&nbsp;", nbsp) .. sep .. mw.ustring.rep("&nbsp;", nbsp)
    while (args[i]) do
        if (i > 1) then -- séparateur avant, sauf le premier
            res = res .. sept
        end
        res = res .. '<span class="nowrap">' .. p.trim(args[i]) .. '</span>'
        i = i + 1
    end

    return res
end

-- retour du module
return p