Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:FBI QR code: Difference between revisions

From Hacks Guide Wiki
(try callParserFunction instead)
m (Ihaveahax moved page Module:FBI QR codes to Module:FBI QR code without leaving a redirect: match template name)
 
(21 intermediate revisions by the same user not shown)
Line 1: Line 1:
local args = {}
local p = {}
local p = {}


Line 25: Line 23:
-- for the specified prefix. For example, if the prefix was 'data', and
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local function getArgNums(prefix, args)
local nums = {}
local nums = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
Line 35: Line 33:
end
end


function p.makeSections(frame)
function p.makeSections(frame, args)
local sections = {}
local sections = {}
local nums = union(getArgNums('name'), getArgNums('url'))
local nums = union(getArgNums('name', args), getArgNums('url', args))
for k, v in ipairs(nums) do
for k, v in ipairs(nums) do
local name = args['name' .. tostring(num)]
local name = args['name' .. tostring(v)]
local url = args['name' .. tostring(num)]
local url = args['url' .. tostring(v)]
if name and url then
if name and url then
local qr = frame:callParserFunction('#qrlite', {url, format = 'svg', margin = '3'})
local qr = frame:expandTemplate( { title = 'qrlite', args = { url, format = 'png', margin = '3' } } )
table.insert(sections, {name, qr..frame:preprocess('<br>['..url..' '..url..']')})
table.insert(sections, {name, '<p class="hb-qrcode-image">'..qr..'</p><p class="hb-qrcode-link">['..url..' '..url..']</p>'})
end
end
end
end
Line 51: Line 49:
end
end


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


function p.main(frame)
function p.main(frame)
local parent = frame:getParent()
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)
local sections = p.makeSections(parent, parent.args)
return p.makeTabber(parent, sections)
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
end


return p
return p

Latest revision as of 05:24, 31 October 2024

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