« Module:Outils » : différence entre les versions

De Le Wiki de Lug
Aller à la navigation Aller à la recherche
Modèle>Zebulon84
(extractArgs : correction bug)
m (57 revisions imported)
 
(51 versions intermédiaires par 7 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
local mw = mw or require 'mw'  -- pour debugage sous ecllipse
local Outils = { }
local Outils = { }




-- trim nettoie un paramètre non nommé (supprime les espaces et retours ligne au début et à la fin)
--[[
-- retourne nil si le texte est vide ou n'est pas du texte. Les nombres ne sont PAS considérés comme du texte.
trim nettoie un paramètre non nommé (supprime les espaces et retours ligne au début et à la fin)
retourne nil si le texte est vide ou n'est pas du texte. Les nombres ne sont PAS considérés
comme du texte.
]]
function Outils.trim( texte )
function Outils.trim( texte )
    if type( texte ) == 'string' and texte ~= '' then
if type( texte ) == 'string' and texte ~= '' then
        return mw.text.trim( texte )
texte = texte:gsub( '^%s*(%S?.-)%s*$', '%1' )
    end
if texte ~= '' then
return texte
end
end
return nil
end
end


-- erreur génère une erreur
 
function Outils.erreur( texte )
--[[
    return '<span class="error">' .. (texte or "''aucune erreur indiquée''") .. "</span>"
validTextArg renvoit le premier paramètre chaine non vide
Paramètre :
1 - tableau contenant tous paramètres
2, ... - les noms des paramètres qui doivent êtres testés.
]]
function Outils.validTextArg( args, name, ... )
local texte = Outils.trim( args[name] )
if texte then
return texte
end
if select( '#', ... ) > 0 then
return Outils.validTextArg( args, ... )
end
return nil
end
end


-- validTextArg renvoit le premier paramètre chaine non vide
-- Paramètre :
--      1 - tableau contenant tous paramètres
--      2, ... - les noms des paramètres qui doivent êtres testés.
function Outils.validTextArg( args, name, ... )
    local texte = Outils.trim( args[name] )
    if texte then
        return texte
    end
    if select( '#', ... ) > 0 then
        return Outils.validTextArg( args, ... )
    end
end


-- notEmpty renvoie le premier paramètre non vide ou nul.  
--[[
-- Paramètre :  
notEmpty renvoie le premier paramètre non vide ou nul.
--      1, ... - les variables qui doivent êtres testés.
Paramètre :
1, ... - les variables qui doivent êtres testés.
]]
function Outils.notEmpty( var, ... )
function Outils.notEmpty( var, ... )
    local tvar = type( var )
local texte = Outils.trim( var )
   
if texte then
    if tvar == 'string' and var ~= '' then
return texte
        return mw.text.trim( var )
end
    elseif tvar == 'table' then
 
        local nextFunc = pairs( var )  -- n'utilise pas next car non défini par mw.loadData
local tvar = type( var )
        if nextFunc( var ) ~= nil then
 
            return var
if tvar == 'table' then
        end  
local nextFunc = pairs( var )  -- n'utilise pas next car non défini par mw.loadData
    elseif var == true or ( tvar == 'number' and var ~= 0 ) or tvar == 'function' then
if nextFunc( var ) ~= nil then
        return var
return var
    end
end
   
elseif var == true or ( tvar == 'number' and var ~= 0 ) or tvar == 'function' then
    if select( '#', ... ) > 0 then
return var
        return Outils.notEmpty(  ... )
end
    end
end


-- extractArgs permet de récupérer les arguements du modèle,
if select( '#', ... ) > 0 then
-- ou la table transmise à la fonction par une autre fonction d'un module
return Outils.notEmpty( ... )
-- Paramètres :
end
--      1 - un objet frame ou une table contenant les paramètre
--      2, ...  - une liste de nom de paramètre pour déterminé si les paramètres sont transmis par #invoke:
--          le premier paramètre sera systématiquement testé.
function Outils.extractArgs ( frame, ... )
    if type( frame ) == 'table' then
        if type( frame.getParent ) == 'function' then
            if Outils.validTextArg( frame.args, 1, ...) then
                return frame.args
            else
                local args = frame:getParent().args;
                for k,v in pairs( frame.args ) do
                    args[k] = v;
                end
                return args
            end
        else
            return frame
        end
    else
        return { frame, ... }
    end
end
end


-- abr génère une abréviation (discrète par défaut)
-- paramètres :
--      1 = abréviation,
--      2 = texte,
--      3 = langue,
--      nbsp =  '-' pour une espace insécable avant l'abréviation, '+' pour l'avoir après.
--      visible = true pour une abréviation non discrète
function Outils.abr( frame )
    local args = Outils.extractArgs( frame )
    if args[2] == nil then
        return args[1] or ''                -- retoune l'abréviation ou au minimum une chaine vide s'il n'y a pas de texte
    end
    local wikiText = { '<abbr' }
    if not args.visible then
        table.insert( wikiText, ' class="abbr"' )
    end
    table.insert( wikiText, ' title="' )
    table.insert( wikiText, args[2] )
    if args[3] then
        table.insert( wikiText, '" lang="' )
        table.insert( wikiText, args[3] )
    end
    table.insert( wikiText, '">' )
    table.insert( wikiText, args[1] )
    table.insert( wikiText, '</abbr>' )
    if args.nbsp == '-' then
      table.insert( wikiText, 1, '&nbsp;' )
    elseif args.nbsp == '+' then
      table.insert( wikiText, '&nbsp;' )
    end


    return table.concat( wikiText )
--[[
extractArgs permet de récupérer les arguments du modèle,
ou la table transmise à la fonction par une autre fonction d'un module
Paramètre :
1 - un objet frame ou une table contenant les paramètres
]]
function Outils.extractArgs ( frame )
if type( frame.getParent ) == 'function' then
local args = frame:getParent().args
for k,v in pairs( frame.args ) do
args[k] = v;
end
return args
else
return frame
end
end
end


-- ordinal renvoie une chaine correspondant à l'abréviation de l'adjectif ordinal du nombre.
-- Paramètres :
--        1 = nombre (string ou number)
--        2 = true pour avoir première au lieu de premier su nombre = 1
function Outils.ordinal( nombre, feminin )
    local num = tonumber( nombre )
    if num == nil then
        return Outils.trim( tostring( nombre ) ) or ''
    elseif num == 1 then
        if feminin then
            return Outils.abr{ '1<sup>re</sup>', 'première' }
        else
            return Outils.abr{ '1<sup>er</sup>', 'premier' }
        end
    else
        local nom = mw.loadData( 'Module:Outil/Data' ).ordinal
        if nom[num] then
            return Outils.abr{ num .. '<sup>e</sup>', nom[num] }
        else
            return num .. '<sup>e</sup>'
        end
    end
end


return Outils
return Outils

Version actuelle datée du 9 avril 2021 à 11:52

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

local Outils = { }


--[[
	trim nettoie un paramètre non nommé (supprime les espaces et retours ligne au début et à la fin)
	retourne nil si le texte est vide ou n'est pas du texte. Les nombres ne sont PAS considérés
	comme du texte.
]]
function Outils.trim( texte )
	if type( texte ) == 'string' and texte ~= '' then
		texte = texte:gsub( '^%s*(%S?.-)%s*$', '%1' )
		if texte ~= '' then
			return texte
		end
	end
	return nil
end


--[[
	validTextArg renvoit le premier paramètre chaine non vide
	Paramètre :
		1 - tableau contenant tous paramètres
		2, ... - les noms des paramètres qui doivent êtres testés.
]]
function Outils.validTextArg( args, name, ... )
	local texte = Outils.trim( args[name] )
	if texte then
		return texte
	end
	if select( '#', ... ) > 0 then
		return Outils.validTextArg( args, ... )
	end
	return nil
end


--[[
	notEmpty renvoie le premier paramètre non vide ou nul.
	Paramètre :
		1, ... - les variables qui doivent êtres testés.
]]
function Outils.notEmpty( var, ... )
	local texte = Outils.trim( var )
	if texte then
		return texte
	end

	local tvar = type( var )

	if tvar == 'table' then
		local nextFunc = pairs( var )   -- n'utilise pas next car non défini par mw.loadData
		if nextFunc( var ) ~= nil then
			return var
		end
	elseif var == true or ( tvar == 'number' and var ~= 0 ) or tvar == 'function' then
		return var
	end

	if select( '#', ... ) > 0 then
		return Outils.notEmpty( ... )
	end
end


--[[
	extractArgs permet de récupérer les arguments du modèle,
	ou la table transmise à la fonction par une autre fonction d'un module
	Paramètre :
		1 - un objet frame ou une table contenant les paramètres
]]
function Outils.extractArgs ( frame )
	if type( frame.getParent ) == 'function' then
		local args = frame:getParent().args
		for k,v in pairs( frame.args ) do
			args[k] = v;
		end
		return args
	else
		return frame
	end
end


return Outils