|
|
| (68 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| --Module:T-Process | | --Module:T-Process |
| -- Renders the "Process" template for governance processes and initiatives, making use of ICANNWiki's "Template Blueprint Framework" | | -- Makes use of ICANNWiki's "Template Blueprint Framework" to render the "Process" template |
|
| |
|
| local p = {} | | local p = {} |
|
| |
|
| -- ========== Required modules ========== | | -- ==================== Required modules ==================== |
| local Blueprint = require('Module:LuaTemplateBlueprint') | | local Blueprint = require('Module:LuaTemplateBlueprint') |
| local ConfigRepository = require('Module:ConfigRepository')
| |
| local ErrorHandling = require('Module:ErrorHandling') | | local ErrorHandling = require('Module:ErrorHandling') |
| local LinkParser = require('Module:LinkParser') | | local LinkParser = require('Module:LinkParser') |
|
| |
|
| -- Blueprint default: Module-level cache for lazy-loaded modules | | -- ==================== Helper Functions ==================== |
| local moduleCache = {}
| |
| | |
| -- Blueprint default: Lazy module loader
| |
| local function lazyRequire(moduleName)
| |
| return function()
| |
| if not moduleCache[moduleName] then
| |
| moduleCache[moduleName] = require(moduleName)
| |
| end
| |
| return moduleCache[moduleName]
| |
| end
| |
| end
| |
| | |
| -- Blueprint default: Modules to lazy load
| |
| -- local getTemplateHelpers = lazyRequire('')
| |
| | |
| -- ========== Helper Functions ==========
| |
| -- Blueprint default: Create error context for the module | | -- Blueprint default: Create error context for the module |
| local errorContext = ErrorHandling.createContext("T-Process") | | local errorContext = ErrorHandling.createContext("T-Process") |
| Line 42: |
Line 25: |
| semanticProperties = true, | | semanticProperties = true, |
| categories = true, | | categories = true, |
| errorReporting = true | | errorReporting = true, |
| | navigation = true |
| } | | } |
| }) | | }) |
|
| |
|
| -- Initialize the standard configuration | | -- Blueprint default: Initialize standard configuration |
| Blueprint.initializeConfig(template) | | Blueprint.initializeConfig(template) |
| | |
| | -- CONTROL THE VISUAL ORDER THAT EACH ASPECT IS RENDERED IN |
| | template.config.blockSequence = { |
| | 'title', |
| | 'logo', |
| | 'fields', |
| | 'navigation', |
| | 'socialMedia', |
| | 'semanticProperties', |
| | 'categories', |
| | 'errors' |
| | } |
|
| |
|
| -- ================================================================================ | | -- ================================================================================ |
|
| |
|
| -- ========== Preprocessors ========== | | -- TEMPLATE-SPECIFIC CALLS AND CODE |
| -- Basic preprocessors | |
| Blueprint.addPreprocessor(template, 'setPageIdField')
| |
| Blueprint.addPreprocessor(template, 'deriveRegionFromCountry')
| |
|
| |
|
| -- Helper function to extract plain text from wiki links for semantic properties | | -- ELEMENT:NAVIGATION |
| local TemplateHelpers = require('Module:TemplateHelpers') | | if template.features.navigation then |
| local function extractSemanticValue(fieldValue, fieldName)
| | local ElementNavigation = ErrorHandling.safeRequire(errorContext, 'Module:ElementNavigation', false) |
| return TemplateHelpers.extractSemanticValue(fieldValue, fieldName, errorContext)
| | if ElementNavigation and ElementNavigation.elementName then |
| | Blueprint.registerElement(ElementNavigation.elementName, ElementNavigation) |
| | Blueprint.addElementToTemplate(template, 'navigation') |
| | template.config.navigation = { |
| | prevLabel = "← %s", |
| | nextLabel = "%s →", |
| | classPrefix = "process" |
| | } |
| | end |
| end | | end |
|
| |
|
| -- Get the SemanticCategoryHelpers module | | -- ================================================================================ |
| local SemanticCategoryHelpers = require('Module:SemanticCategoryHelpers')
| |
|
| |
|
| -- Override the skipProperties to ensure we handle the process_connection property | | -- ==================== Preprocessors ==================== |
| template.config.semantics = template.config.semantics or {}
| | -- Basic preprocessors |
| template.config.semantics.skipProperties = template.config.semantics.skipProperties or {}
| | Blueprint.addPreprocessor(template, 'setPageIdField') -- Blueprint default |
| template.config.semantics.skipProperties[require('Module:ConfigRepository').semanticProperties.process_connection] = true
| | Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') |
| | |
| -- Add a preprocessor to handle process connections directly
| |
| Blueprint.addPreprocessor(template, function(template, args)
| |
| -- Get the process connection property name
| |
| local processConnectionProperty = require('Module:ConfigRepository').semanticProperties.process_connection
| |
|
| |
| -- Create a table to store the connections
| |
| local connections = {}
| |
|
| |
| -- Helper function to add a connection if valid
| |
| local function addConnection(value, fieldName)
| |
| if value and value ~= "" then
| |
| local extractedValue = extractSemanticValue(value, fieldName)
| |
| if extractedValue and extractedValue ~= "" then
| |
| table.insert(connections, extractedValue)
| |
| end
| |
| end
| |
| end
| |
|
| |
| -- Add connections from all relevant fields
| |
| addConnection(args.process, "Process")
| |
| addConnection(args.has_previous, "Preceded By")
| |
| addConnection(args.has_next, "Succeeded By")
| |
|
| |
| -- Store the connections in the args table for later use
| |
| args._processConnections = connections
| |
|
| |
| return args
| |
| end)
| |
| | |
| -- Register a property provider that adds the process connections directly to the output | |
| Blueprint.registerPropertyProvider(template, function(template, args) | |
| -- We'll return empty properties since we're handling this through direct output
| |
| local properties = {}
| |
|
| |
| -- Get the process connections from the args table
| |
| local connections = args._processConnections or {}
| |
|
| |
| -- If there are no connections, return empty properties
| |
| if #connections == 0 then
| |
| return properties
| |
| end
| |
|
| |
| -- Get the process connection property name
| |
| local processConnectionProperty = require('Module:ConfigRepository').semanticProperties.process_connection
| |
|
| |
| -- Create a string to hold the direct semantic annotations
| |
| local semanticOutput = ""
| |
|
| |
| -- Add each connection as a separate property
| |
| for _, connection in ipairs(connections) do
| |
| semanticOutput = semanticOutput .. '<div style="display:none;">\n'
| |
| semanticOutput = semanticOutput .. ' {{#set: ' .. processConnectionProperty .. '=' .. connection .. ' }}\n'
| |
| semanticOutput = semanticOutput .. '</div>\n'
| |
| end
| |
|
| |
| -- Return empty properties but with semantic output
| |
| return properties, semanticOutput
| |
| end)
| |
|
| |
|
| -- ========== Main Render Function ========== | | -- ==================== Main Render Function ==================== |
| -- Blueprint default: Main render function | | -- Blueprint default: Render |
| function p.render(frame) | | function p.render(frame) |
| return ErrorHandling.protect( | | return ErrorHandling.protect( |