|
|
Line 55: |
Line 55: |
|
| |
|
| --[[ | | --[[ |
| -- Get the argument tables. If we were passed a valid frame object, get the | | -- Get the arguments from the frame object if available. If the frame object |
| -- frame arguments (fargs) and the parent frame arguments (pargs), depending
| | -- is not available, we are being called from another Lua module or from the |
| -- on the options set and on the parent frame's availability. If we weren't
| | -- debug console, so assign the args to a new variable so we can |
| -- passed a valid frame object, we are being called from another Lua module | | -- differentiate them. |
| -- 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 options.wrappers then | | if not options.parentOnly then |
| --[[
| | fargs = frame.args |
| -- The wrappers option makes Module:Arguments look up arguments in
| | end |
| -- either the frame argument table or the parent argument table, but
| | if not options.frameOnly then |
| -- not both. This means that users can use either the #invoke syntax
| | pargs = frame:getParent().args |
| -- or a wrapper template without the loss of performance associated
| | end |
| -- with looking arguments up in both the frame and the parent frame.
| | if options.parentFirst then |
| -- Module:Arguments will look up arguments in the parent frame
| | fargs, pargs = pargs, fargs |
| -- 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()
| |
| if not parent then
| |
| fargs = frame.args
| |
| else | |
| local title = parent:getTitle():gsub('/sandbox$', '')
| |
| local found = false
| |
| if type(options.wrappers) == 'table' then
| |
| for _,v in pairs(options.wrappers) do
| |
| if v == title then
| |
| found = true
| |
| break
| |
| end
| |
| end
| |
| elseif options.wrappers == title then
| |
| found = true
| |
| end
| |
| if found then
| |
| pargs = parent.args
| |
| else
| |
| fargs = frame.args
| |
| end
| |
| end
| |
| else | |
| -- options.wrapper isn't set, so check the other options.
| |
| if not options.parentOnly then
| |
| fargs = frame.args
| |
| end | |
| if not options.frameOnly then
| |
| local parent = frame:getParent()
| |
| pargs = parent and parent.args or nil
| |
| end
| |
| if options.parentFirst then
| |
| fargs, pargs = pargs, fargs
| |
| end
| |
| end | | end |
| else | | else |
Line 252: |
Line 212: |
| --]] | | --]] |
| metaArgs[key] = nil | | metaArgs[key] = nil |
| nilArgs[key] = true | | nilArgs[key] = true -- Memoize nils. |
| else | | else |
| metaArgs[key] = val | | metaArgs[key] = val |