Module:Toolbar: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(allow access to the p._main function from other modules, return the blank string if no arguments were specified, and switch indentation to tabs)
(reorder the functions, and add an option to remove the enclosing span tags)
Line 1: Line 1:
-- This module implements {{toolbar}}.

local mArguments -- Lazily initialise [[Module:Arguments]]
local mTableTools = require('Module:TableTools')
local yesno = require('Module:Yesno')

local p = {}
local p = {}


local function getArgNums(args)
function p.main(frame)
mArguments = require('Module:Arguments')
-- Get the keys of the numerical arguments that are present.
local nums = {}
local args = mArguments.getArgs(frame)
return p._main(args)
local tinsert = table.insert
end
for k, v in pairs(args) do

if type(k) == 'number' then
function p._main(args)
tinsert(nums, k)
local toolbarItems = p.makeToolbarItems(args)
end
if not toolbarItems then
-- Return the blank string if no arguments were specified, rather than
-- returning empty brackets.
return ''
elseif yesno(args.span) == false then
return string.format(
'(%s)',
toolbarItems
)
else
return string.format(
'<span class="plainlinks%s"%s>(%s)</span>',
type(args.class) == 'string' and ' ' .. args.class or '',
type(args.style) == 'string' and string.format(' style="%s"', args.style) or '',
toolbarItems
)
end
end
table.sort(nums)
return nums
end
end


local function makeToolbarItems(args)
function p.makeToolbarItems(args)
local nums = getArgNums(args)
local nums = mTableTools.numKeys(args)
local sep = (args.separator or 'pipe') .. '-separator'
local sep = (args.separator or 'pipe') .. '-separator'
sep = mw.message.new(sep):plain()
sep = mw.message.new(sep):plain()
local ret = {}
local ret = {}
local tinsert = table.insert
for i, v in ipairs(nums) do
for i, v in ipairs(nums) do
tinsert(ret, args[v])
ret[#ret + 1] = args[v]
end
end
if #ret > 0 then
if #ret > 0 then
return table.concat(ret, sep)
return table.concat(ret, sep)
end
end

function p._main(args)
local toolbarItems = makeToolbarItems(args)
if not toolbarItems then return '' end -- Return the blank string if no arguments were specified, rather than returning empty brackets
return mw.ustring.format(
'<span class="plainlinks%s"%s>(%s)</span>',
type(args.class) == 'string' and ' ' .. args.class or '',
type(args.style) == 'string' and mw.ustring.format(' style="%s"', args.style) or '',
toolbarItems
)
end

function p.main(frame)
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs(frame.args) do
origArgs = frame.args
break
end
else
else
return nil
origArgs = frame
end
end
-- Strip whitespace and remove nil values
local args = {}
for k, v in pairs(origArgs) do
if type(v) == 'string' then
v = mw.text.trim(v)
end
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
end



Revision as of 08:26, April 5, 2014

This module implements {{toolbar}}. Please see the template page for documentation.

See also


-- This module implements {{toolbar}}.

local mArguments -- Lazily initialise [[Module:Arguments]]
local mTableTools = require('Module:TableTools')
local yesno = require('Module:Yesno')

local p = {}

function p.main(frame)
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame)
	return p._main(args)
end

function p._main(args)
	local toolbarItems = p.makeToolbarItems(args)
	if not toolbarItems then
		-- Return the blank string if no arguments were specified, rather than
		-- returning empty brackets.
		return ''
	elseif yesno(args.span) == false then
		return string.format(
			'(%s)',
			toolbarItems
		)
	else
		return string.format(
			'<span class="plainlinks%s"%s>(%s)</span>',
			type(args.class) == 'string' and ' ' .. args.class or '',
			type(args.style) == 'string' and string.format(' style="%s"', args.style) or '',
			toolbarItems
		)
	end
end

function p.makeToolbarItems(args)
	local nums = mTableTools.numKeys(args)
	local sep = (args.separator or 'pipe') .. '-separator'
	sep = mw.message.new(sep):plain()
	local ret = {}
	for i, v in ipairs(nums) do
		ret[#ret + 1] = args[v]
	end
	if #ret > 0 then
		return table.concat(ret, sep)
	else
		return nil
	end
end

return p