Module:Main/sandbox
< Module:Main
Jump to navigation
Jump to search
Revision as of 21:29, 14 September 2018 by test>Nihiltres (Synced with main module, then separated category- and category-talk-namespace functionality to a separate function)
Documentation for this module may be created at Module:Main/sandbox/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 mHatlist = require('Module:Hatnote list')
local mArguments -- lazily initialize
local mLabelledListHatnote = require('Module:Labelled list hatnote')
local p = {}
local defaults = {
articleTypeListLabels = {'Main article', 'Main articles'},
otherTypeListLabels = {'Main page', 'Main pages'},
articleTypeLabels = {'article', 'articles'},
otherTypeLabels = {'page', 'pages'},
catMainForms = {
'The main %s for this [[Wikipedia:Categorization|category]] is %s',
'The main %s for this [[Wikipedia:Categorization|category]] are %s'
},
templatePage = 'Template:Main'
}
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = mLabelledListHatnote.preprocessDisplays(args)
local options = {
selfref = args.selfref,
template = defaults.templatePage
}
local ns = mw.title.getCurrentTitle().namespace
local outputFunc = ((ns == 14) or (ns == 15)) and p._cat_main or p._main
return outputFunc(pages, options)
end
function p._main(pages, options)
local firstPage = string.gsub(pages[1], '|.*$', '')
local pageTypeLabels =
mHatnote.findNamespaceId(firstPage) == 0 and
defaults.articleTypeListLabels or
defaults.otherTypeListLabels
return mLabelledListHatnote._labelledList(pages, pageTypeLabels, options)
end
function p._cat_main(pages, options)
-- If no first page was specified we default to the current page name.
if #pages == 0 then pages = {mw.title.getCurrentTitle().text} end
-- Get the pagetype label.
local isPlural = #pages > 1
local firstPage = string.gsub(pages[1], '|.*$', '')
local pageTypeLabels =
mHatnote.findNamespaceId(firstPage) == 0 and
defaults.articleTypeLabels or
defaults.otherTypeLabels
local pageTypeLabel = isPlural and pageTypeLabels[2] or pageTypeLabels[1]
-- Build the text.
local mainForm =
isPlural and
defaults.catMainForms[2] or
defaults.catMainForms[1]
local text = string.format(
mainForm,
pageTypeLabel,
mHatlist.andList(pages, true)
)
-- Process the options and output a hatnote
options = options or {}
local hnOptions = {selfref = options.selfref}
return mHatnote._hatnote(text, hnOptions)
end
return p