ผลต่างระหว่างรุ่นของ "มอดูล:Pagelist"
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
catch p.isRedirect |
simply blank ns check, fix redir |
||
บรรทัด 45: | บรรทัด 45: | ||
end |
end |
||
if m then |
if m then |
||
⚫ | |||
pagename = pagename.redirectTarget.text |
pagename = pagename.redirectTarget.text |
||
⚫ | |||
else |
else |
||
pagename = pagename.text |
pagename = pagename.text |
||
บรรทัด 60: | บรรทัด 60: | ||
nspace = '' |
nspace = '' |
||
pagename = page |
pagename = page |
||
elseif nspace ~= '' then |
|||
nspace = ':' .. nspace |
|||
end |
end |
||
local outStr = |
local outStr = string.format( |
||
⚫ | |||
string.format( |
|||
⚫ | |||
⚫ | |||
⚫ | |||
), |
|||
':+', |
|||
':' |
|||
) |
) |
||
return outStr |
return outStr |
รุ่นแก้ไขเมื่อ 19:57, 16 ตุลาคม 2563
การจัดอันดับมอดูลไม่ถูกต้องหรือไม่ได้ระบุ |
การใช้งาน
{{#invoke:Pagelist|function_name}} {{#invoke:Pagelist|nav|separator=separator (wikitext)|nav delim=navigator delimiter|nav edelim=navigator end delimiter|page name 1|displayed text 1|page name 2|displayed text 2|page name 3|displayed text 3|...}}
ตัวอย่าง
{{#invoke:pagelist|main|A|B|C|iOS}}
--> A, B, C และ iOS{{#invoke:pagelist|nav|separator= - | nav delim=<<<|nav edelim=>>>|nspace=all| A|A1| B|| iOS|| iOS|iOS (ระบบปฏิบัติการ)| มอดูล:Pagelist|| C }}
--> A1-B-ไอโอเอส-iOS (ระบบปฏิบัติการ)-มอดูล:Pagelist-C{{#invoke:pagelist|nav|separator= - | nav delim=<<<|nav edelim=>>>|nspace=wcat|nav page=Pagelist| A|A1| B|| iOS|| iOS|iOS (ระบบปฏิบัติการ)| มอดูล:Pagelist|| C }}
--> A1-B-ไอโอเอส-iOS (ระบบปฏิบัติการ)-มอดูล:Pagelist-C
คู่มือการใช้งานที่ปรากฏด้านบนนี้ดึงมาจาก มอดูล:Pagelist/doc (แก้ | ประวัติ) ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (สร้าง | คัดลอก) และชุดทดสอบ (สร้าง) ของมอดูลนี้ หน้าย่อยของมอดูลนี้ |
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 isRedir(pagename)
-- this could throw error, since it is expensive
return pagename.isRedirect
end
local function generateLink(page, nspace, delim, endDelim, text, redir)
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
-- not checking pagename.isRedirect will cause every non-redirect pages be listed
-- as transcluded page, however pagename.isRedirect is counted as expensive call,
-- while pagename.redirectTarget not (but cause page be listed as transcluded page)
--if redir and pagename.redirectTarget then
--if redir and pagename.isRedirect then
if redir then
local r, m = pcall(isRedir, pagename)
if not r then
m = pagename.redirectTarget
end
if m then
page = pagename.redirectTarget.prefixedText
pagename = pagename.redirectTarget.text
else
pagename = pagename.text
end
else
pagename = pagename.text
end
end
delim = delim or ''
endDelim = endDelim or delim
nspace = nspace or ''
if nspace == 'all' then
nspace = ''
pagename = page
elseif nspace ~= '' then
nspace = ':' .. nspace
end
local outStr = string.format(
'%s[[%s:%s|%s]]%s',
delim, nspace, pagename, text or 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._nav(args)
local t = {}
local separator = getSeparator(args.separator)
local conjunction = getSeparator(args.conjunction)
do local func, static, var = ipairs(args) while true do
local i, v = func(static, var) var = i
if var == nil then break end
local i, v2 = func(static, var) var = i
table.insert(t, generateLink(
v, args.nspace, args.delim, args.edelim, v2~='' and v2, true
))
if var == nil then break end
end end
return table.concat(t, separator)
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
function p.nav(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
trim = false,
removeBlanks = false,
wrappers = 'Template:Navlist'
})
local args = {}
for i, v in ipairs(origArgs) do
-- Trim whitespace.
if type(v) == 'string' then
args[i] = mw.text.trim(v)
else
args[i] = v
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._nav(args)
end
return p