Module:Main/sandbox

From blackwiki
< Module:Main
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)
Jump to navigation Jump to search

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