Module:FBI QR code
From Hacks Guide Wiki
More actions
This is the approved revision of this page, as well as being the most recent.
Documentation for this module may be created at Module:FBI QR code/doc
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:expandTemplate( { title = 'qrlite', args = { url, format = 'png', margin = '3' } } )
table.insert(sections, {name, '<p class="hb-qrcode-image">'..qr..'</p><p class="hb-qrcode-link">['..url..' '..url..']</p>'})
end
end
return sections
end
function p.makeTabberData(sections)
local finalSections = ''
for k, v in ipairs(sections) do
finalSections = finalSections..'|-|'..v[1]..'='..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