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.
Revision as of 06:05, 6 April 2025 by pzwiki>Vaileasys (Fix getFlags returning lower string)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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