Module:Separated entries

From No Subject
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Template:If preview Script error: No such module "High-use". Lua error in package.lua at line 80: module 'Module:Message box' not found. Module:Separated entries and {{Separated entries}} serve as a template front-end to mw.text.listToText. They take any number of positional parameters and piece them together with |separator=. |conjunction= can be optionally defined if a different separator is desired between the last and second last items. The starting positional parameter can be specified using |start=. Leading and trailing whitespace is stripped. To add deliberate leading and trailing whitespace, use the HTML entity   for a space and 
 for a "newline". Separated entries does not raise any errors by design.

Usage

{{#invoke:Separated entries|main|separator=...}}

See also


-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.

local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}

function p._main(args)
	local dataPlural = args.dataPlural
	local separator = args.separator
		-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
		and mw.text.decode(args.separator) or ''
	local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
	-- Discard values before the starting parameter.
	local start = tonumber(args.start)
	if start then
		for i = 1, start - 1 do args[i] = nil end
	end
	-- Discard named parameters.
	local values = compressSparseArray(args)
	local result = mw.text.listToText(values, separator, conjunction)
	if dataPlural and #values > 0 and (#separator > 0 or #conjunction > 0) then
		-- flag to [[Module:Detect singular]] whether this is a list with >1 element
		result = result..'<span style="display:none" data-plural="'..(#values > 1 and '1' or '0')..'"></span>'
	end
	return result
end

local function makeInvokeFunction(separator, conjunction, first)
	return function (frame)
		local args = require('Module:Arguments').getArgs(frame, {frameOnly = (frame.args.frameOnly or '') ~= ''})
		args.separator = separator or args.separator
		args.conjunction = conjunction or args.conjunction
		args.first = first or args.first
		return p._main(args)
	end
end

p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())

return p