Module:GetParameters
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Usage
mali niŋgetParameters
mali niŋTakes 2 required arguments, frame_args
and arg_list
. Parses a frame's arguments, returning either the provided named arguments in arg_list
if found or the positional parameters instead if not. This is designed to work around the stripping of values that takes place for defined parameters which could be important.
As an example, the calls getParameters({"a", "b", "c"}, {"x", "y"})
and getParameters({x="a", y="b", z="c"}, {"x", "y"})
would both give back {x="a", y="b"}
.
getBoolean
mali niŋTakes 1 required argument boolean_str
. Turns the input into a true/false boolean value based on the input. Will error if given anything other than a string or boolean value.
defined
mali niŋTo be invoked from inside a template instead of a module. Determines if a certain parameter is defined in the parent frame's arguments.
See also
mali niŋlocal p = {}
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function p.getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
--[[
Helper Function to interpret boolean strings
]]
function p.getBoolean( boolean_str )
local boolean_value;
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower();
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false;
else
boolean_value = true;
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str;
else
error( 'No boolean value found' );
end
return boolean_value
end
function p.defined(frame)
local arg = mw.text.trim(frame.args[1])
--if arg == tostring(tonumber(arg)) then -- undesired result for '-0'
-- arg = tonumber(arg)
--end
--if mw.ustring.find(arg, '^%s*-?[1-9][0-9]*%s*$') ~= nil or arg == '0' then
-- arg = tonumber(arg)
--end
if mw.ustring.find(arg, '^-?[1-9][0-9]*$') ~= nil then
arg = tonumber(arg)
elseif arg == '0' then
arg = 0
end
return frame:getParent().args[arg] ~= nil
end
return p