Difference between revisions of "Module:Main/sandbox"
Jump to navigation
Jump to search
test>Frietjes |
test>Nihiltres (Synced with main module, then separated category- and category-talk-namespace functionality to a separate function) |
||
Line 10: | Line 10: | ||
local mHatnote = require('Module:Hatnote') | local mHatnote = require('Module:Hatnote') | ||
local mHatlist = require('Module:Hatnote list') | local mHatlist = require('Module:Hatnote list') | ||
− | local mArguments -- lazily | + | local mArguments -- lazily initialize |
+ | local mLabelledListHatnote = require('Module:Labelled list hatnote') | ||
local p = {} | 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) | function p.main(frame) | ||
mArguments = require('Module:Arguments') | mArguments = require('Module:Arguments') | ||
local args = mArguments.getArgs(frame, {parentOnly = true}) | local args = mArguments.getArgs(frame, {parentOnly = true}) | ||
− | local pages = | + | local pages = mLabelledListHatnote.preprocessDisplays(args) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
local options = { | local options = { | ||
selfref = args.selfref, | selfref = args.selfref, | ||
− | + | template = defaults.templatePage | |
} | } | ||
− | return p._main(pages, options) | + | 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 | end | ||
− | function p. | + | 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( | + | local firstPage = string.gsub(pages[1], '|.*$', '') |
− | + | local pageTypeLabels = | |
− | local | + | mHatnote.findNamespaceId(firstPage) == 0 and |
− | + | defaults.articleTypeLabels or | |
− | + | defaults.otherTypeLabels | |
+ | local pageTypeLabel = isPlural and pageTypeLabels[2] or pageTypeLabels[1] | ||
-- Build the text. | -- Build the text. | ||
− | + | local mainForm = | |
− | 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 | |
− | |||
− | local text = string.format(mainForm, | ||
− | -- Process the options and | ||
− | |||
options = options or {} | options = options or {} | ||
− | local hnOptions = { | + | local hnOptions = {selfref = options.selfref} |
− | |||
− | |||
return mHatnote._hatnote(text, hnOptions) | return mHatnote._hatnote(text, hnOptions) | ||
end | end | ||
return p | return p |
Revision as of 21:29, 14 September 2018
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