Changes
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)
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>'
end
local function err(msg)
return string.format(
'<strong class="error">[[Module:Documentation]] error: %s</strong>%s',
msg,
makeCategoryLink('Documentation template invocations with errors')
)
end
----------------------------------------------------------------------------
function p._main(args)
local root = htmlBuilder.create()
root
----------------------------------------------------------------------------
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
-- 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 envFunc then local val = envFunc() env[key] = val return val else return nil end end })
-- Get the title.
function envFuncs.title() local title local titleArg = args[message('titleArg', 'string')] if titleArg then title = mw.title.new(titleArg) if not title then error(message('titleArgError', 'string', {titleArg})) end else title = mw.title.getCurrentTitle()
end
end
-- Get the subject namespace number.
-- Get the name of the documentation namespace.
function envFuncs.docspace() local docspacesubjectSpace = env.subjectSpace 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 docspace = return env.title.subjectNsText end
end
-- Get the template page with no namespace or interwiki prefixes.
function envFuncs.templatePage() local templatePagetitle = env.title local subpage = title.subpageText if subpage == message('sandboxSubpage', 'string') or subpage == message('testcasesSubpage', 'string') then templatePage = return title.baseText else templatePage = return title.text end end function env:grab(key) local success, val = pcall(function() return self[key] end) return success, val
end
return env