More actions
Content deleted Content added
No edit summary |
No edit summary |
||
Line 11: | Line 11: | ||
local type = baseCategory:match("spells") or baseCategory:match("skills") |
local type = baseCategory:match("spells") or baseCategory:match("skills") |
||
if not type then |
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 |
end |
||
Line 30: | Line 53: | ||
-- Replace every instance of "abilities]]" with the detected type (e.g., "spells]]" or "skills]]") |
-- Replace every instance of "abilities]]" with the detected type (e.g., "spells]]" or "skills]]") |
||
local updatedContent = parentContent:gsub("Abilities%]%]", type:gsub("spells", "Spells"):gsub("skills", "Skills") .. "]]") |
local updatedContent = parentContent:gsub("Abilities%]%]", type:gsub("spells", "Spells"):gsub("skills", "Skills") .. "]]") |
||
updatedContent = updatedContent:gsub("abilities%]%]", type .. "]]") |
|||
-- Return the updated content |
-- Return the updated content along with the parent category |
||
return "[[" .. parentCategory .. "]]" .. updatedContent |
return "[[" .. parentCategory .. "]]\n" .. updatedContent |
||
end |
end |
||
Revision as of 13:44, 12 January 2025
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 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 parentContent = parentPage:getContent()
if not parentContent then
return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
end
-- Replace every instance of "abilities]]" with the detected type (e.g., "spells]]" or "skills]]")
local updatedContent = parentContent: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