Jump to content

Module:Category pair

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Hike395 (talk | contribs) at 23:55, 13 January 2022 (bit of code cleanup). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local hatnote = require('Module:Hatnote')._hatnote
local formatLink = require('Module:Format link')._formatLink

local p = {}

local catNS = 14 -- category namespace

-- Lua implementation of [[Template:CategoryPair]]
-- Arguments:
--   prevTitle -- mw.title.Title object for preceding category
--   nextTitle -- mw.title.Title object for succeeding category
-- Returns:
--   hatnote that says "see also" for one or both of prev/next (depending on whether they exist)
function p._pair(prevTitle, nextTitle)
	prevTitle =
		prevTitle and prevTitle.exists and
		formatLink{link = prevTitle.fullText}
	nextTitle =
		nextTitle and nextTitle.exists and
		formatLink{link = nextTitle.fullText}
	local note = ''
	if not prevTitle and not nextTitle then
		return mw.title.getCurrentTitle().namespace == catNS and '[[Category:Pages using category pair with no output]]' or ''
	elseif prevTitle and (not nextTitle) then
		note = mw.ustring.format('See also the preceding %s', prevTitle)
	elseif (not prevTitle) and nextTitle then
		note = mw.ustring.format('See also the succeeding %s', nextTitle)
	elseif prevTitle and nextTitle then
		note = mw.ustring.format(
			'See also the preceding %s and the succeeding %s',
			prevTitle, nextTitle
		)
	end
	return hatnote(note, {extraclasses = 'seealso'})
end

function p.catPair(frame)
	local args = getArgs(frame, {wrappers={'Template:Category pair'}})
	local prevTitle = args[1] and mw.title.new(args[1],catNS)
	local nextTitle = args[2] and mw.title.new(args[2],catNS)
	return p._pair(prevTitle, nextTitle)
end

function p.prevCat(frame)
	local args = getArgs(frame, {wrappers={'Template:Preceding category'}})
	local prevTitle = args[1] and mw.title.new(args[1], catNS)
	return p._pair(prevTitle, nil)
end

function p.nextCat(frame)
	local args = getArgs(frame, {wrappers={'Template:Succeeding category'}})
	local nextTitle = args[1] and mw.title.new(args[1], catNS)
	return p._pair(nil, nextTitle)
end

return p