Autopatrolled users, Bots, Bureaucrats, Confirmed users, Interface administrators, Rollbackers, Administrators, Upload Wizard campaign editors
243
edits
(fix bug where explicitly deleted args were still appearing when iterated over with pairs or ipairs - code courtesy of User:Jackmcbarn) |
m (59 revisions imported) Tags: Mobile edit Mobile web edit |
||
(38 intermediate revisions by 28 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
--
--
--]]
for _, t in ipairs(tables) do
for key, val in
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
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 231 ⟶ 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 257 ⟶ 294:
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 263 ⟶ 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
|