Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:CatType: Difference between revisions

From Teriock
Content deleted Content added
No edit summary
No edit summary
Line 8: Line 8:
end
end


-- Determine type (either "spells" or "skills")
-- Determine the type based on the base category name
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
Line 14: Line 14:
end
end


-- Determine the parent category by replacing the detected type with "abilities"
-- Replace "spells" or "skills" with "abilities" to determine the immediate parent category
local abilitiesCategory = baseCategory:gsub(type, "abilities")
local parentCategory = baseCategory:gsub(type, "abilities")


-- Define the parent categories manually or infer based on naming patterns
-- Get the content of the parent category
local parentContent = mw.title.new(parentCategory):getContent()
local parentCategories = {
if not parentContent then
"Parent abilities",
return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
"Grandparent abilities"
}
end


-- Extract categories from the parent category's content
-- Generate the category tree, replacing "abilities" with the detected type
local result = {}
local categories = {}
for category in parentContent:gmatch("%[%[Category:([^\]]+)%]%]") do
table.insert(result, "[[Category:" .. abilitiesCategory .. "]]")
-- Replace "abilities" with the detected type in each category
for _, parent in ipairs(parentCategories) do
local categoryWithReplacement = parent:gsub("abilities", type)
local updatedCategory = category:gsub("abilities", type)
table.insert(result, "[[Category:" .. categoryWithReplacement .. "]]")
table.insert(categories, "[[Category:" .. updatedCategory .. "]]")
end
end


-- Return the updated categories as a newline-separated string
return table.concat(result, "\n")
return table.concat(categories, "\n")
end
end



Revision as of 13:17, 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
        return "Error: Unable to determine type ('spells' or 'skills') from category name."
    end

    -- Determine the parent category by replacing the detected type with "abilities"
    local parentCategory = baseCategory:gsub(type, "abilities")

    -- Get the content of the parent category
    local parentContent = mw.title.new(parentCategory):getContent()
    if not parentContent then
        return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
    end

    -- Extract categories from the parent category's content
    local categories = {}
    for category in parentContent:gmatch("%[%[Category:([^\]]+)%]%]") do
        -- Replace "abilities" with the detected type in each category
        local updatedCategory = category:gsub("abilities", type)
        table.insert(categories, "[[Category:" .. updatedCategory .. "]]")
    end

    -- Return the updated categories as a newline-separated string
    return table.concat(categories, "\n")
end

return p