Module:TemplateStarter
Appearance
Documentation for this module may be created at Module:TemplateStarter/doc
-- Module:TemplateStarter
-- Generates empty template structures for new pages using ConfigRepository
local p = {}
-- Required modules
local ConfigRepository = require('Module:ConfigRepository')
-- Generate empty template wikitext from template type
function p.generateTemplate(templateType)
-- Get configuration for the template type
local config = ConfigRepository.getConfig(templateType)
-- Check if template exists
if not config or not config.fields then
return string.format("Error: Template type '%s' not found in ConfigRepository", templateType)
end
-- Start building the template
local lines = {"{{" .. templateType}
-- Process each field
for _, field in ipairs(config.fields) do
-- Skip hidden fields
if not field.hidden then
-- Handle fields with multiple keys
local fieldKey = field.key or (field.keys and field.keys[1])
if fieldKey then
table.insert(lines, string.format("|%s = ", fieldKey))
end
end
end
-- Close the template
table.insert(lines, "}}")
-- Join with newlines
return table.concat(lines, "\n")
end
-- Main function to be called from wiki
function p.main(frame)
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]
-- Validate inputs
if not articleName or articleName == "" then
return "Error: Article name is required"
end
if not templateType or templateType == "" then
return "Error: Template type is required"
end
-- Generate the template content
local content = p.generateTemplate(templateType)
-- For testing, return the generated content in a pre block
return string.format('<pre>Page: %s\n\n%s</pre>', articleName, content)
end
-- Generate a create/edit link with preloaded content
function p.createLink(frame)
local args = frame.args
local parent = frame:getParent()
local pargs = parent and parent.args or {}
-- Get parameters
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 articleName == "" then
return "Error: Article name is required"
end
if not templateType or templateType == "" then
return "Error: Template type is required"
end
-- Generate the template content
local content = p.generateTemplate(templateType)
-- URL encode the content for use in URL
local encodedContent = mw.uri.encode(content)
-- Create edit URL with preloaded text
local editUrl = mw.uri.fullUrl(articleName, {
action = 'edit',
preload = 'Template:TemplateStarter/Preload',
preloadparams = encodedContent,
editintro = 'Template:TemplateStarter/EditIntro',
summary = 'Creating new ' .. templateType .. ' page'
})
-- Return a button/link to create the page
return string.format(
'<div class="template-starter-create">' ..
'<p>Ready to create <b>%s</b> as a %s page.</p>' ..
'<span class="plainlinks">[%s <span class="mw-ui-button mw-ui-progressive">Create Page</span>]</span>' ..
'</div>',
articleName,
templateType,
tostring(editUrl)
)
end
-- Get list of available templates
function p.getAvailableTemplates()
local templates = {}
for templateName, _ in pairs(ConfigRepository.templates) do
table.insert(templates, templateName)
end
table.sort(templates)
return templates
end
-- Test function to list available templates
function p.listTemplates(frame)
local templates = p.getAvailableTemplates()
return "Available templates: " .. table.concat(templates, ", ")
end
return p