Aller au contenu

Module:Bac à sable/Outils

Une page de Wikipédia, l'encyclopédie libre.
Ceci est la version actuelle de cette page, en date du 11 octobre 2022 à 20:58 et modifiée en dernier par Od1n (discuter | contributions) (là j'avais repris l'ordre actuel du module, mais je pense qu'il est préférable de donner la priorité aux arguments passés au modèle, c'est moins suprenant ; si un argument de même nom est présent dans la frame du #invoke et dans la frame du modèle, ce dernier remplace le premier). L'URL présente est un lien permanent vers cette version.
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

 Documentation[créer] [purger]
function Outils.extractArgsGreedy( frame )
    if type( frame.getParent ) == 'function' then
        local args = {}
        for k, v in pairs( frame.args ) do
            args[ k ] = v;
        end
        for k, v in pairs( frame:getParent().args ) do
            args[ k ] = v;
        end
        return args
    else
        return frame
    end
end

function Outils.extractArgsLazy( frame )
    if type( frame.getParent ) ~= 'function' then
        return frame
    end

    local directArgs = frame.args
    local parentArgs = frame:getParent().args
    local nilArgs = {}

    local args = {}

    setmetatable( args, {
        __index = function ( t, key )
            if nilArgs[ key ] then
                return nil
            end

            local directArg = directArgs[ key ]
            if directArg ~= nil then
                t[ key ] = directArg
                return directArg
            end

            local parentArg = parentArgs[ key ]
            if parentArg ~= nil then
                t[ key ] = parentArg
                return parentArg
            end

            nilArgs[ key ] = true
            return nil
        end
    } )

    return args
end