Jump to content

Module:Forward parameters to template call

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Tamzin (talk | contribs) at 01:26, 5 February 2022 (string check). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}
local getArgs = require('Module:Arguments').getArgs

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function convert(args)
	local filter = {}
	local convertPrefixes = {}
	local numberedParams = {}
	for arg, val in pairs(args) do
		if arg == tostring(arg) and arg:match("_convert_prefix") then
			convertPrefixes[#convertPrefixes + 1] = val
		end
	end
	for arg, val in pairs(args) do
		if arg == tonumber(arg) then
			numberedParams[#numberedParams + 1] = val
		else
			for prefix in convertPrefixes do
				if arg == convertPrefix then
					filter[prefix][0] = val
					break
				else
					local prefixnum = arg:match(convertPrefix .. "(%d)")
					if prefixnum then
						filter[prefix][prefixnum] = val
					end
					break
				end
			end
		end
	end
	for _, values in ipairs(filter) do
		for _, val in ipairs(values) do
			numberedParams[#numberedParams + 1] = val
		end
	end
end

function p._main(args)
	local markup = "{{" .. args._template
	local convertedArgs = convert(args)
	for i, val in ipairs(convertedArgs) do
		markup = markup .. "|" .. i .. "=" .. val
	end
	return markup .. "}}"
end

return p