Module:Cat main: Difference between revisions
en>Ruslik0 (rm tfd - kept) |
en>Nihiltres (Updated from sandbox to use Module:Format link) |
||
Line 1: | Line 1: | ||
{{ | -- This module implements {{cat main}}. | ||
{{ | |||
local mHatnote = require('Module:Hatnote') | |||
local mFormatLink = require('Module:Format link') | |||
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 = mFormatLink.formatPages({}, {...}) | |||
if not links[1] then | |||
local page = mw.title.getCurrentTitle().text | |||
links[1] = mFormatLink._formatLink{link = page} | |||
end | |||
for i, link in ipairs(links) do | |||
links[i] = string.format("'''%s'''", link) | |||
end | |||
-- Get the pagetype. | |||
local pages = {...} | |||
local pagetype | |||
if options.article ~= nil then | |||
pagetype = yesno(options.article) ~= false and 'article' or 'page' | |||
elseif pages and pages[1] then | |||
local page = pages[1]:gsub("|.*","") | |||
pagetype = mw.title.new(page).namespace == 0 and "article" or "page" | |||
else | |||
pagetype = "article" | |||
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 | |||
return mHatnote._hatnote(text, hnOptions) | |||
end | |||
return p |
Revision as of 04:11, 24 December 2021
Script error: No such module "High-use". This module produces hatnote saying "The main article for this category is x." It implements the {{cat main}} template.
Use from wikitext
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
Load the module:
<syntaxhighlight lang="lua"> local mCatMain = require('Module:Cat main') </syntaxhighlight>
You can then use the _catMain function like this:
<syntaxhighlight lang="lua"> mCatMain._catMain(options, ...) </syntaxhighlight>
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 <syntaxhighlight lang="lua" class="" id="" style="" inline="1">{article = false}</syntaxhighlight>.
- selfref - this is used when the output is a self-reference to Wikipedia. To set this option, use <syntaxhighlight lang="lua" class="" id="" style="" inline="1">{selfref = true}</syntaxhighlight>. (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
<syntaxhighlight lang="lua"> mCatMain._catMain(nil, 'Foo') </syntaxhighlight> Produces:
<div class="hatnote relarticle mainarticle">The main article for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>
Displays as: Template:Cat main
- Example 2
<syntaxhighlight lang="lua"> mCatMain._catMain(nil, 'Foo', 'Bar', 'Baz') </syntaxhighlight> Produces:
<div class="hatnote relarticle mainarticle">The main articles for this [[Help:Categories|category]] are '''[[Foo]]''', '''[[Bar]]''' and '''[[Baz]]'''.</div>
Displays as: Template:Cat main
- Example 3
<syntaxhighlight lang="lua"> mCatMain._catMain({article = false}, 'Foo') </syntaxhighlight> Produces:
<div class="hatnote relarticle mainarticle">The main page for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>
Displays as: Template:Cat main
Technical details
This module uses Module:Hatnote to format the hatnote text.
-- This module implements {{cat main}}. local mHatnote = require('Module:Hatnote') local mFormatLink = require('Module:Format link') 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 = mFormatLink.formatPages({}, {...}) if not links[1] then local page = mw.title.getCurrentTitle().text links[1] = mFormatLink._formatLink{link = page} end for i, link in ipairs(links) do links[i] = string.format("'''%s'''", link) end -- Get the pagetype. local pages = {...} local pagetype if options.article ~= nil then pagetype = yesno(options.article) ~= false and 'article' or 'page' elseif pages and pages[1] then local page = pages[1]:gsub("|.*","") pagetype = mw.title.new(page).namespace == 0 and "article" or "page" else pagetype = "article" 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 return mHatnote._hatnote(text, hnOptions) end return p