Difference between revisions of "Module:For nowiki/sandbox"

From blackwiki
Jump to navigation Jump to search
blackwiki>Pppery
blackwiki>BrandonXLF
Line 1: Line 1:
 
local p = {}
 
local p = {}
  
local function doLoop(frame, values, config, offset, argstosub)
+
local function doLoop(frame, args, code, sep, offset, argstosub)
local code, sep, passto
+
local result = {}
local argnum = 1
 
if config.passto then
 
passto = config.passto
 
else
 
sep = config[argnum]
 
argunm = argnum + 1
 
end
 
if config.code then
 
code = config.code
 
else
 
code = config[argunm]
 
argnum = argnum + 1
 
end
 
 
code = mw.text.unstripNoWiki(code)
 
code = mw.text.unstripNoWiki(code)
offset = offset or argnum
+
for i, value in ipairs(args) do
 
local result = {}
 
for i, value in ipairs(values) do
 
 
if i > offset then
 
if i > offset then
 
argstosub["i"] = i - offset
 
argstosub["i"] = i - offset
Line 28: Line 12:
 
end
 
end
 
end
 
end
if passto then
+
return table.concat(result, sep)
return frame:expandTemplate{title=passto,args=result}
 
else
 
return table.concat(result, sep)
 
end
 
 
end
 
end
  
 
function p.main(frame)
 
function p.main(frame)
 
local args = frame:getParent().args
 
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 argstosub = {}
 
local argstosub = {}
 
for key, value in pairs(args) do
 
for key, value in pairs(args) do
if not tonumber(key) and key ~= "i" and key ~= "count" and key ~= "code" then
+
if not tonumber(key) and key ~= "i" and key ~= "count" then
 
argstosub[key] = value
 
argstosub[key] = value
 
end
 
end
Line 46: Line 29:
 
if countArg then
 
if countArg then
 
offset = 0
 
offset = 0
values = {}
+
args = {}
 
for i = 1, countArg do
 
for i = 1, countArg do
  values[i] = i
+
  args[i] = i
 
end
 
end
else
 
values = args
 
 
end
 
end
return doLoop(frame, values, args, nil, argstosub)
+
return doLoop(frame, args, code, sep, offset, argstosub)
 
end
 
end
 
function p.template(frame)  
 
function p.template(frame)  
 +
local sep = frame.args[1]
 +
local code = frame.args[2] or frame.args.code
 +
local forceone = frame.args[3]
 
local offset = tonumber(frame.args.offset) or 0
 
local offset = tonumber(frame.args.offset) or 0
return doLoop(frame:getParent(), frame:getParent().args, frame.args, offset, {})
+
local pargs = frame:getParent().args
 +
if forceone and not pargs[1] then
 +
pargs[1] = ''
 +
end
 +
return doLoop(frame:getParent(), frame:getParent().args, code, sep, offset, {})
 
end
 
end
 
return p
 
return p

Revision as of 02:21, 21 January 2020

Documentation for this module may be created at Module:For nowiki/sandbox/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 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
		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 forceone = frame.args[3]
	local offset = tonumber(frame.args.offset) or 0
	local pargs = frame:getParent().args
	if forceone and not pargs[1] then
		pargs[1] = ''
	end
	return doLoop(frame:getParent(), frame:getParent().args, code, sep, offset, {})
end
return p