Module:Multiparamètres

From CryptoWiki

Revision as of 06:13, 20 October 2021 by wiki_crypto>Od1n (tout compte fait, retour à la version qui met toujours le préfixe deux-points (en prenant juste soin de ne pas l'ajouter s'il y est déjà, pour ne pas se retrouver dans Spécial:LintErrors/multi-colon-escape) ; c'est plus performant et ces deux-points ne devraient pas poser problème)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Multiparamètres/doc

local p = {}

function p.brut( frame )
    return p._main( frame, function ( item ) return item end )
end

function p.lien( frame )
    return p._main( frame, function ( item ) return '[[' .. ( ( item:sub( 1, 1 ) == ':' ) and item or ':' .. item ) .. ']]' end )
end

function p.categorie( frame )
    return p._main( frame, function ( item ) return '[[:Catégorie:' .. item .. '|' .. item .. ']]' end )
end

function p.utilisateur( frame )
    return p._main( frame, function ( item ) return '[[Utilisateur:' .. item .. '|' .. item .. ']]' end )
end

function p._main( frame, formatter )

    -- http://lua-users.org/wiki/StringTrim
    local function trim( s )
        return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )
    end

    local args = frame:getParent().args

    local gras = ( args.gras and args.gras ~= '' )
    local items = {}

    for i, v in ipairs( args ) do
        local item = trim( v )
        if item ~= '' then
            item = formatter( item )
            if gras then
                item = "'''" .. item .. "'''"
            end
            items[ #items + 1 ] = item
        end
    end

    local dernierSeparateur = args.et and ( ' ' .. args.et .. ' ' )

    -- le paramètre "et" peut être défini à vide, exemple : [[Modèle:Module biblio/responsabilité principale]]
    if args.et == '' then
        dernierSeparateur = ' '
    end

    return mw.text.listToText( items, ', ', dernierSeparateur )
end

return p