Module:ElementAchievementHeader
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"
-- IMPORTANT: The function returns achievementId, displayName, achievementId
-- We need to directly use these return values correctly
local achievementId, displayName, achievementId2 = Achievements.getTitleAchievement(pageId, frame)
-- Include more comprehensive debug information
local pageName = mw.title.getCurrentTitle().fullText or "[Unknown]"
-- Get user achievements directly for debugging
local userAchievements = {}
pcall(function() userAchievements = Achievements.getUserAchievements(pageId) or {} end)
local achievementCount = #userAchievements
-- Format the debug output with more details
local debugInfo = string.format(
"<!-- Achievement Debug: Page='%s', ID='%s', Found=%d achievements, "..
"Title Data: ID='%s', Name='%s', ID2='%s' -->",
pageName,
pageId or "nil",
achievementCount,
achievementId or "nil",
displayName or "nil",
achievementId2 or "nil"
)
-- Always create a row for debugging purposes
if achievementId ~= "" and displayName ~= "" and achievementId2 ~= "" then
-- Achievement found - create populated row with achievement data
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
-- No achievement found - create phantom row with visible debug info
return string.format(
'|-\n! colspan="2" class="achievement-header-phantom" | No Achievement Found %s',
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