Module:FBI QR codes

local p = {}

-- from Module:Infobox -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2)

local vals = {} for k, v in pairs(t1) do		vals[v] = true end for k, v in pairs(t2) do		vals[v] = true end local ret = {} for k, v in pairs(vals) do		table.insert(ret, k)	end return ret end

-- from Module:Infobox -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix, args) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end

function p.makeSections(frame, args) local sections = {} local nums = union(getArgNums('name', args), getArgNums('url', args)) for k, v in ipairs(nums) do local name = args['name' .. tostring(v)] local url = args['url' .. tostring(v)] if name and url then local qr = frame:callParserFunction('#qrlite', {url, format = 'svg', margin = '3'}) table.insert(sections, {name, qr..frame:preprocess(' ['..url..' '..url..']')}) end end return sections end

function p.makeTabberData(sections) local finalSections = '' for k, v in ipairs(sections) do		finalSections = finalSections..'\n\n|-|'..v[1]..'=\n\n'..v[2] end return finalSections end

function p.makeTabber(frame, sections) return frame:callParserFunction('#tag', 'tabber', p.makeTabberData(sections)) end

function p.main(frame) local parent = frame:getParent

local sections = p.makeSections(parent, parent.args) return p.makeTabber(parent, sections) end

function p.template(frame) local args = {} for k,v in pairs(frame.args) do args[k] = mw.text.trim(v) end local sections = p.makeSections(frame, args) return p.makeTabber(frame, sections) end

return p