Module:Cat main

From Aikatsu! Photo on Stage!!
Revision as of 18:28, 25 January 2016 by Rikki21 (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This module produces hatnote saying "The main article for this category is x." It implements the {{cat main}} template.

Use from wikitext[edit source | hide]

This module should usually be used via the {{cat main}} template. However, it can also be used from #invoke with the syntax {{#invoke:Cat main|catMain|parameters}}. Please see the {{cat main}} template documentation for available parameters.

Use from other Lua modules[edit source | hide]

Load the module:

local mCatMain = require('Module:Cat main')

You can then use the _catMain function like this:

mCatMain._catMain(options, ...)

options is an optional table that can be used to configure the function's output. There are two available options, "article" and "selfref".

  • article - if this is set to false, "no", "n", "false", or 0, the module outputs "The main page" rather than "The main article". Use the code {article = false}.
  • selfref - this is used when the output is a self-reference to Wikipedia. To set this option, use {selfref = true}. (See the {{selfref}} template for more details on self-references.)

The remaining arguments are page names to be turned into link(s) following the text "The main article for this category is". If no page names are specified, the current page name (minus the namespace name) is used for the first link.

Example 1
mCatMain._catMain(nil, 'Foo')

Produces:

<div class="hatnote relarticle mainarticle">The main article for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>

Displays as:

The main article for this category is Foo.
Example 2
mCatMain._catMain(nil, 'Foo', 'Bar', 'Baz')

Produces:

<div class="hatnote relarticle mainarticle">The main articles for this [[Help:Categories|category]] are '''[[Foo]]''', '''[[Bar]]''' and '''[[Baz]]'''.</div>

Displays as:

The main articles for this category are Foo, Bar and Baz.
Example 3
mCatMain._catMain({article = false}, 'Foo')

Produces:

<div class="hatnote relarticle mainarticle">The main page for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>

Displays as:

The main page for this category is Foo.

Technical details[edit source | hide]

This module uses Module:Hatnote to format the hatnote text.



-- 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 [[Help:Categories|category]] are %s.'
	else
		stringToFormat = 'The main %s for this [[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