Difference between revisions of "Module:Pagelist"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius m (Changed protection level of Module:Pagelist: High-risk Lua module: allow template editors ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))) |
blackwiki>Mr. Stradivarius (remove the getPageObject as it is no longer expensive, use Module:Arguments, and fix indenting and whitespace) |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
| − | + | local separators = { | |
| − | + | dot = true, | |
| − | + | pipe = true, | |
| − | - | + | comma = true, |
| − | function | + | ['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 | end | ||
| − | + | local function generateLink(page, nspace, delim, endDelim) | |
| − | local function | + | if not page then |
| − | + | return nil | |
| − | + | end | |
| − | + | local pagename = mw.title.new(page) | |
| − | + | if not pagename then | |
| − | + | -- Default to the args we were passed if our page | |
| − | + | -- object was nil. | |
| − | + | pagename = page | |
| − | + | else | |
| − | + | pagename = pagename.text | |
| − | + | end | |
| − | + | delim = delim or '' | |
| − | + | endDelim = endDelim or delim | |
| + | nspace = nspace or mw.title.getCurrentTitle().nsText | ||
| + | return string.format( | ||
| + | '%s[[:%s:%s|%s]]%s', | ||
| + | delim, nspace, pagename, page, endDelim | ||
| + | ) | ||
end | 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 | 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 | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
return p | return p | ||
Revision as of 04:32, 12 January 2015
| 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 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
local pagename = mw.title.new(page)
if not pagename then
-- Default to the args we were passed if our page
-- object was nil.
pagename = page
else
pagename = pagename.text
end
delim = delim or ''
endDelim = endDelim or delim
nspace = nspace or mw.title.getCurrentTitle().nsText
return string.format(
'%s[[:%s:%s|%s]]%s',
delim, nspace, pagename, page, endDelim
)
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