X

Track changes made to this page

If you find this page useful and would like to be notified of changes made to this page, start by inputting your email below.



Privacy policy
Close this window

powered by ChangeDetection

Cat main

Documentation for this module may be created at Module:Cat main/doc

-- This module implements {{cat main}}.

local mHatnote = require('Module:Hatnote')
local yesno = require('Module:Yesno')
local mTableTools -- lazily initialise
local mArguments -- lazily initialise

local p = {}

function p.catMain(frame)
	mTableTools = require('Module:TableTools')
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame, {wrappers = 'Template:Cat main'})
	local pages = mTableTools.compressSparseArray(args)
	local options = {
		article = args.article,
		selfref = args.selfref
	}
	return p._catMain(options, unpack(pages))
end

function p._catMain(options, ...)
	options = options or {}

	-- Get the links table.
	local links = mHatnote.formatPages(...)
	if not links[1] then
		local page = mw.title.getCurrentTitle().text
		links[1] = mHatnote._formatLink(page)
	end
	for i, link in ipairs(links) do
		links[i] = string.format("'''%s'''", link)
	end

	-- Get the pagetype.
	local pagetype
	if yesno(options.article) ~= false then
		pagetype = 'article'
	else
		pagetype = 'page'
	end

	-- Work out whether we need to be singular or plural.
	local stringToFormat
	if #links > 1 then
		stringToFormat = 'The main %ss for this [[wikipedia:Help:Categories|category]] are %s.'
	else
		stringToFormat = 'The main %s for this [[wikipedia:Help:Categories|category]] is %s.'
	end

	-- Get the text.
	local text = string.format(
		stringToFormat,
		pagetype,
		mw.text.listToText(links)
	)
	
	-- Pass it through to Module:Hatnote.
	local hnOptions = {}
	hnOptions.selfref = options.selfref
	hnOptions.extraclasses = 'relarticle mainarticle'

	return mHatnote._hatnote(text, hnOptions)
end

return p