Documentation for this module may be created at Module:Main/doc
- --[[
- -- This module produces a link to a main article or articles. It implements the
- -- template {{main}}.
- --
- -- If the module is used in category or category talk space, it produces "The
- -- main article for this category is xxx". Otherwise, it produces
- -- "Main article: xxx".
- --]]
- local mHatnote = require('Module:Hatnote')
- local mTableTools -- lazily initialise
- local mArguments -- lazily initialise
- local p = {}
- function p.main(frame)
- mTableTools = require('Module:TableTools')
- mArguments = require('Module:Arguments')
- local args = mArguments.getArgs(frame, {parentOnly = true})
- local pages = {}
- for k, v in pairs(args) do
- if type(k) == 'number' then
- local display = args['l' .. tostring(k)]
- local page = {v, display}
- pages[k] = page
- end
- end
- pages = mTableTools.compressSparseArray(pages)
- local options = {
- selfref = args.selfref
- }
- return p._main(options, unpack(pages))
- end
- function p._main(options, ...)
- -- Get the list of pages. If no first page was specified we use the current
- -- page name.
- local pages = {...}
- local currentTitle = mw.title.getCurrentTitle()
- local firstPageTable = pages[1]
- local firstPage
- if firstPageTable then
- firstPage = firstPageTable[1]
- else
- firstPage = currentTitle.text
- firstPageTable = {firstPage}
- pages[1] = firstPageTable
- end
- -- Find the pagetype.
- local firstPageNs = mHatnote.findNamespaceId(firstPage)
- local pagetype = firstPageNs == 0 and 'article' or 'page'
- -- Make the formatted link text
- local links = mHatnote.formatPageTables(unpack(pages))
- links = mw.text.listToText(links)
- -- Build the text.
- local isPlural = #pages > 1
- local currentNs = currentTitle.namespace
- local isCategoryNamespace = currentNs - currentNs % 2 == 14
- local stringToFormat
- if isCategoryNamespace then
- if isPlural then
- stringToFormat = 'The main %ss for this'
- .. ' [[Wikipedia:Categorization|category]] are %s'
- else
- stringToFormat = 'The main %s for this'
- .. ' [[Wikipedia:Categorization|category]] is %s'
- end
- else
- if isPlural then
- stringToFormat = 'Main %ss: %s'
- else
- stringToFormat = 'Main %s: %s'
- end
- end
- local text = string.format(stringToFormat, pagetype, links)
- -- Process the options and pass the text to the _rellink function in
- -- [[Module:Hatnote]].
- options = options or {}
- local hnOptions = {
- extraclasses = 'relarticle mainarticle',
- selfref = options.selfref
- }
- return mHatnote._hatnote(text, hnOptions)
- end
- return p
--[[ -- This module produces a link to a main article or articles. It implements the
-- template-- -- If the module is used in category or category talk space, it produces "The -- main article for this category is xxx". Otherwise, it produces -- "Main article: xxx". --]]
local mHatnote = require('Module:Hatnote') local mTableTools -- lazily initialise local mArguments -- lazily initialise
local p = {}
function p.main(frame) mTableTools = require('Module:TableTools') mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame, {parentOnly = true}) local pages = {} for k, v in pairs(args) do if type(k) == 'number' then local display = args['l' .. tostring(k)] local page = {v, display} pages[k] = page end end pages = mTableTools.compressSparseArray(pages) local options = { selfref = args.selfref } return p._main(options, unpack(pages)) end
function p._main(options, ...) -- Get the list of pages. If no first page was specified we use the current -- page name. local pages = {...} local currentTitle = mw.title.getCurrentTitle() local firstPageTable = pages[1] local firstPage if firstPageTable then firstPage = firstPageTable[1] else firstPage = currentTitle.text firstPageTable = {firstPage} pages[1] = firstPageTable end
-- Find the pagetype. local firstPageNs = mHatnote.findNamespaceId(firstPage) local pagetype = firstPageNs == 0 and 'article' or 'page'
-- Make the formatted link text local links = mHatnote.formatPageTables(unpack(pages)) links = mw.text.listToText(links)
-- Build the text. local isPlural = #pages > 1 local currentNs = currentTitle.namespace local isCategoryNamespace = currentNs - currentNs % 2 == 14 local stringToFormat if isCategoryNamespace then if isPlural then stringToFormat = 'The main %ss for this' .. ' category are %s' else stringToFormat = 'The main %s for this' .. ' category is %s' end else if isPlural then stringToFormat = 'Main %ss: %s' else stringToFormat = 'Main %s: %s' end end local text = string.format(stringToFormat, pagetype, links)
-- Process the options and pass the text to the _rellink function in -- Module:Hatnote. options = options or {} local hnOptions = { extraclasses = 'relarticle mainarticle', selfref = options.selfref } return mHatnote._hatnote(text, hnOptions) end
return p