Difference between revisions of "Module:Separated entries"
Jump to navigation
Jump to search
imported>Izkala (don't trim named parameters) |
imported>Amorymeltzer m (Changed protection level for "Module:Separated entries": High-risk Lua module: Over 2M transclusions ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))) |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | local | + | -- 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 = {} | local p = {} | ||
− | + | ||
− | function p. | + | function p._main(args) |
− | local args | + | 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 | |
− | return | + | -- 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) | ||
+ | return mw.text.listToText(values, separator, conjunction) | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | args = | + | 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 | ||
− | |||
end | end | ||
− | + | ||
+ | p.main = makeInvokeFunction() | ||
+ | p.br = makeInvokeFunction('<br />') | ||
+ | p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain()) | ||
+ | |||
return p | return p |
Latest revision as of 21:54, 17 December 2018
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This Lua module is used on approximately 1,750,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to it should first be tested in the module's /sandbox or /testcases subpages. The tested changes can then be added to this page in a single edit. Please 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 |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; if the |separator=
should contain spaces, use the HTML escape code  
. Separated entries does not raise any errors by design.
{{#invoke:Separated entries|main|separator=...}}
-- 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 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) return mw.text.listToText(values, separator, conjunction) 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