Módulo:Ferramentas
Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar. |
Este módulo é usado em aproximadamente 600 000 páginas. (Ver Wikipedia:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na subpágina de testes deste módulo, na subpágina de testes de módulos (ou ainda em sua subpágina de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
Descrição
Este módulo tem funções auxiliares para criar infocaixas.
Uso
Outra documentação:
local Utilidades = { }
--[[
trim limpa um parâmetro sem nome (remove espaços iniciais e finais e retorna no início e no final)
retorna nil se o texto estiver vazio ou não for texto. Números não são considerados
como texto.
]]
function Utilidades.trim( texto )
if type( texto ) == 'string' and texto ~= '' then
texto = texto:gsub( '^%s*(%S?.-)%s*$', '%1' )
if texto ~= '' then
return texto
end
end
return nil
end
--[[
validTextArg retorna o primeiro parâmetro de string não vazio
Parâmetro :
1 - tabela contendo todos os parâmetros
2, ... - os nomes dos parâmetros que devem ser testados.
]]
function Utilidades.validTextArg( args, name, ... )
local texto = Utilidades.trim( args[name] )
if texto then
return texto
end
if select( '#', ... ) > 0 then
return Utilidades.validTextArg( args, ... )
end
return nil
end
--[[
notEmpty retorna o primeiro parâmetro não vazio ou nulo.
Parâmetro :
1, ... - os nomes dos parâmetros que devem ser testados.
]]
function Utilidades.notEmpty( var, ... )
local texto = Utilidades.trim( var )
if texto then
return texto
end
local tvar = type( var )
if tvar == 'table' then
local nextFunc = pairs( var ) -- não use próximo car porque não está definido em 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 Utilidades.notEmpty( ... )
end
end
--[[
extractArgs recupera os argumentos do modelo, ou a tabela
passada para a função por outra função de um módulo,
Parâmetro :
1 - um objeto de quadro ou uma tabela contendo os parâmetros
2, ... - uma lista de nomes de parâmetros para determinar se os parâmetros são passados
por #invoke. O primeiro parâmetro do frame será sistematicamente testado.
]]
function Utilidades.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 Utilidades