Module:T-Person: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| (21 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
-- ==================== Required modules ==================== | -- ==================== Required modules ==================== | ||
local Blueprint = require('Module:LuaTemplateBlueprint') | local Blueprint = require('Module:LuaTemplateBlueprint') | ||
local ErrorHandling = require('Module:ErrorHandling') | local ErrorHandling = require('Module:ErrorHandling') | ||
local LinkParser = require('Module:LinkParser') | local LinkParser = require('Module:LinkParser') | ||
local Achievements = require('Module:AchievementSystem') | local Achievements = require('Module:AchievementSystem') | ||
-- ==================== Helper Functions ==================== | -- ==================== Helper Functions ==================== | ||
-- Blueprint default: Create error context for the module | -- Blueprint default: Create error context for the module | ||
local errorContext = ErrorHandling.createContext("T-Person") | local errorContext = ErrorHandling.createContext("T-Person") | ||
-- ================================================================================ | -- ================================================================================ | ||
| Line 41: | Line 18: | ||
-- IMPORTANT! TEMPLATE BLUEPRINT FRAMEWORK INSTRUCTIONS | -- IMPORTANT! TEMPLATE BLUEPRINT FRAMEWORK INSTRUCTIONS | ||
-- CONTROL OF TEMPLATE FEATURES: THIS LIST SPECIFIES IN AN EXPLICIT MANNER WHAT FEATURES ARE TO BE CALLED/RENDERED BY THE TEMPLATE. | -- CONTROL OF TEMPLATE FEATURES: THIS LIST SPECIFIES IN AN EXPLICIT MANNER WHAT FEATURES ARE TO BE CALLED/RENDERED BY THE TEMPLATE. | ||
local template = Blueprint.registerTemplate(' | local template = Blueprint.registerTemplate('Person', { | ||
features = { | features = { | ||
title = true, | title = true, | ||
achievementHeader = true, | |||
portraitCarousel = true, | |||
logo = true, | logo = true, | ||
fields = true, | fields = true, | ||
achievementBadges = true, | |||
socialMedia = true, | socialMedia = true, | ||
semanticProperties = true, | semanticProperties = true, | ||
| Line 56: | Line 35: | ||
-- Blueprint default: Initialize standard configuration | -- Blueprint default: Initialize standard configuration | ||
Blueprint.initializeConfig(template) | Blueprint.initializeConfig(template) | ||
-- CONTROL THE VISUAL ORDER THAT EACH ASPECT IS RENDERED IN | -- CONTROL THE VISUAL ORDER THAT EACH ASPECT IS RENDERED IN | ||
template.config.blockSequence = { | template.config.blockSequence = { | ||
'title', | 'title', | ||
'achievementHeader', | |||
'portraitCarousel', | 'portraitCarousel', | ||
'logo', | 'logo', | ||
'fields', | 'fields', | ||
'achievementsSectionHeader', | |||
'achievementBadges', | |||
'socialMedia', | 'socialMedia', | ||
'semanticProperties', | 'semanticProperties', | ||
| Line 76: | Line 54: | ||
-- TEMPLATE-SPECIFIC CALLS AND CODE | -- TEMPLATE-SPECIFIC CALLS AND CODE | ||
-- BLOCK: ACHIEVEMENTS SECTION HEADER | |||
local function renderAchievementsHeader(template, args) | |||
-- Get the current page ID from the arguments pre-filled by the 'setPageIdField' preprocessor | |||
local pageId = args.ID | |||
if not pageId or pageId == '' then | |||
return '' | |||
end | |||
-- Get badge achievements using the centralized function | |||
local badgeAchievements = Achievements.getBadgeAchievements(pageId, template.current_frame) | |||
-- Only render the header if there are badges to display | |||
if #badgeAchievements > 0 then | |||
local TemplateStructure = require('Module:TemplateStructure') | |||
return TemplateStructure.renderDividerBlock("Achievements") | |||
end | |||
return '' | |||
end | |||
template.config.blocks = template.config.blocks or {} | |||
template.config.blocks.achievementsSectionHeader = { | |||
render = function(template, args) | |||
return renderAchievementsHeader(template, args) | |||
end | |||
} | |||
-- ELEMENT: ACHIEVEMENT HEADER | |||
if template.features.achievementHeader then | |||
local ElementAchievementHeader = ErrorHandling.safeRequire(errorContext, | |||
'Module:ElementAchievementHeader', false) | |||
if ElementAchievementHeader then | |||
Blueprint.registerElement(ElementAchievementHeader.elementName, ElementAchievementHeader) | |||
Blueprint.addElementToTemplate(template, 'achievementHeader') | |||
end | |||
end | |||
-- ELEMENT: ACHIEVEMENT BADGES | |||
if template.features.achievementBadges then | |||
local ElementAchievementBadges = ErrorHandling.safeRequire(errorContext, | |||
'Module:ElementAchievementBadges', false) | |||
if ElementAchievementBadges then | |||
Blueprint.registerElement(ElementAchievementBadges.elementName, ElementAchievementBadges) | |||
Blueprint.addElementToTemplate(template, 'achievementBadges') | |||
end | |||
end | |||
-- ELEMENT: PORTRAIT CAROUSEL | -- ELEMENT: PORTRAIT CAROUSEL | ||
| Line 91: | Line 115: | ||
end | end | ||
-- | -- PROCESSORS | ||
template.config.processors = { | template.config.processors = { | ||
-- SOI field processor | -- SOI field processor | ||
| Line 110: | Line 123: | ||
end | end | ||
return value | return value | ||
end | end, | ||
} | } | ||
-- ================================================================================ | |||
-- ==================== Preprocessors ==================== | |||
-- Basic preprocessors | |||
Blueprint.addPreprocessor(template, 'setPageIdField') -- Blueprint default | |||
Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') | |||
-- ==================== Main Render Function ==================== | -- ==================== Main Render Function ==================== | ||