Module:Documentation: Difference between revisions
From Video Credit Archive
Content deleted Content added
wikpedia>Mr. Stradivarius finish converting existing values to use env table |
wikpedia>Mr. Stradivarius 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: | Line 73: | ||
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>' |
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>' |
||
end |
end |
||
local function err(msg) |
|||
return string.format( |
|||
⚫ | |||
msg, |
|||
makeCategoryLink('Documentation template invocations with errors') |
|||
) |
|||
⚫ | |||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
Line 106: | Line 114: | ||
function p._main(args) |
function p._main(args) |
||
local env = p.getEnvironment(args) |
|||
-- Get environment data, using pcall in case we get any errors. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- Build the documentation. |
|||
local root = htmlBuilder.create() |
local root = htmlBuilder.create() |
||
root |
root |
||
Line 139: | Line 142: | ||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
function p. |
function p.getEnvironment(args) |
||
-- Returns a table with information about the environment, including the title to use, the subject namespace, etc. |
-- 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 |
-- This is called from p._main using pcall in case we get any errors from exceeding the expensive function count |
||
Line 149: | Line 152: | ||
-- env.docspace - the name of the namespace the title puts its documentation in. |
-- 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. |
-- env.templatePage - the name of the template page with no namespace or interwiki prefixes. |
||
local env = {} |
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] |
|||
⚫ | |||
local val = envFunc() |
|||
env[key] = val |
|||
return val |
|||
⚫ | |||
return nil |
|||
end |
|||
end |
|||
}) |
|||
-- Get the title. |
-- Get the title. |
||
function envFuncs.title() |
|||
local title |
|||
local titleArg = args[message('titleArg', 'string')] |
|||
⚫ | |||
if titleArg then |
|||
title = mw.title.new(titleArg) |
|||
⚫ | |||
error(message('titleArgError', 'string', {titleArg})) |
error(message('titleArgError', 'string', {titleArg})) |
||
end |
|||
⚫ | |||
⚫ | |||
end |
end |
||
return title |
|||
⚫ | |||
⚫ | |||
end |
end |
||
env.title = title |
|||
-- Get the subject namespace number. |
-- Get the subject namespace number. |
||
function envFuncs.subjectSpace() |
|||
return mw.site.namespaces[env.title.namespace].subject.id |
|||
env.subjectSpace = subjectSpace |
|||
end |
|||
-- Get the name of the documentation namespace. |
-- Get the name of the documentation namespace. |
||
function envFuncs.docspace() |
|||
local subjectSpace = 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 |
-- Pages in the Article, File, MediaWiki or Category namespaces must have their |
||
-- /doc, /sandbox and /testcases pages in talk space. |
-- /doc, /sandbox and /testcases pages in talk space. |
||
return mw.site.namespaces[subjectSpace].talk.name |
|||
⚫ | |||
⚫ | |||
return env.title.subjectNsText |
|||
end |
|||
end |
end |
||
env.docspace = docspace |
|||
-- Get the template page with no namespace or interwiki prefixes. |
-- Get the template page with no namespace or interwiki prefixes. |
||
function envFuncs.templatePage() |
|||
local title = env.title |
|||
local subpage = title.subpageText |
|||
if subpage == message('sandboxSubpage', 'string') or subpage == message('testcasesSubpage', 'string') then |
|||
return title.baseText |
|||
⚫ | |||
else |
|||
return title.text |
|||
end |
|||
end |
|||
function env:grab(key) |
|||
⚫ | |||
return success, val |
|||
end |
end |
||
env.templatePage = templatePage |
|||
return env |
return env |