Documentation for this module may be created at Module:CatType/doc
local p = {}
function p.generateCategories(frame)
local baseCategory = frame.args[1] or ""
if baseCategory == "" then
return "Error: No base category provided."
end
-- Determine the type based on the base category name
local type = baseCategory:match("spells") or baseCategory:match("skills")
if not type then
-- If it's not spells or skills, check if it's an abilities page
if baseCategory:match("abilities$") then
-- Extract the last two words of the base category name
local words = {}
for word in baseCategory:gmatch("%w+") do
table.insert(words, word)
end
if #words >= 2 then
local lastTwoWords = words[#words - 1] .. " " .. words[#words]
local firstWordCapitalized = lastTwoWords:gsub("^(%w)", string.upper)
local relatedCategory = "Category:" .. firstWordCapitalized
-- Check if the related category exists
local relatedPage = mw.title.new(relatedCategory)
if relatedPage and relatedPage.exists then
return "[[" .. relatedCategory .. "]]"
end
end
return "Warning: Unable to determine related category or it doesn't exist."
else
return "Error: Unable to determine type ('spells', 'skills', or 'abilities') from category name."
end
end
-- Determine the parent category by replacing the detected type with "abilities"
local parentCategory = "Category:" .. baseCategory:gsub(type, "abilities")
-- Attempt to retrieve and expand the content of the parent category
local parentPage = mw.title.new(parentCategory)
if not parentPage then
return "Error: Unable to access the parent category page object: " .. parentCategory
end
local rawParentContent = parentPage:getContent()
if not rawParentContent then
return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
end
-- local tweakedParentContent = rawParentContent:gsub("{{CatType}}", "{{CatType2}}")
-- Expand any templates in the parent category's content
local expandedParentContent = frame:preprocess(rawParentContent)
-- Replace every instance of "abilities]]" with the detected type (e.g., "spells]]" or "skills]]")
local updatedContent = expandedParentContent:gsub("Abilities%]%]", type:gsub("spells", "Spells"):gsub("skills", "Skills") .. "]]")
updatedContent = updatedContent:gsub("abilities%]%]", type .. "]]")
-- Return the updated content along with the parent category
return "[[" .. parentCategory .. "]]\n" .. updatedContent
end
return p