Toggle menu
3
389
1
853
Seul En Groupe
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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