Module:Separated entries
{{safesubst:#switch:
{{safesubst:#if:
| {{{demospace}}}
| {{safesubst:#ifeq:Module|Module
| module
| other
}}
}}
| module = {{#if:p|{{#switch:m |m
|t =
{{#switch: p
| pre-alpha | prealpha | pa | experimental = File:Ambox warning blue construction.svg | alpha | a = File:Greek lc alpha icon.svg | beta | b = File:Greek lc beta icon.svg | release | r | general | g | stable | protected | protect | p | semiprotected | semiprotect | semi = File:Green check.svg | broken | br | unstable = File:Red x.svg | deprecated | d | defunct = File:Historical.svg}} | {{#switch: p
| pre-alpha | prealpha | pa | experimental = This module is rated as pre-alpha. It is incomplete and may or may not be in active development. Do not use it in article namespace pages. A module remains in pre-alpha until its developer, or another editor who adopts it if it is abandoned for some time, considers the basic structure complete. | alpha | a = This module is rated as alpha. It is ready for limited use and third-party feedback. It may be used on a small number of pages, but should be monitored closely. Suggestions for new features or adjustments to input and output are welcome. | beta | b = This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. | release | r | general | g | stable | protected | protect | p | semiprotected | semiprotect | semi = This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. | broken | br | unstable = This module is rated as unstable. It has missing dependencies, compatibility issues, or output errors that make it unusable. Editors are encouraged to improve its compatibility or nominate it for deletion if it cannot be fixed. | deprecated | d | defunct = This module is rated as deprecated and defunct.{{#if:|{{#iferror:{{#expr:1}} |{{#switch:{{{1}}} |fig= |en= |em= |thin= |hair= | }} |{{#switch:{{{2}}} |fig= |en= |em= |thin= |hair= | }} }}It is recommended editors use [[{{{replaced}}}]].}}{{#if:|{{#iferror:{{#expr:1}} |{{#switch:{{{1}}}
|fig=
|en=
|em=
|thin=
|hair=
|
}}
|{{#switch:{{{2}}}
|fig=
|en=
|em=
|thin=
|hair=
|
}}
}}{{{message}}}}} | #default = Page using Template:Template rating with invalid template or module rating in
}} |
{{#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 = }}
| Warning | This Lua module is used on approximately 2,700,000 pages, or roughly 191761% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
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