Module:Arguments: Difference between revisions

    From Nonbinary Wiki
    m>Mr. Stradivarius
    m (tweak comment)
    m (3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf)
     
    (34 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 libraryUtil = require('libraryUtil')
    Line 7: Line 8:
    local arguments = {}
    local arguments = {}


    local nilArg = {} -- Used for memoizing nil arguments in metaArgs.
    -- Generate four different tidyVal functions, so that we don't have to check the
     
    -- options every time we call it.
    -- Generate four different tidyVal functions, so that we don't have to check the options every time we call it.


    local function tidyValDefault(key, val)
    local function tidyValDefault(key, val)
    Line 47: Line 47:
    return val
    return val
    end
    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 }


    function arguments.getArgs(frame, options)
    function arguments.getArgs(frame, options)
    Line 54: Line 61:
    options = options or {}
    options = options or {}


    -- Get the arguments from the frame object if available. If the frame object is not available, we are being called
    --[[
    -- from another Lua module or from the debug console, so assign the args to a new variable so we can differentiate them.
    -- Set up argument translation.
    --]]
    options.translate = options.translate or {}
    if getmetatable(options.translate) == nil then
    setmetatable(options.translate, translate_mt)
    end
    if options.backtranslate == nil then
    options.backtranslate = {}
    for k,v in pairs(options.translate) do
    options.backtranslate[v] = k
    end
    end
    if options.backtranslate and getmetatable(options.backtranslate) == nil then
    setmetatable(options.backtranslate, {
    __index = function(t, k)
    if options.translate[k] ~= k then
    return nil
    else
    return k
    end
    end
    })
    end
     
    --[[
    -- Get the argument tables. If we were passed a valid frame object, get the
    -- frame arguments (fargs) and the parent frame arguments (pargs), depending
    -- on the options set and on the parent frame's availability. If we weren't
    -- passed a valid frame object, we are being called from another Lua module
    -- or from the debug console, so assume that we were passed a table of args
    -- directly, and assign it to a new variable (luaArgs).
    --]]
    local fargs, pargs, luaArgs
    local fargs, pargs, luaArgs
    if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
    if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
    if not options.parentOnly then
    if options.wrappers then
    fargs = frame.args
    --[[
    end
    -- The wrappers option makes Module:Arguments look up arguments in
    if not options.frameOnly then
    -- either the frame argument table or the parent argument table, but
    pargs = frame:getParent().args
    -- not both. This means that users can use either the #invoke syntax
    -- or a wrapper template without the loss of performance associated
    -- with looking arguments up in both the frame and the parent frame.
    -- Module:Arguments will look up arguments in the parent frame
    -- if it finds the parent frame's title in options.wrapper;
    -- otherwise it will look up arguments in the frame object passed
    -- to getArgs.
    --]]
    local parent = frame:getParent()