Module:Main: Difference between revisions

From Zelda Wiki, the Zelda encyclopedia
Jump to navigation Jump to search
No edit summary
(support pipe separators like Template:List so that Template:, is not needed)
 
(One intermediate revision by one other user not shown)
Line 13: Line 13:
local categories = err and err.categoryText or ""
local categories = err and err.categoryText or ""
if args.pages == nil or #args.pages == 0 then
local pages = args.pages
if pages == nil or #pages == 0 then
return "", categories
return "", categories
elseif #pages == 1 then -- assume list items are delimited by commas instead of pipes
pages = utilsString.split(pages[1])
end
end
local pages = utilsTable.map(args.pages or {}, p.formatListItem)
pages = utilsTable.map(pages, p.formatListItem)
local pagesOld = pages
pages = utilsTable.compact(pages) -- remove nils
pages = utilsTable.compact(pages) -- remove nils
if #args.pages ~= #pages then
if #pagesOld ~= #pages then
utilsError.warn(string.format("Page list cannot have blank entries: <code>%s</code>", frame:getParent().args[1]))
utilsError.warn(string.format("Page list cannot have blank entries: <code>%s</code>", frame:getParent().args[1]))
categories = categories..CATEGORY_INVALID_ARGS
categories = categories..CATEGORY_INVALID_ARGS
Line 51: Line 55:
["Main"] = {
["Main"] = {
purpose = "To be placed under a heading when that section's topic has its own page or pages.",
purpose = "To be placed under a heading when that section's topic has its own page or pages.",
categories = {"Formatting Templates"},
categories = {"Formatting templates"},
params = {
params = {
[1] = {
["..."] = {
name = "pages",
name = "pages",
required = true,
required = true,
desc = "Comma separated list of wiki page names.",
desc = "Article names",
trim = true,
trim = true,
nilIfEmpty = true,
nilIfEmpty = true,
split = true,
},
},
},
},
examples = {
{"Blue Bubble"},
{"Blue Bubble, Green Bubble, Red Bubble"},
{
desc = "Use {{Template|,}} when an article name contains commas.",
args = {"The Way of Sumo{{,}} Part I, The Way of Sumo{{,}} Part II, The Way of Sumo{{,}} Part III"},
},
{
desc = "Section links are supported but generally discouraged.",
args = {"Zora Shop#Majora's Mask"},
},
{
desc = "Custom link displays are supported but generally discouraged. Links to redirects are preferable.",
args = {"[[The Legend of Zelda (Valiant Comics)/Issue 4#Thief in the Night|Thief in the Night]], Thief in the Night"},
},
{
desc = "Blank entries are not allowed",
args = {"Blue Bubble, , Red Bubble, "},
},
{
desc = "At least one page must be specified.",
args = {""},
},
{},
}
}
}
}
}


return p
return p

Latest revision as of 14:48, 21 July 2023

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