Module:Main

local p = {}

local utilsArg = require("Module:UtilsArg") local utilsError = require("Module:UtilsError") local utilsMarkup = require("Module:UtilsMarkup") local utilsString = require("Module:UtilsString") local utilsTable = require("Module:UtilsTable")

local CATEGORY_INVALID_ARGS = ""

function p.Main(frame) local args, err = utilsArg.parse(frame:getParent.args, p.Templates.Main) local categories = err and err.categoryText or "" local pages = args.pages if pages == nil or #pages == 0 then return "", categories elseif #pages == 1 then -- assume list items are delimited by commas instead of pipes pages = utilsString.split(pages[1]) end pages = utilsTable.map(pages, p.formatListItem) local pagesOld = pages pages = utilsTable.compact(pages) -- remove nils if #pagesOld ~= #pages then utilsError.warn(string.format("Page list cannot have blank entries: ", frame:getParent.args[1])) categories = categories..CATEGORY_INVALID_ARGS end

local text = #pages > 1 and "Main articles: " or "Main article: " local pageList = text..mw.text.listToText(pages) local hatnote = frame:expandTemplate({		title = "Hatnote",		args = {pageList},	})

return hatnote, categories end

function p.formatListItem(item) item = mw.text.decode(item) if utilsString.isBlank(item) then return nil elseif utilsMarkup.containsLink(item) then return item elseif string.find(item, "#") then local linkDisplay = string.gsub(item, "#", " § ") return string.format("%s", item, linkDisplay) else return string.format("%s", item) end end

p.Templates = { ["Main"] = { purpose = "To be placed under a heading when that section's topic has its own page or pages.", categories = {"Formatting templates"}, params = { ["..."] = {				name = "pages", required = true, desc = "Article names", trim = true, nilIfEmpty = true, },		},	} }

return p