विभाग:Pagelist
हा विभाग (मॉड्यूल) पान सुरक्षेच्या अधीन असलेला आहे. तो खूप पानांवर वापरल्या जाणारा उच्च-दृश्यतेचा विभाग आहे किंवा, त्याचे substitution वारंवार होते. त्यामधील उत्पात किंवा चुका या अनेक पानांवर परिणाम करु शकतात. किरकोळ किंवा क्षुद्र संपादनही विदागारावर प्रचंड ताण उत्पन्न करु शकते. म्हणून, त्यास संपादनांपासून सुरक्षित केले आहे. |
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 and nspace .. ':' or ''
if nspace == 'all:' then
nspace = ''
pagename = page
end
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