Module:ElementAchievementHeader: Difference between revisions
Appearance
// 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 " | -- Include debug comment when no page ID available | ||
return "<!-- Achievement Header: No page ID available -->" | |||
end | 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: | local debugInfo = string.format( | ||
"<!-- Achievement Debug: cssClass='%s', displayName='%s', achievementId='%s', pageId='%s' -->", | |||
cssClass or "nil", | |||
displayName or "nil", | displayName 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) | ||
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 | 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