Anonymous user
Module:Arguments: Difference between revisions
add a "wrappers" option and fix bug when frame:getParent() returns nil, per protected edit request by User:Jackmcbarn
(memoize nils using a separate nilArgs table; this fixes a bug where nil values were being iterated over with pairs()) |
(add a "wrappers" option and fix bug when frame:getParent() returns nil, per protected edit request by User:Jackmcbarn) |
||
Line 55:
--[[
-- Get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- is not available, we are being called from another Lua module or from the▼
--
▲ --
-- 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
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if
--[[
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.
--]]
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
else
Line 212 ⟶ 252:
--]]
metaArgs[key] = nil
nilArgs[key] = true
else
metaArgs[key] = val
|