Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Documentation: Difference between revisions

Content added Content deleted
(finish converting existing values to use env table)
(convert env table to use a metatable so we only process things when we need to; add a grab method and an err function for dealing with errors (main functions need to be converted to use these))
Line 73:
return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>'
end
 
local function err(msg)
return string.format(
return string.format('<strong class="error">[[Module:Documentation]] error: %s</strong>%s', env) -- If there's an error, env is the error message.
msg,
makeCategoryLink('Documentation template invocations with errors')
)
end
 
----------------------------------------------------------------------------
Line 106 ⟶ 114:
 
function p._main(args)
local env = p.getEnvironment(args)
-- Get environment data, using pcall in case we get any errors.
local success, env = pcall(p.getEnv, args)
if not success then
return string.format('<strong class="error">[[Module:Documentation]] error: %s</strong>', env) -- If there's an error, env is the error message.
end
-- Build the documentation.
local root = htmlBuilder.create()
root
Line 139 ⟶ 142:
----------------------------------------------------------------------------
 
function p.getEnvgetEnvironment(args)
-- Returns a table with information about the environment, including the title to use, the subject namespace, etc.
-- This is called from p._main using pcall in case we get any errors from exceeding the expensive function count
Line 149 ⟶ 152:
-- env.docspace - the name of the namespace the title puts its documentation in.
-- env.templatePage - the name of the template page with no namespace or interwiki prefixes.
local env, envFuncs = {}, {}
 
-- Set up the metatable. If a nil value is called, we call that function in the envFuncs table and memoize it
-- in the env table so we don't have to call any of the functions more than once.
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if titleArgenvFunc then
local val = envFunc()
env[key] = val
return val
else
return nil
end
end
})
 
-- Get the title.
localfunction envFuncs.title()
local title
local titleArg = args[message('titleArg', 'string')]
if titleArg then
titleif = mw.title.new(titleArg) then
if title not= mw.title then.new(titleArg)
if not successtitle then
error(message('titleArgError', 'string', {titleArg}))
end
else
title = mw.title.getCurrentTitle()
end
return title
else
title = mw.title.getCurrentTitle()
end
env.title = title
 
-- Get the subject namespace number.
function envFuncs.subjectSpace()
local subjectSpace = return mw.site.namespaces[env.title.namespace].subject.id
env.subjectSpace = subjectSpace
end
-- Get the name of the documentation namespace.
localfunction envFuncs.docspace()
if local subjectSpace == 0 or env.subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
-- Pages in the Article, File, MediaWiki or Category namespaces must have their
-- /doc, /sandbox and /testcases pages in talk space.
docspace = return mw.site.namespaces[subjectSpace].talk.name
else
else
docspace = return env.title.subjectNsText
end
end
env.docspace = docspace
-- Get the template page with no namespace or interwiki prefixes.
localfunction envFuncs.templatePage()
local subpagetitle = titleenv.subpageTexttitle
local subpage = title.subpageText
if subpage == message('sandboxSubpage', 'string') or subpage == message('testcasesSubpage', 'string') then
templatePage = return title.baseText
else
else
templatePage = return title.text
end
end
 
function env:grab(key)
local success, envval = pcall(p.getEnv,function() return self[key] argsend)
return success, val
end
env.templatePage = templatePage
 
return env
Cookies help us deliver our services. By using our services, you agree to our use of cookies.