Editing Module:Arguments
Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 46: | Line 46: | ||
local function tidyValNoChange(key, val) | local function tidyValNoChange(key, val) | ||
return val | return val | ||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Line 87: | 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 | ||
Line 170: | 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, but those values can be | |
+ | -- overwritten. | ||
--]] | --]] | ||
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 | + | if metaArgs[key] == nil then |
local tidiedVal = tidyVal(key, val) | local tidiedVal = tidyVal(key, val) | ||
if tidiedVal == nil then | if tidiedVal == nil then | ||
− | nilArgs[key] = | + | nilArgs[key] = true |
else | else | ||
metaArgs[key] = tidiedVal | metaArgs[key] = tidiedVal | ||
Line 223: | Line 219: | ||
for _, argTable in ipairs(argTables) do | for _, argTable in ipairs(argTables) do | ||
local argTableVal = tidyVal(key, argTable[key]) | local argTableVal = tidyVal(key, argTable[key]) | ||
− | if argTableVal | + | if argTableVal == nil then |
+ | nilArgs[key] = true | ||
+ | else | ||
metaArgs[key] = argTableVal | metaArgs[key] = argTableVal | ||
return argTableVal | return argTableVal | ||
end | end | ||
end | end | ||
− | |||
return nil | return nil | ||
end | end | ||
Line 258: | Line 255: | ||
--]] | --]] | ||
metaArgs[key] = nil | metaArgs[key] = nil | ||
− | nilArgs[key] = | + | nilArgs[key] = true |
else | else | ||
metaArgs[key] = val | metaArgs[key] = val | ||
Line 267: | Line 264: | ||
-- 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 pairs(metaArgs) | return pairs(metaArgs) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | metatable.__ipairs = function ( | + | metatable.__ipairs = function () |
-- Called when ipairs is run on the args table. | -- Called when ipairs is run on the args table. | ||
− | return | + | if not metatable.doneIpairs then |
+ | mergeArgs(ipairs, argTables) | ||
+ | metatable.doneIpairs = true | ||
+ | end | ||
+ | return ipairs(metaArgs) | ||
end | end | ||