Module:Main: Difference between revisions
From Zelda Wiki, the Zelda encyclopedia
support pipe separators like Template:List so that Template:, is not needed
PhantomCaleb (talk | contribs) mNo edit summary |
PhantomCaleb (talk | contribs) (support pipe separators like Template:List so that Template:, is not needed) |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
local p = {} | 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) | function p.Main(frame) | ||
return frame:expandTemplate({ | local args, err = utilsArg.parse(frame:getParent().args, p.Templates.Main) | ||
title = " | local categories = err and err.categoryText or "" | ||
args = | |||
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 | end | ||
Line 11: | 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 | categories = {"Formatting templates"}, | ||
params = { | params = { | ||
[ | ["..."] = { | ||
name = "pages", | name = "pages", | ||
required = true, | required = true, | ||
desc = " | desc = "Article names", | ||
trim = true, | trim = true, | ||
nilIfEmpty = true, | nilIfEmpty = true, | ||
}, | }, | ||
}, | }, | ||
} | } | ||
} | } | ||
return p | return p |