Module:Args
From Seul En Groupe
More actions
Documentation for this module may be created at Module:Args/doc
-- Provides functions to cleanly retrieve and process frame arguments, with optional trimming, blank-checking and boolean parsing.
local arguments = {}
-- Adapted variant from: https://en.wikipedia.org/wiki/Module:Yesno
-- Cast values to boolean/number where appropriate
function arguments.getFlag(val)
if val == nil or type(val) == 'boolean' then
return val
elseif type(val) == 'string' then
local v = val:lower()
if v == 'yes'
or v == 'y'
or v == 'true'
or v == 't'
or v == 'on'
then
return true
elseif v == 'no'
or v == 'n'
or v == 'false'
or v == 'f'
or v == 'off'
then
return false
end
end
local num = tonumber(val)
return num or val
end
-- Get an argument with a fallback default
function arguments.get(val, default)
if val == nil or val == '' then
return default
end
val = mw.text.trim(val)
if val == '' then
return default
end
return arguments.getFlag(val)
end
-- Adapted variant from: https://terraria.wiki.gg/wiki/Module:Args
-- Parses frame args with option:
-- wrappers: list of wrapper templates
-- trim: bool, trims whitespace (default true)
-- flag: bool, casts values to boolean/number (default true)
-- keep_blank: retains blank string values (default false)
function arguments.getArgs(frame, option)
frame = frame or mw.getCurrentFrame()
option = option or {}
local trim = option['trim'] ~= false
local flag = option['flag'] ~= false
local keep_blank = option['keep_blank'] or false
local args
if not frame.getParent then
args = frame.args or {} -- fallback for testing
else
args = frame:getParent().args -- invoked by template
end
if option.wrappers then
for _, wrapper in ipairs(option.wrappers) do
if frame:getTitle() == wrapper then
args = frame.args
break
end
end
end
local result = {}
for k, v in pairs(args) do
if trim then
v = mw.text.trim(v)
end
if flag then
v = arguments.getFlag(v)
end
if keep_blank or v ~= '' then
result[k] = v
end
end
return result
end
return arguments