Module:Main

From Semantic Stargate Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Documentation icon Module documentation[create]
--[[
-- 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