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
 
(6 intermediate revisions by the same user not shown)
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
return "Error: Unable to determine type ('spells' or 'skills') from category name."
-- 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 17: Line 40:
local parentCategory = "Category:" .. baseCategory:gsub(type, "abilities")
local parentCategory = "Category:" .. baseCategory:gsub(type, "abilities")


-- Attempt to retrieve the content of the parent category
-- Attempt to retrieve and expand the content of the parent category
local parentPage = mw.title.new(parentCategory)
local parentPage = mw.title.new(parentCategory)
if not parentPage then
if not parentPage then
Line 23: Line 46:
end
end


local parentContent = parentPage:getContent()
local rawParentContent = parentPage:getContent()
if not parentContent then
if not rawParentContent then
return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
return "Error: Unable to retrieve the content of the parent category: " .. parentCategory
end
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]]")
-- Replace every instance of "abilities]]" with the detected type (e.g., "spells]]" or "skills]]")
local updatedContent = parentContent:gsub("abilities%]%]", type .. "]]")
local updatedContent = expandedParentContent: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 .. "]]\n" .. updatedContent
return parentContent
end
end



Latest revision as of 13:57, 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 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