Module:T-Person: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| (38 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 59: | Line 39: | ||
template.config.blockSequence = { | template.config.blockSequence = { | ||
'title', | 'title', | ||
'achievementHeader', | |||
'portraitCarousel', | |||
'logo', | 'logo', | ||
'fields', | 'fields', | ||
'achievementsSectionHeader', | |||
'achievementBadges', | |||
'socialMedia', | 'socialMedia', | ||
'semanticProperties', | 'semanticProperties', | ||
| Line 71: | Line 55: | ||
-- 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 | |||
-- if template.features. | -- ELEMENT: PORTRAIT CAROUSEL | ||
if template.features.portraitCarousel then | |||
local ElementPortraitCarousel = ErrorHandling.safeRequire(errorContext, | |||
'Module:ElementPortraitCarousel', false) | |||
-- Blueprint.addElementToTemplate(template, ' | if ElementPortraitCarousel then | ||
-- end | Blueprint.registerElement(ElementPortraitCarousel.elementName, ElementPortraitCarousel) | ||
-- Add the element with a custom wrapper that creates a separate table row | |||
Blueprint.addElementToTemplate(template, 'portraitCarousel', { | |||
wrapperTemplate = '|-\n| colspan="2" class="person-portrait-row" |%s' | |||
}) | |||
end | |||
end | |||
-- | -- PROCESSORS | ||
template.config.processors = { | |||
-- SOI field processor | |||
soi = function(value) | |||
if value and value ~= "" then | |||
return string.format("[%s Here]", value) | |||
end | |||
return value | |||
end, | |||
} | |||
-- ================================================================================ | -- ================================================================================ | ||
| Line 90: | Line 133: | ||
Blueprint.addPreprocessor(template, 'setPageIdField') -- Blueprint default | Blueprint.addPreprocessor(template, 'setPageIdField') -- Blueprint default | ||
Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') | Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') | ||
-- ==================== Main Render Function ==================== | -- ==================== Main Render Function ==================== | ||