Module:T-Process: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| Line 9: | Line 9: | ||
local ConfigRepository = require('Module:ConfigRepository') | local ConfigRepository = require('Module:ConfigRepository') | ||
local LinkParser = require('Module:LinkParser') | local LinkParser = require('Module:LinkParser') | ||
local TemplateHelpers = require('Module:TemplateHelpers') | |||
local SemanticAnnotations = require('Module:SemanticAnnotations') | |||
local | local SemanticCategoryHelpers = require('Module:SemanticCategoryHelpers') | ||
local | |||
-- ========== Helper Functions ========== | -- ========== Helper Functions ========== | ||
| Line 58: | Line 48: | ||
Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') | Blueprint.addPreprocessor(template, 'deriveRegionFromCountry') | ||
-- | -- Add a preprocessor to sanitize args for semantic properties | ||
-- This follows the same pattern as the Event template | |||
Blueprint.addPreprocessor(template, function(template, args) | |||
-- Create a sanitized version of args for semantic properties | |||
end | args._sanitizedArgs = {} | ||
-- Copy and sanitize all values | |||
for k, v in pairs(args) do | |||
if type(v) == "string" and v ~= "" then | |||
args._sanitizedArgs[k] = TemplateHelpers.sanitizeUserInput(v) | |||
else | |||
args._sanitizedArgs[k] = v | |||
end | |||
end | |||
-- Add special handling for has_previous and has_next | |||
if args.has_previous and args.has_previous ~= "" then | |||
-- Extract the page name from wiki links if present | |||
args._sanitizedArgs.has_previous_process = TemplateHelpers.extractSemanticValue( | |||
args.has_previous, "Preceded By", errorContext) | |||
end | |||
if args.has_next and args.has_next ~= "" then | |||
-- Extract the page name from wiki links if present | |||
args._sanitizedArgs.has_next_process = TemplateHelpers.extractSemanticValue( | |||
args.has_next, "Succeeded By", errorContext) | |||
end | |||
return args | |||
end) | |||
-- | -- Override the semanticProperties block to use our sanitized args | ||
-- This is similar to how the Event template handles semantic properties | |||
Blueprint.registerPropertyProvider(template, function(template, args) | |||
-- Get the sanitized args | |||
local sanitizedArgs = args._sanitizedArgs or args | |||
-- | -- Get the config | ||
Blueprint. | local Config = template.config | ||
-- | |||
args. | -- Set basic properties using the transformation functions from Config | ||
local properties = {} | |||
local semanticOutput = "" | |||
-- | -- Use the standard SemanticAnnotations module | ||
local propertiesSuccess, propertiesResult = pcall(function() | |||
return SemanticAnnotations.setSemanticProperties( | |||
sanitizedArgs, | |||
Config.semantics.properties, | |||
{transform = Config.semantics.transforms} | |||
) | |||
end) | |||
if propertiesSuccess then | |||
-- | semanticOutput = propertiesResult | ||
else | |||
-- Log error but continue | |||
semanticOutput = "<!-- Error setting semantic properties -->" | |||
end | end | ||
-- | -- Handle special case for has_previous and has_next | ||
if | if sanitizedArgs.has_previous_process and sanitizedArgs.has_previous_process ~= "" then | ||
-- | -- Add as a separate property | ||
local processConnectionProperty = require('Module:ConfigRepository').semanticProperties.process_connection | |||
semanticOutput = semanticOutput .. '\n<div style="display:none;">\n' | |||
semanticOutput = semanticOutput .. ' {{#set: ' .. processConnectionProperty .. '=' .. sanitizedArgs.has_previous_process .. ' }}\n' | |||
semanticOutput = semanticOutput .. '</div>' | |||
end | end | ||
if | if sanitizedArgs.has_next_process and sanitizedArgs.has_next_process ~= "" then | ||
-- | -- Add as a separate property | ||
local processConnectionProperty = require('Module:ConfigRepository').semanticProperties.process_connection | |||
semanticOutput = semanticOutput .. '\n<div style="display:none;">\n' | |||
semanticOutput = semanticOutput .. ' {{#set: ' .. processConnectionProperty .. '=' .. sanitizedArgs.has_next_process .. ' }}\n' | |||
semanticOutput = semanticOutput .. '</div>' | |||
end | end | ||
return | -- Return empty properties but with semantic output | ||
return properties, semanticOutput | |||
end) | end) | ||