Module:For nowiki: Difference between revisions
Jump to navigation
Jump to search
>Pppery I see no usecase for a feature to always perform at least one loop; why not just perform that call outside of the template? |
mp>MusikAnimal m Changed protection settings for "Module:For nowiki": High-risk Lua module: 8,000+ transclusions ([Edit=Require template editor access] (indefinite)) |
||
Line 20: | Line 20: | ||
local code = args.code or args[2] | local code = args.code or args[2] | ||
local offset = args.code and 1 or 2 | local offset = args.code and 1 or 2 | ||
local start = args.start or 1 | |||
local argstosub = {} | local argstosub = {} | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
Line 31: | Line 32: | ||
args = {} | args = {} | ||
for i = 1, countArg do | for i = 1, countArg do | ||
args[i] = i | args[i] = i + start - 1 | ||
end | end | ||
end | end |
Revision as of 19:24, 16 August 2021
Documentation for this module may be created at Module:For nowiki/doc
local p = {}
local function doLoop(frame, args, code, sep, offset, argstosub)
local result = {}
code = mw.text.unstripNoWiki(code)
for i, value in ipairs(args) do
if i > offset then
argstosub["i"] = i - offset
argstosub["1"] = value
local actualCode = code:gsub("{{{([^{}|]*)|?[^{}]*}}}", argstosub)
table.insert(result, frame:preprocess(actualCode))
end
end
return table.concat(result, sep)
end
function p.main(frame)
local args = frame:getParent().args
local sep = args[1]
local code = args.code or args[2]
local offset = args.code and 1 or 2
local start = args.start or 1
local argstosub = {}
for key, value in pairs(args) do
if not tonumber(key) and key ~= "i" and key ~= "count" then
argstosub[key] = value
end
end
local countArg = args.count and tonumber(args.count);
if countArg then
offset = 0
args = {}
for i = 1, countArg do
args[i] = i + start - 1
end
end
return doLoop(frame, args, code, sep, offset, argstosub)
end
function p.template(frame)
local sep = frame.args[1]
local code = frame.args[2] or frame.args.code
local offset = tonumber(frame.args.offset) or 0
return doLoop(frame:getParent(), frame:getParent().args, code, sep, offset, {})
end
return p