Module:TemplateStarter: Difference between revisions

// via Wikitext Extension for VSCode
// via Wikitext Extension for VSCode
Line 85: Line 85:
-- Main function to be called from wiki (for testing/preview)
-- Main function to be called from wiki (for testing/preview)
function p.main(frame)
function p.main(frame)
     local errorContext = ErrorHandling.createContext()
    -- Simple validation without complex error handling for this function
     local args = frame.args
    local parent = frame:getParent()
    local pargs = parent and parent.args or {}
   
    -- Get parameters (check both direct and parent args)
    local articleName = args.articleName or pargs.articleName or args[1] or pargs[1]
    local templateType = args.templateType or pargs.templateType or args[2] or pargs[2]
      
      
     -- Protected function to process arguments
     -- Validate inputs
    local function processArgs()
    if not articleName or mw.text.trim(tostring(articleName)) == "" then
        local args = frame.args
        return "Error: Article name is required"
        local parent = frame:getParent()
        local pargs = parent and parent.args or {}
       
        -- Get parameters (check both direct and parent args)
        local articleName = args.articleName or pargs.articleName or args[1] or pargs[1]
        local templateType = args.templateType or pargs.templateType or args[2] or pargs[2]
       
        -- Validate inputs
        if not articleName or mw.text.trim(tostring(articleName)) == "" then
            ErrorHandling.addError(errorContext, 'TemplateStarter.main', "Article name is required")
            return nil
        end
       
        if not templateType or mw.text.trim(tostring(templateType)) == "" then
            ErrorHandling.addError(errorContext, 'TemplateStarter.main', "Template type is required")
            return nil
        end
       
        return {
            articleName = mw.text.trim(tostring(articleName)),
            templateType = mw.text.trim(tostring(templateType))
        }
     end
     end
      
      
     -- Process arguments with error protection
     if not templateType or mw.text.trim(tostring(templateType)) == "" then
    local success, params = ErrorHandling.protect(errorContext, processArgs)
         return "Error: Template type is required"
    if not success or not params then
         return "Error: " .. (ErrorHandling.formatOutput(errorContext) or "Invalid parameters")
     end
     end
      
      
     -- Generate the template content
     -- Generate the template content
     local content = p.generateTemplate(params.templateType)
     local content = p.generateTemplate(mw.text.trim(tostring(templateType)))
      
      
     -- For testing, return the generated content in a pre block
     -- For testing, return the generated content in a pre block
     return string.format('<pre>Page: %s\n\n%s</pre>',  
     return string.format('<pre>Page: %s\n\n%s</pre>',  
         mw.text.nowiki(params.articleName),  
         mw.text.nowiki(mw.text.trim(tostring(articleName))),  
         mw.text.nowiki(content))
         mw.text.nowiki(content))
end
end
Line 150: Line 133:
     end
     end
      
      
     -- Create error context for template list generation
     -- Simple approach without complex error handling
     local errorContext = ErrorHandling.createContext()
     local templates = {}
      
      
     -- Protected function to get templates
     -- Check if ConfigRepository.templates exists
     local function getTemplates()
     if ConfigRepository.templates then
        local templates = {}
       
        if not ConfigRepository.templates then
            ErrorHandling.addError(errorContext, 'TemplateStarter.getAvailableTemplates',
                "ConfigRepository.templates is not available")
            return {}
        end
       
        -- Pre-allocate table for better performance
        local templateCount = 0
        for _ in pairs(ConfigRepository.templates) do
            templateCount = templateCount + 1
        end
       
        local templates = {}
         local index = 1
         local index = 1
         for templateName, _ in pairs(ConfigRepository.templates) do
         for templateName, _ in pairs(ConfigRepository.templates) do
Line 177: Line 145:
             end
             end
         end
         end
       
         table.sort(templates)
         table.sort(templates)
        return templates
     end
     end
      
      
     -- Get templates with error protection
     -- Fallback to basic list if no templates found
     local success, templates = ErrorHandling.protect(errorContext, getTemplates)
     if #templates == 0 then
    if not success then
        -- Fallback to basic list if there's an error
         templates = {"Person", "Organization", "Event", "TLD", "Process", "Norm", "LibraryInterview"}
         templates = {"Person", "Organization", "Event", "TLD", "Process", "Norm", "LibraryInterview"}
     end
     end