Module:Main
Jump to navigation
Jump to search
This is the main module for the following templates:
Not to be confused with Module:Main Page.
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 = "[[Category:"..require("Module:Constants/category/invalidArgs").."]]"
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: <code>%s</code>", 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|%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