Diferencia entre revisiones de «Módulo:Argumentos»

Contenido eliminado Contenido añadido
mSin resumen de edición
Dos nuevas funciones para facilitar la lectura de argumentos
Línea 58:
return argumentosNormalizados, argumentosDuplicados
end
 
--[[
@name obtenerTablaDeArgumentos
@global args
@param frame
@return table
@descr Obtiene una tabla de argumentos tomando los parámetros recibidos
tando desde la plantilla como desde la invocación de un módulo.
En caso de duplicado tiene preferencia el valor de la invocación.
Por ejemplo:
con la plantilla: {{Plantilla |campo=valor |key=clave }}
y la invocación: {{#invoke:Módulo |key=value }}
se obtiene: { ['campo'] = 'valor', ['key'] = 'value' }
--]]
function z.obtenerTablaDeArgumentos(frame)
-- global args
args = {}
local function paramMerge(orig, copy)
local data = {}
for key, val in pairs(orig) do
data[key] = val
end
for key, val in pairs(copy) do
data[key] = val
end
return data
end
if frame then
-- parentArgs = frame:getParent().args or {}
if type(frame.getParent) == 'function' then
local parent = frame:getParent()
if parent then
args = paramMerge(args, parent.args)
end
end
-- invokeArgs = frame.args or frame or {}
if type(frame.args) == 'table' then
args = paramMerge(args, frame.args)
elseif type(frame) == 'table' then
args = paramMerge(args, frame)
end
end
return args
end
 
--[[
@name obtenerTablaDeArgumentos
@global args
@param list
@return string or nil
@descr Obtiene el primer argumento válido desde una tabla de parámetros.
Esta tabla de parámetros es una lista que contiene los nombres
de los argumentos u otras tablas con las funciones para obtenerlos.
Parámetros:
con los argumentos: { ['campo'] = 'valor', ['key'] = 'value' }
y usando la llamada: obtenerValorDeArgumentos{'dato', 'campo', 'key'}
se obtiene el valor: 'valor'
pues 'dato' no es un argumento y 'campo' es el primero encontrado
Funciones:
también se puede llamar con una función de la forma
obtenerValorDeArgumentos{'dato', { obtenerDato, '1', '2' }}
de forma que si el argumento 'dato' no existe se llama a la función
obtenerDato('1', '2')
--]]
function z.obtenerValorDeArgumentos(list)
-- global args
local lang = mw.language.getContentLanguage()
local err, key
if type(list) == 'number' then
key = args[list]
elseif type(list) == 'string' then
key = args[list] or args[lang:ucfirst(list)]
elseif type(list) == 'table' then
for num, val in ipairs(list) do
if type(val) == 'string' then
key = param(val)
elseif type(val) == 'function' then
err, key = pcall(val)
if err ~= true then
key = nil
end
elseif type(val) == 'table' then
if val[1] and type(val[1]) == 'function' then
err, key = pcall(val[1], unpack(val, 2))
if err ~= true then
key = nil
end
end
end
if key ~= nil and key ~= '' then
return key -- break
end
end
end
return key
end
 
return z