Module:ElementAchievementHeader: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| (13 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
--[[ | --[[ | ||
* Name: ElementAchievementHeader | |||
* Author: Mark W. Datysgeld | |||
* Description: Element module that renders achievement headers for Person templates and handles all title-type achievements | |||
* Notes: Creates blocks for Blueprint framework; loads achievement data using AchievementSystem; filters for title-type achievements; renders with animated backgrounds using two-layer approach for readability; includes phantom row when no achievements found; protected execution with error handling | |||
]] | |||
local p = {} | local p = {} | ||
| Line 25: | Line 24: | ||
-- 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 | ||
-- | -- CRITICAL: WE MUST PRE-LOAD THE JSON DATA WITH THE FRAME BEFORE GETTING ANY ACHIEVEMENTS | ||
pcall(function() | |||
Achievements.loadData(frame) | |||
Achievements.loadTypes(frame) | |||
end) | |||
-- | -- Now get the title achievement | ||
local titleAchievement = Achievements.getTitleAchievement(pageId, frame) | |||
-- | -- Minimal debug comment only visible in source | ||
local | local debugInfo = string.format( | ||
"<!-- Achievement Header: pageId=%s -->", | |||
or | pageId or "nil" | ||
) | |||
-- | -- Always create a row for debugging purposes | ||
if titleAchievement then | |||
-- Get category link from the centralized function | |||
local categoryLink = Achievements.getCategoryLinks({ { type = titleAchievement.id } }, frame) | |||
-- 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" | ' .. | |||
'<div class="achievement-foreground-layer">%s</div>%s%s', | |||
titleAchievement.id, titleAchievement.id, titleAchievement.name, titleAchievement.name, debugInfo, categoryLink | |||
) | |||
else | |||
-- No achievement found: create empty phantom row | |||
return string.format( | |||
'|-\n! colspan="2" class="achievement-header-phantom" | ' .. | |||
'<div class="achievement-foreground-layer"></div>%s', | |||
debugInfo | |||
) | |||
end | |||
end | end | ||
| Line 71: | Line 79: | ||
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 | ||