Changes

Jump to: navigation, search

Module:Documentation

538 bytes added, 02:26, 6 January 2014
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, ' &#124; ') .. ')</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)
-- Get environment data, using pcall in case we get any errors. local success, env = pcall(p.getEnv, getEnvironment(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
----------------------------------------------------------------------------
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
else return title = mw.title.getCurrentTitle()
end
env.title = title
-- Get the subject namespace number.
local function envFuncs.subjectSpace = () return mw.site.namespaces[env.title.namespace].subject.id env.subjectSpace = subjectSpaceend
-- 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
env.docspace = docspace
-- 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
env.templatePage = templatePage
return env
Anonymous user

Navigation menu