Autopatrolled users, Bots, Bureaucrats, Confirmed users, Interface administrators, Rollbackers, Administrators, Upload Wizard campaign editors
243
edits
(allow using both the frame and parent frame arguments with the wrappers option if specifically requested, per protected edit request by User:Jackmcbarn) |
m (59 revisions imported) Tags: Mobile edit Mobile web edit |
||
(40 intermediate revisions by 30 users not shown) | |||
Line 47:
return val
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)
Line 53 ⟶ 60:
frame = frame or {}
options = options or {}
--[[
-- 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)
return nil
else▼
return k
end▼
end
})
end
--[[
Line 82 ⟶ 114:
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if
found = true▼
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v
found = true
break
end
end
▲ elseif options.wrappers == title then
▲ found = true
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
Line 117 ⟶ 149:
luaArgs = frame
end
-- 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
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
Line 165 ⟶ 197:
setmetatable(args, metatable)
local function mergeArgs(
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table
--
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] =
else
metaArgs[key] = tidiedVal
Line 211 ⟶ 242:
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
Line 219 ⟶ 253:
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal
nilArgs[key] = true▼
▲ else
metaArgs[key] = argTableVal
return argTableVal
end
end
return nil
end
Line 232 ⟶ 265:
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
Line 255 ⟶ 291:
--]]
metaArgs[key] = nil
nilArgs[key] =
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
Line 264 ⟶ 318:
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(
metatable.donePairs = true
end
return
end
-- This uses our __index metamethod
-- Called when ipairs is run on the args table.▼
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
▲ -- Called when ipairs is run on the args table.
return inext, t, 0
end
|