Module:Arguments: Difference between revisions

    From Nonbinary Wiki
    m>Mr. Stradivarius
    (don't use "if frame == mw.getCurrentFrame()")
    m (3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf)
     
    (36 intermediate revisions by 26 users not shown)
    Line 1: Line 1:
    -- This module provides easy processing of arguments passed to Scribunto from #invoke.
    -- This module provides easy processing of arguments passed to Scribunto from
    -- It is intended for use by other Lua modules, and should not be called from #invoke directly.
    -- #invoke. It is intended for use by other Lua modules, and should not be
    -- called from #invoke directly.
     
    local libraryUtil = require('libraryUtil')
    local checkType = libraryUtil.checkType


    local arguments = {}
    local arguments = {}


    function arguments.getArgs(frame, options)
    -- Generate four different tidyVal functions, so that we don't have to check the
    options = type(options) == 'table' and options or {}
    -- options every time we call it.
     
    local function tidyValDefault(key, val)
    if type(val) == 'string' then
    val = val:match('^%s*(.-)%s*$')
    if val == '' then
    return nil
    else
    return val
    end
    else
    return val
    end
    end
     
    local function tidyValTrimOnly(key, val)
    if type(val) == 'string' then
    return val:match('^%s*(.-)%s*$')
    else
    return val
    end
    end


    -- Get the arguments from the frame object if available. If the frame object is not available, we are being called
    local function tidyValRemoveBlanksOnly(key, val)
    -- from another Lua module or from the debug console, so put the args in a special table so we can differentiate them.
    if type(val) == 'string' then
    local fargs, pargs, luaArgs
    if val:find('%S') then
    if type(frame) == 'table' and type(frame.args) == 'table' and type(frame.getParent) == 'function' then
    return val
    fargs = frame.args
    else
    pargs = frame:getParent().args
    return nil
    end
    else
    else
    luaArgs = type(frame) == 'table' and frame or {}
    return val
    end
    end
    end
    local function tidyValNoChange(key, val)
    return val
    end
    local function matchesTitle(given, title)
    local tp = type( given )
    return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
    end
    local translate_mt = { __index = function(t, k) return k end }


    -- Set up the args and metaArgs tables. args will be the one accessed from functions, and metaArgs will hold the actual arguments.
    function arguments.getArgs(frame, options)
    -- The metatable connects the two together.
    checkType('getArgs', 1, frame, 'table', true)
    local args, metaArgs, metatable = {}, {}, {}
    checkType('getArgs', 2, options, 'table', true)
    setmetatable(args, metatable)
    frame = frame or {}
    options = options or {}


    local function tidyVal(key, val)
    --[[
    -- Processes a value according to the options given to getArguments. Can trim whitespace and remove blanks.
    -- Set up argument translation.
    -- Keys are not used here, but they can be used by user-generated functions, so defining it here to avoid breakage.
    --]]
    if type(val) == 'string' then
    options.translate = options.translate or {}
    if options.trim