Module:T-Campaign: Difference between revisions

// via Wikitext Extension for VSCode
Tags: Manual revert Reverted
// via Wikitext Extension for VSCode
Tag: Reverted
Line 183: Line 183:
         end
         end
          
          
         -- DEFENSIVE: Validate campaign title before processing
         -- INLINE PLACEHOLDER REPLACEMENT (copied from working T-Campaign-Git.lua)
         local campaignTitle = nil
         local placeholderValues = {
        local titleSource = "fallback"
            CAMPAIGN_NAME = args._campaign_data.defaults.title or "Campaign"
        }
          
          
         if args._campaign_data and args._campaign_data.defaults then
         -- Apply TemplateStarter's proven placeholder replacement strategy (exact copy from working version)
             local rawTitle = args._campaign_data.defaults.title
        local function replacePlaceholders(text, values)
             if rawTitle and type(rawTitle) == "string" and rawTitle ~= "" then
            if not text or not values then
                campaignTitle = rawTitle
                return text
                titleSource = "json_default"
            end
                ErrorHandling.addStatus(context, 'campaignBanner', 'Title validation passed', 'Source: JSON defaults, Value: "' .. campaignTitle .. '"')
           
            else
             local result = text
                 ErrorHandling.addStatus(context, 'campaignBanner', 'Title validation failed', 'Raw value: "' .. tostring(rawTitle) .. '", Type: ' .. type(rawTitle))
             for key, value in pairs(values) do
                if value and value ~= "" then
                    result = result:gsub("%$" .. key .. "%$", value)
                 end
             end
             end
        else
             return result
             ErrorHandling.addStatus(context, 'campaignBanner', 'Campaign data structure invalid', 'Missing _campaign_data or defaults')
         end
         end
          
          
         -- Robust fallback with error reporting
         -- Apply placeholder replacement inline (no module boundary crossing)
         if not campaignTitle then
         bannerContent = replacePlaceholders(bannerContent, placeholderValues)
            campaignTitle = "Campaign"
            titleSource = "fallback"
            ErrorHandling.addStatus(context, 'campaignBanner', 'Using fallback title', 'Original title was missing or invalid')
        end
       
        local placeholderValues = {
            CAMPAIGN_NAME = campaignTitle
        }
          
          
         -- Pre-flight validation before calling WikitextProcessor
         -- Clean up any remaining unfilled placeholders (TemplateStarter's removeEmptyPlaceholders logic)
         ErrorHandling.addStatus(context, 'campaignBanner', 'Sending to WikitextProcessor', 'CAMPAIGN_NAME="' .. campaignTitle .. '", Source=' .. titleSource)
        bannerContent = bannerContent:gsub("%$[A-Z_]+%$", "")
         bannerContent = bannerContent:gsub("%s+", " "):gsub("^%s+", ""):gsub("%s+$", "")
          
          
         bannerContent = WikitextProcessor.processContentForFrontend(bannerContent, placeholderValues, context)
        -- Now only send to WikitextProcessor for wiki link processing (no placeholder data needed)
         bannerContent = WikitextProcessor.processWikiLinksToHTML(bannerContent, context)
          
          
         local noticeData = {
         local noticeData = {