Module:Pagelist
Jump to navigation
Jump to search
File:Test Template Info-Icon - Version (2).svg Module documentation[view] [edit] [history] [purge]
| File:Green check.svg | 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. |
| Page template-protected | This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
This is a Lua implementation of {{pagelist}}. Please see the template page for documentation.
local p = {}
local separators = {
dot = true,
pipe = true,
comma = true,
['tpt-languages'] = true
}
local function getSeparator(sep)
if type(sep) ~= 'string' then
return nil
end
if separators[sep] then
return mw.message.new(sep .. '-separator'):plain()
else
return sep
end
end
local function generateLink(page, nspace, delim, endDelim)
if not page then
return nil
end
delim = delim or ''
endDelim = endDelim or delim
nspace = nspace or ''
local outStr = mw.ustring.gsub(
string.format(
'%s[[:%s:%s|%s]]%s',
delim, nspace, page, page, endDelim
),
':+',
':'
)
return outStr
end
function p._main(args)
local t = {}
local separator = getSeparator(args.separator)
local conjunction = getSeparator(args.conjunction)
for i, v in ipairs(args) do
table.insert(t, generateLink(
v, args.nspace, args.delim, args.edelim
))
end
return mw.text.listToText(t, separator, conjunction)
end
function p.main(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
trim = false,
removeBlanks = false,
wrappers = 'Template:Pagelist'
})
-- Process integer args. Allow for explicit positional arguments that are
-- specified out of order, e.g. {{br separated entries|3=entry3}}.
-- After processing, the args can be accessed accurately from ipairs.
local args = {}
for k, v in pairs(origArgs) do
if type(k) == 'number' and
k >= 1 and
math.floor(k) == k and
string.match(v, '%S') then -- Remove blank or whitespace values.
table.insert(args, k)
end
end
table.sort(args)
for i, v in ipairs(args) do
args[i] = origArgs[v]
-- Trim whitespace.
if type(args[i]) == 'string' then
args[i] = mw.text.trim(args[i])
end
end
-- Get old named args. We don't need to remove blank values
-- as for the nspace and edelim parameters the behaviour is different
-- depending on whether the parameters are blank or absent, and for
-- the delim parameter the default should be the blank string anyway.
args.delim = origArgs.delim
args.edelim = origArgs.edelim
args.nspace = origArgs.nspace
-- Get new named args, "separator" and "conjunction", and strip blank values.
if origArgs.separator and origArgs.separator ~= '' then
args.separator = origArgs.separator
end
if origArgs.conjunction and origArgs.conjunction ~= '' then
args.conjunction = origArgs.conjunction
end
return p._main(args)
end
return p