Module:Foreach

-- Modified from https://www.mediawiki.org/wiki/Module:Foreach -- adds a third argument that toggles whether the for loop parses the table from a single argument string

local p = {}

local function parseArgFour(arg) local tbl = {} for match in (arg..", "):gmatch("(.-)"..", ") do       table.insert(tbl, match); end

return tbl end

function p.w(frame) -- called from Template:Fe

local pframe = frame:getParent local tplname = pframe.args[1] local delim = pframe.args[2] local listType = pframe.args[3] local list = pframe.args local listStartN = 3 if listType == "arg"  then list = parseArgFour(pframe.args[4]) listStartN = 0 end

r = '' for n,v in ipairs(list) do      if n > listStartN then r = r .. delim end if n > listStartN then r = r .. frame:expandTemplate{title = tplname, args = {i=n-listStartN, [1]=v}} end end return r end

function p.m(t,frame) -- to be called from a module -- at the top: p={foreach = require "Module:foreach"} -- example: p.foreach.m({tplname,', ','',item1,item3,item3},frame)

r = '' tplname=t[1] delim=t[2] listType=t[3]

list = t   listStartN = 3 if listType == "arg"  then list = parseArgFour(t[4]) listStartN = 0 end

for n,v in ipairs(list) do      if n > listStartN  then r = r .. delim end if n > listStartN then r = r .. frame:expandTemplate{title = tplname, args = {i=n-listStartN, [1]=v}} end end return r end

return p