मॉड्यूल:Arguments
लुआ त्रुटि मॉड्यूल:High-use में पंक्ति 2 पर: attempt to index a function value। {{#ifeq:|yes|लुआ त्रुटि मॉड्यूल:Message_box में पंक्ति 635 पर: attempt to index a function value।लुआ त्रुटि मॉड्यूल:Category_handler में पंक्ति 256 पर: attempt to index a function value।|{{#switch:{{{type}}}
|tiny = <templatestyles src="Template:Template for discussion/styles.css" />|inline = <templatestyles src="Template:Template for discussion/styles.css" />
|infobox|box|sidebar = <templatestyles src="Template:Template for discussion/styles.css" />
|disabled =
|#default = <templatestyles src="Template:Template for discussion/styles.css" />
}}}} {{#ifeq:Arguments|doc|{{#if:|लुआ त्रुटि मॉड्यूल:Protection_banner में पंक्ति 888 पर: attempt to index a function value।}}|{{#switch:
{{#if: | | {{#ifeq:मॉड्यूल|मॉड्यूल | module | other }} }}
| module = लुआ त्रुटि मॉड्यूल:Message_box में पंक्ति 635 पर: attempt to index a function value।{{#ifeq: Arguments | Sandbox
| | {{#switch: Arguments | doc | sandbox = | {{#ifeq: | true | | {{#switch: p | pre-alpha | prealpha | pa | experimental = | alpha | a = | beta | b = | release | r | general | g | stable = | broken | br | unstable = | protected | protect | p = | semiprotected | semiprotect | semi = }} }} }} }}
| other | #default = साँचा:Error }}}} लुआ त्रुटि मॉड्यूल:Message_box में पंक्ति 635 पर: attempt to index a function value।
This module provides easy processing of arguments passed from #invoke
. It is a meta-module, meant for use by other modules, and should not be called from #invoke
directly (for a module directly invocable by templates you might want to have a look at साँचा:Ml). Its features include:
- Easy trimming of arguments and removal of blank arguments.
- Arguments can be passed by both the current frame and by the parent frame at the same time. (More details below.)
- Arguments can be passed in directly from another Lua module or from the debug console.
- Most features can be customized.
-- This module provides easy processing of arguments passed to Scribunto from #invoke.
local function getArguments(frame, options)
options = type(options) == 'table' and options or {}
local fargs, pargs
if frame == mw.getCurrentFrame() then
fargs = frame.args
pargs = frame:getParent().args
else
fargs = type(frame) == 'table' and frame or {}
pargs = {}
end
local args, metaArgs, metatable = {}, {}, {}
setmetatable(args, metatable)
local function tidyVal(key, val)
-- Processes a value according to the options given to getArguments. Can trim whitespace and remove blanks.
-- Keys are not used here, but they can be used by user-generated functions, so defining it here to avoid breakage.
if type(val) == 'string' then
if options.trim ~= false then
val = mw.text.trim(val)
end
if options.removeBlanks == false or mw.ustring.find(val, '%S') then
return val
end
else
return val
end
end
local valueFunc = options.valueFunc
if valueFunc then
local valueFuncType = type(valueFunc)
if valueFuncType == 'function' then
tidyVal = valueFunc
else
error('type error in option "valueFunc": expected function, got ' .. valueFuncType, 2)
end
end
local function mergeArgs(iterator, ...)
-- Accepts multiple tables as input and merges their keys and values into one table using the specified iterator.
-- If a value is already present it is not overwritten; tables listed earlier have precendence.
local tables = {...}
for _, t in ipairs(tables) do
for key, val in iterator(t) do
if metaArgs[key] == nil then
metaArgs[key] = tidyVal(key, val)
end
end
end
end
local firstArgs, secondArgs = fargs, pargs
if options.parentFirst then
firstArgs, secondArgs = pargs, fargs
end
metatable.__index = function (t, key)
local val = metaArgs[key]
if val ~= nil then
return val
else
local firstVal = tidyVal(key, firstArgs[key])
if firstVal ~= nil then
return firstVal
else
return tidyVal(key, secondArgs[key])
end
end
end
metatable.__newindex = function (t, key, val)
if not options.readOnly and (not options.noOverwrite or metaArgs[key] == nil) then
metaArgs[key] = val
end
end
metatable.__pairs = function ()
if not metatable.donePairs then
mergeArgs(pairs, firstArgs, secondArgs)
metatable.donePairs = true
metatable.doneIpairs = true
end
return pairs(metaArgs)
end
metatable.__ipairs = function ()
if not metatable.doneIpairs then
mergeArgs(ipairs, firstArgs, secondArgs)
metatable.doneIpairs = true
end
return ipairs(metaArgs)
end
return args
end
return getArguments