Editing Module:Arguments
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 47: | Line 47: | ||
return val | return val | ||
end | end | ||
function arguments.getArgs(frame, options) | function arguments.getArgs(frame, options) | ||
Line 60: | Line 53: | ||
frame = frame or {} | frame = frame or {} | ||
options = options or {} | options = options or {} | ||
--[[ | --[[ | ||
Line 114: | Line 82: | ||
local title = parent:getTitle():gsub('/sandbox$', '') | local title = parent:getTitle():gsub('/sandbox$', '') | ||
local found = false | local found = false | ||
if | if type(options.wrappers) == 'table' then | ||
for _,v in pairs(options.wrappers) do | for _,v in pairs(options.wrappers) do | ||
if | if v == title then | ||
found = true | found = true | ||
break | break | ||
end | end | ||
end | end | ||
elseif options.wrappers == title then | |||
found = true | |||
end | end | ||
-- We test for false specifically here so that nil (the default) acts like true. | -- We test for false specifically here so that nil (the default) acts like true. | ||
if found or options.frameOnly == false then | if found or options.frameOnly == false then | ||
Line 149: | Line 117: | ||
luaArgs = frame | luaArgs = frame | ||
end | end | ||
-- Set the order of precedence of the argument tables. If the variables are | -- Set the order of precedence of the argument tables. If the variables are | ||
-- nil, nothing will be added to the table, which is how we avoid clashes | -- nil, nothing will be added to the table, which is how we avoid clashes | ||
-- between the frame/parent args and the Lua args. | -- between the frame/parent args and the Lua args. | ||
local argTables = {fargs} | local argTables = {fargs} | ||
argTables[#argTables + 1] = pargs | argTables[#argTables + 1] = pargs | ||
Line 197: | Line 165: | ||
setmetatable(args, metatable) | setmetatable(args, metatable) | ||
local function mergeArgs(tables) | local function mergeArgs(iterator, tables) | ||
--[[ | --[[ | ||
-- Accepts multiple tables as input and merges their keys and values | -- Accepts multiple tables as input and merges their keys and values | ||
-- into one table. If a value is already present it is not overwritten; | -- into one table using the specified iterator. If a value is already | ||
-- present it is not overwritten; tables listed earlier have precedence. | |||
-- We are also memoizing nil values, which can be overwritten if they | |||
-- are 's' (soft). | |||
--]] | --]] | ||
for _, t in ipairs(tables) do | for _, t in ipairs(tables) do | ||
for key, val in | for key, val in iterator(t) do | ||
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then | if metaArgs[key] == nil and nilArgs[key] ~= 'h' then | ||
local tidiedVal = tidyVal(key, val) | local tidiedVal = tidyVal(key, val) | ||
Line 242: | Line 211: | ||
-- must be nil. | -- must be nil. | ||
--]] | --]] | ||
local val = metaArgs[key] | local val = metaArgs[key] | ||
if val ~= nil then | if val ~= nil then | ||
Line 265: | Line 231: | ||
-- This function is called when a module tries to add a new value to the | -- This function is called when a module tries to add a new value to the | ||
-- args table, or tries to change an existing value. | -- args table, or tries to change an existing value. | ||
if options.readOnly then | if options.readOnly then | ||
error( | error( | ||
Line 294: | Line 257: | ||
else | else | ||
metaArgs[key] = val | metaArgs[key] = val | ||
end | end | ||
end | end | ||
Line 318: | Line 263: | ||
-- Called when pairs is run on the args table. | -- Called when pairs is run on the args table. | ||
if not metatable.donePairs then | if not metatable.donePairs then | ||
mergeArgs(argTables) | mergeArgs(pairs, argTables) | ||
metatable.donePairs = true | metatable.donePairs = true | ||
metatable.doneIpairs = true | |||
end | end | ||
return | return pairs(metaArgs) | ||
end | end | ||
metatable.__ipairs = function () | |||
-- | -- Called when ipairs is run on the args table. | ||
if not metatable.doneIpairs then | |||
if | mergeArgs(ipairs, argTables) | ||
metatable.doneIpairs = true | |||
end | end | ||
return ipairs(metaArgs) | |||
end | end | ||