ผลต่างระหว่างรุ่นของ "มอดูล:Pagelist"

จากวิกิพีเดีย สารานุกรมเสรี
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Ans (คุย | ส่วนร่วม)
catch p.isRedirect
Ans (คุย | ส่วนร่วม)
simply blank ns check, fix redir
บรรทัด 45: บรรทัด 45:
end
end
if m then
if m then
page = pagename.redirectTarget.prefixedText
pagename = pagename.redirectTarget.text
pagename = pagename.redirectTarget.text
page = pagename
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 = mw.ustring.gsub(
local outStr = string.format(
'%s[[%s:%s|%s]]%s',
string.format(
delim, nspace, pagename, text or page, endDelim
'%s[[:%s:%s|%s]]%s',
delim, nspace, pagename, text or page, endDelim
),
':+',
':'
)
)
return outStr
return outStr

รุ่นแก้ไขเมื่อ 19:57, 16 ตุลาคม 2563

Documentation icon คู่มือการใช้งานมอดูล[ดู] [แก้] [ประวัติ] [ล้างแคช]

การใช้งาน

{{#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|...}}

ตัวอย่าง

  1. {{#invoke:pagelist|main|A|B|C|iOS}} --> A, B, C และ iOS
  2. {{#invoke:pagelist|nav|separator= - | nav delim=<<<|nav edelim=>>>|nspace=all| A|A1| B|| iOS|| iOS|iOS (ระบบปฏิบัติการ)| มอดูล:Pagelist|| C }} --> A1-B-ไอโอเอส-iOS (ระบบปฏิบัติการ)-มอดูล:Pagelist-C
  3. {{#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

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