Jump to content

Module:ElementAchievementHeader: Difference between revisions

// via Wikitext Extension for VSCode
// via Wikitext Extension for VSCode
Line 25: Line 25:
         -- Protected execution wrapper
         -- Protected execution wrapper
         local function execute()
         local function execute()
            local frame = mw.getCurrentFrame()
           
             -- Get the current page ID
             -- Get the current page ID
             local pageId = mw.title.getCurrentTitle().id
             local pageId = mw.title.getCurrentTitle().id
             if not pageId then
             if not pageId then
                 return "" -- No page ID, can't get achievements
                -- Include debug comment when no page ID available
            end
                 return "<!-- Achievement Header: No page ID available -->"
           
            -- Get title achievement data with frame for JSON loading
            local achievementId, displayName, achievementType = Achievements.getTitleAchievement(pageId, mw.getCurrentFrame())
           
            -- If no title achievement found, return empty string
            if not achievementId or achievementId == "" then
                return ""
             end
             end
              
              
             -- Create the achievement header HTML
             -- Use getTitleAchievement function that specifically checks for type="title"
            local headerClass = template.config.achievementHeader
             -- NOTE: Exactly matching original parameter order from LuaTemplatePerson.lua
                and template.config.achievementHeader.headerClass
             local cssClass, displayName, achievementId = Achievements.getTitleAchievement(pageId, frame)
                or p.defaultConfig.headerClass
           
             -- Build header HTML properly aligned with CSS expectations in Achievements.css
             -- Important: The CSS classes must be directly on the table cell element
            -- The CSS animations are attached to these elements via pseudo-elements
              
              
             -- Debug information to help diagnose the issue
             -- Include debug information
             local debugInfo = string.format("<!-- Achievement Debug: ID=%s, Name=%s, Type=%s, PageID=%s -->",  
             local debugInfo = string.format(
                 achievementId or "nil",  
                "<!-- Achievement Debug: cssClass='%s', displayName='%s', achievementId='%s', pageId='%s' -->",
                 cssClass or "nil",  
                 displayName or "nil",
                 displayName or "nil",
                 achievementType or "nil",
                 achievementId or "nil",
                 pageId or "nil")
                 pageId or "nil"
            )
              
              
             return string.format(
             -- If title achievement found, create a populated row (exact match with original)
                '|-\n! colspan="2" class="%s %s" data-achievement-id="%s" data-achievement-name="%s" | %s%s',
            if cssClass ~= "" and displayName ~= "" and achievementId ~= "" then
                headerClass, achievementId, achievementId, displayName, displayName, debugInfo
                -- Exactly matching original HTML structure from LuaTemplatePerson.lua
             )
                return string.format(
                    '|-\n! colspan="2" class="achievement-header %s" data-achievement-id="%s" data-achievement-name="%s" | %s%s',
                    achievementId, achievementId, displayName, displayName, debugInfo
                )
             else
                -- Return only debug info without creating an actual row
                return debugInfo
            end
         end
         end
          
          
Line 71: Line 70:
         else
         else
             local ok, result = pcall(execute)
             local ok, result = pcall(execute)
             return ok and result or ""
             return ok and result or "<!-- Achievement Header: Protected execution failed -->"
         end
         end
     end
     end

Revision as of 00:39, 7 May 2025

Documentation for this module may be created at Module:ElementAchievementHeader/doc

--[[ 
 * Module:ElementAchievementHeader
 * Renders the achievement header for person templates
 * Displays title achievements with special styling
 * 
 * Integrates with Blueprint template system.
 ]]

local p = {}

p.elementName = "achievementHeader"

-- Load required modules
local ErrorHandling = require('Module:ErrorHandling')
local Achievements = require('Module:AchievementSystem')

-- Default configuration
p.defaultConfig = {
    headerClass = "achievement-header"
}

-- Create block function
function p.createBlock()
    return function(template, args)
        -- Protected execution wrapper
        local function execute()
            local frame = mw.getCurrentFrame()
            
            -- Get the current page ID
            local pageId = mw.title.getCurrentTitle().id
            if not pageId then
                -- Include debug comment when no page ID available
                return "<!-- Achievement Header: No page ID available -->"
            end
            
            -- Use getTitleAchievement function that specifically checks for type="title"
            -- NOTE: Exactly matching original parameter order from LuaTemplatePerson.lua
            local cssClass, displayName, achievementId = Achievements.getTitleAchievement(pageId, frame)
            
            -- Include debug information
            local debugInfo = string.format(
                "<!-- Achievement Debug: cssClass='%s', displayName='%s', achievementId='%s', pageId='%s' -->",
                cssClass or "nil", 
                displayName or "nil",
                achievementId or "nil",
                pageId or "nil"
            )
            
            -- If title achievement found, create a populated row (exact match with original)
            if cssClass ~= "" and displayName ~= "" and achievementId ~= "" then
                -- Exactly matching original HTML structure from LuaTemplatePerson.lua
                return string.format(
                    '|-\n! colspan="2" class="achievement-header %s" data-achievement-id="%s" data-achievement-name="%s" | %s%s',
                    achievementId, achievementId, displayName, displayName, debugInfo
                )
            else
                -- Return only debug info without creating an actual row
                return debugInfo
            end
        end
        
        -- Wrap with error handling
        if template._errorContext then
            return ErrorHandling.protect(
                template._errorContext,
                "ElementBlock_achievementHeader",
                execute,
                ""
            )
        else
            local ok, result = pcall(execute)
            return ok and result or "<!-- Achievement Header: Protected execution failed -->"
        end
    end
end

return p