Jump to content

Module:Separated entries

From Wikihoc

{{safesubst:#switch:

 {{safesubst:#if:
 | {{{demospace}}}    
 | {{safesubst:#ifeq:Module|Module
   | module
   | other
   }}
 }}

| module = {{#if:p|{{#switch:m |m

|t =

{{#if:||

     {{#switch: separated entries
        | doc | sandbox =
        | {{#ifeq:  | true 
            |  
            | {{#switch: p
                | pre-alpha | prealpha | pa | experimental = 
                | alpha | a                                = 
                | beta | b                                 = 
                | release | r | general | g | stable | protected | p | semiprotected | semiprotect | semi = 
                | deprecated | d | defunct = 

| broken | br | unstable =

              }}
          }}
      }}

}} | #default = }}|}}{{#switch:m |t|m = {{#if:

          |
          |{{#switch:Lua error in Module:Effective_protection_level at line 64: attempt to index field 'ext' (a nil value).
               |*|user = 
               |#default = {{#ifeq:separated entries|doc
                   |Lua error in Module:Effective_protection_level at line 64: attempt to index field 'ext' (a nil value).
                -->|Lua error in Module:Effective_protection_level at line 64: attempt to index field 'ext' (a nil value).}}}}}}

|#default = }} | other | #default = }}

Usage

Module:Separated entries serves as a template front-end to mw.text.listToText. It takes any number of positional parameters and pieces them together with |{{SAFESUBST:#if:separator|separator=}}. |{{SAFESUBST:#if:conjunction|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 |{{SAFESUBST:#if:start|start=}}. Leading and trailing whitespace is stripped; if the |{{SAFESUBST:#if:separator|separator=}} should contain spaces, use the HTML escape code  . Separated entries does not raise any errors by design.

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

{{#ifeq:Separated entries|sandbox | |

}}


-- 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