Module:Separated entries: Difference between revisions

From Seeds of the Word, the encyclopedia of the influence of the Gospel on culture
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 9: Line 9:
function p._main(args)
function p._main(args)
local span = args.span or false
local span = args.span or false
local author = args.author or false
local separator = args.separator
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
Line 24: Line 25:
local values = compressSparseArray(args)
local values = compressSparseArray(args)
if span then  
if span then  
return mw.text.tag( span, {}, mw.text.listToText(values, separator, conjunction) )
local spanAttrs = {}
if author then
spanAttrs.class = 'templatequote-author'
end
return mw.text.tag( 'span', spanAttrs, mw.text.listToText(values, separator, conjunction) )
else
else
return mw.text.listToText(values, separator, conjunction)
return mw.text.listToText(values, separator, conjunction)

Latest revision as of 22:53, September 9, 2020

Documentation for this module may be created at Module:Separated entries/doc

-- 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 span = args.span or false
	local author = args.author or false
	local separator = args.separator
		-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
		and mw.text.decode(args.separator) or ''
	if span then
		separator = '</span>' .. separator .. '<span>'
	end
	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)
	if span then 
		local spanAttrs = {}
		if author then
			spanAttrs.class = 'templatequote-author'
		end
		return mw.text.tag( 'span', spanAttrs, mw.text.listToText(values, separator, conjunction) )
	else
		return mw.text.listToText(values, separator, conjunction)
	end
end

local function makeInvokeFunction(separator, conjunction, first)
	return function (frame)
		local args = require('Module:Arguments').getArgs(frame)
		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