Documentation for this module may be created at Module:FBI QR code/doc
local args = {}
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)
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)
local sections = {}
local nums = union(getArgNums('name'), getArgNums('url'))
for k, v in ipairs(nums) do
local name = args['name' .. tostring(num)]
local url = args['name' .. tostring(num)]
if name and url then
local qr = frame:callParserFunction('#qrlite', {url, format = 'svg', margin = '3'})
table.insert(sections, {name, qr..frame:preprocess('<br>['..url..' '..url..']')})
end
end
return sections
end
function p.makeTabberData(sections)
local finalSections = ''
for k, v in ipairs(sections) do
finalSections = finalSections..'\n|-|'..v[1]..'=\n\n'..v[2]
end
return finalSections
end
function p.makeTabber(frame, sections)
return frame:callParserFunction('#tag', 'pre', 'test'..p.makeTabberData(sections)..'test')
end
function p.main(frame)
local parent = frame:getParent()
-- adapted from [[Module:Infobox]]
if frame == mw.getCurrentFrame() then
args = frame:getParent().args
else
args = frame
end
local sections = p.makeSections(parent)
return p.makeTabber(parent, sections)
end
function p.template(frame)
args = frame.args
local sections = p.makeSections(frame)
return p.makeTabber(frame, sections)
end
return p