Happy 11th anniversary, screamer wiki!
Module:Documentation: Difference between revisions
m
update code comment according to Special:Diff/989669779
m (1 revision imported) |
m (update code comment according to Special:Diff/989669779) |
||
Line 3: | Line 3: | ||
-- Get required modules. | -- Get required modules. | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
-- Get the config table. | -- Get the config table. | ||
Line 44: | Line 43: | ||
end | end | ||
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal) | |||
end | end | ||
Line 82: | Line 80: | ||
ret[#ret + 1] = select(i, ...) | ret[#ret + 1] = select(i, ...) | ||
end | end | ||
return '< | -- 'documentation-toolbar' | ||
return '<span class="' .. message('toolbar-class') .. '">(' | |||
.. table.concat(ret, ' | ') .. ')</span>' | |||
end | end | ||
Line 112: | Line 112: | ||
---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ||
-- | -- Entry points | ||
---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ||
function p.nonexistent(frame) | |||
if mw.title.getCurrentTitle().subpageText == 'testcases' then | |||
return frame:expandTemplate{title = 'module test cases notice'} | |||
else | |||
return p.main(frame) | |||
end | |||
end | |||
p.main = makeInvokeFunc('_main') | p.main = makeInvokeFunc('_main') | ||
Line 121: | Line 129: | ||
-- This function defines logic flow for the module. | -- This function defines logic flow for the module. | ||
-- @args - table of arguments passed by the user | -- @args - table of arguments passed by the user | ||
--]] | --]] | ||
local env = p.getEnvironment(args) | local env = p.getEnvironment(args) | ||
local root = mw.html.create() | local root = mw.html.create() | ||
root | root | ||
:wikitext(p._getModuleWikitext(args, env)) | |||
:wikitext(p.protectionTemplate(env)) | :wikitext(p.protectionTemplate(env)) | ||
:wikitext(p.sandboxNotice(args, env)) | :wikitext(p.sandboxNotice(args, env)) | ||
:tag('div') | :tag('div') | ||
:attr(' | -- 'documentation-container' | ||
: | :addClass(message('container')) | ||
:attr('role', 'complementary') | |||
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil) | |||
:attr('aria-label', args.heading == '' and 'Documentation' or nil) | |||
:newline() | :newline() | ||
:tag('div') | :tag('div') | ||
: | -- 'documentation' | ||
:addClass(message('main-div-classes')) | |||
:newline() | |||
:wikitext(p._startBox(args, env)) | |||
:wikitext(p._content(args, env)) | |||
:tag('div') | |||
-- 'documentation-clear' | |||
:addClass(message('clear')) | |||
:done() | |||
:newline() | :newline() | ||
:done() | :done() | ||
:wikitext(p._endBox(args, env)) | |||
:done() | :done() | ||
:wikitext(p.addTrackingCategories(env)) | :wikitext(p.addTrackingCategories(env)) | ||
return tostring(root) | -- 'Module:Documentation/styles.css' | ||
return mw.getCurrentFrame():extensionTag ( | |||
'templatestyles', '', {src=cfg['templatestyles'] | |||
}) .. tostring(root) | |||
end | end | ||
Line 155: | Line 170: | ||
function p.getEnvironment(args) | function p.getEnvironment(args) | ||
--[[ | --[[ | ||
-- Returns a table with information about the environment, including title objects and other namespace- or | -- Returns a table with information about the environment, including title | ||
-- objects and other namespace- or path-related data. | |||
-- @args - table of arguments passed by the user | -- @args - table of arguments passed by the user | ||
-- | -- | ||
Line 165: | Line 180: | ||
-- env.sandboxTitle - the /sandbox subpage. | -- env.sandboxTitle - the /sandbox subpage. | ||
-- env.testcasesTitle - the /testcases subpage. | -- env.testcasesTitle - the /testcases subpage. | ||
-- | -- | ||
-- Data includes: | -- Data includes: | ||
Line 259: | Line 273: | ||
--]] | --]] | ||
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) | return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) | ||
end | end | ||
Line 281: | Line 286: | ||
function envFuncs.docSpace() | function envFuncs.docSpace() | ||
-- The documentation namespace number. For most namespaces this is | -- The documentation namespace number. For most namespaces this is the | ||
-- subject namespace. However, pages in the Article, File, | -- same as the subject namespace. However, pages in the Article, File, | ||
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space. | -- MediaWiki or Category namespaces must have their /doc, /sandbox and | ||
-- /testcases pages in talk space. | |||
local subjectSpace = env.subjectSpace | local subjectSpace = env.subjectSpace | ||
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then | if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then | ||
Line 309: | Line 315: | ||
local compareUrl = mw.uri.fullUrl( | local compareUrl = mw.uri.fullUrl( | ||
'Special:ComparePages', | 'Special:ComparePages', | ||
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} | { page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} | ||
) | ) | ||
return tostring(compareUrl) | return tostring(compareUrl) | ||
Line 323: | Line 329: | ||
-- Auxiliary templates | -- Auxiliary templates | ||
---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ||
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') | |||
function p._getModuleWikitext(args, env) | |||
local currentTitle = mw.title.getCurrentTitle() | |||
if currentTitle.contentModel ~= 'Scribunto' then return end | |||
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care | |||
local moduleWikitext = package.loaded["Module:Module wikitext"] | |||
if moduleWikitext then | |||
return moduleWikitext.main() | |||
end | |||
end | |||
function p.sandboxNotice(args, env) | function p.sandboxNotice(args, env) | ||
Line 331: | Line 349: | ||
-- | -- | ||
-- Messages: | -- Messages: | ||
-- 'sandbox-notice-image' --> '[[ | -- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]' | ||
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' | -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' | ||
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' | -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' | ||
Line 346: | Line 364: | ||
local templateTitle = env.templateTitle | local templateTitle = env.templateTitle | ||
local subjectSpace = env.subjectSpace | local subjectSpace = env.subjectSpace | ||
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then | if not (subjectSpace and title and sandboxTitle and templateTitle | ||
and mw.title.equals(title, sandboxTitle)) then | |||
return nil | return nil | ||
end | end | ||
Line 389: | Line 408: | ||
end | end | ||
-- Add the sandbox to the sandbox category. | -- Add the sandbox to the sandbox category. | ||
text = text .. makeCategoryLink(message('sandbox-category')) | omargs.text = text .. makeCategoryLink(message('sandbox-category')) | ||
-- 'documentation-clear' | |||
return '<div class="' .. message('clear') .. '"></div>' | |||
.. require('Module:Message box').main('ombox', omargs) | |||
end | end | ||
Line 402: | Line 421: | ||
-- 'protection-template' --> 'pp-template' | -- 'protection-template' --> 'pp-template' | ||
-- 'protection-template-args' --> {docusage = 'yes'} | -- 'protection-template-args' --> {docusage = 'yes'} | ||
local | local protectionLevels = env.protectionLevels | ||
if not protectionLevels then | if not protectionLevels then | ||
return nil | return nil | ||
Line 412: | Line 429: | ||
if editProt then | if editProt then | ||
-- The page is edit-protected. | -- The page is edit-protected. | ||
return require('Module:Protection banner')._main{ | |||
message('protection-reason-edit'), small = true | |||
} | |||
elseif moveProt and moveProt ~= 'autoconfirmed' then | elseif moveProt and moveProt ~= 'autoconfirmed' then | ||
-- The page is move-protected but not edit-protected. Exclude move | -- The page is move-protected but not edit-protected. Exclude move | ||
-- protection with the level "autoconfirmed", as this is equivalent to | -- protection with the level "autoconfirmed", as this is equivalent to | ||
-- no move protection at all. | -- no move protection at all. | ||
return require('Module:Protection banner')._main{ | |||
action = 'move', small = true | |||
} | |||
else | else | ||
return nil | return nil | ||
Line 445: | Line 463: | ||
local links | local links | ||
local content = args.content | local content = args.content | ||
if not content then | if not content or args[1] then | ||
-- No need to include the links if the documentation is on the template page itself. | -- No need to include the links if the documentation is on the template page itself. | ||
local linksData = p.makeStartBoxLinksData(args, env) | local linksData = p.makeStartBoxLinksData(args, env) | ||
Line 473: | Line 491: | ||
-- 'history-link-display' --> 'history' | -- 'history-link-display' --> 'history' | ||
-- 'purge-link-display' --> 'purge' | -- 'purge-link-display' --> 'purge' | ||
-- 'module-preload' --> 'Template:Documentation/preload-module-doc' | -- 'module-preload' --> 'Template:Documentation/preload-module-doc' | ||
-- 'docpage-preload' --> 'Template:Documentation/preload' | -- 'docpage-preload' --> 'Template:Documentation/preload' | ||
Line 499: | Line 516: | ||
local preload = args.preload | local preload = args.preload | ||
if not preload then | if not preload then | ||
if | if subjectSpace == 828 then -- Module namespace | ||
preload = message('module-preload') | preload = message('module-preload') | ||
else | else | ||
Line 514: | Line 529: | ||
function p.renderStartBoxLinks(data) | function p.renderStartBoxLinks(data) | ||
--[[ | --[[ | ||
-- Generates the [view][edit][history][purge] or [create] links from the data table. | -- Generates the [view][edit][history][purge] or [create][purge] links from the data table. | ||
-- @data - a table of data generated by p.makeStartBoxLinksData | -- @data - a table of data generated by p.makeStartBoxLinksData | ||
--]] | --]] | ||
Line 528: | Line 543: | ||
local docTitle = data.docTitle | local docTitle = data.docTitle | ||
local title = data.title | local title = data.title | ||
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) | |||
if docTitle.exists then | if docTitle.exists then | ||
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) | local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) | ||
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) | local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) | ||
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) | local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) | ||
ret = '[%s] [%s] [%s] [%s]' | ret = '[%s] [%s] [%s] [%s]' | ||
ret = escapeBrackets(ret) | ret = escapeBrackets(ret) | ||
Line 538: | Line 553: | ||
else | else | ||
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) | local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) | ||
ret = '[%s]' | ret = '[%s] [%s]' | ||
ret = escapeBrackets(ret) | ret = escapeBrackets(ret) | ||
ret = mw.ustring.format(ret, createLink) | ret = mw.ustring.format(ret, createLink, purgeLink) | ||
end | end | ||
return ret | return ret | ||
Line 558: | Line 573: | ||
-- 'file-namespace-heading' --> 'Summary' | -- 'file-namespace-heading' --> 'Summary' | ||
-- 'other-namespaces-heading' --> 'Documentation' | -- 'other-namespaces-heading' --> 'Documentation' | ||
-- 'testcases-create-link-display' --> 'create' | -- 'testcases-create-link-display' --> 'create' | ||
--]=] | --]=] | ||
Line 592: | Line 605: | ||
if headingStyle then | if headingStyle then | ||
data.headingStyleText = headingStyle | data.headingStyleText = headingStyle | ||
else | else | ||
data. | -- 'documentation-heading' | ||
data.headingClass = message('main-div-heading-class') | |||
end | end | ||
-- Data for the [view][edit][history][purge] or [create] links. | -- Data for the [view][edit][history][purge] or [create] links. | ||
if links then | if links then | ||
-- 'mw-editsection-like plainlinks' | |||
data. | data.linksClass = message('start-box-link-classes') | ||
data.links = links | data.links = links | ||
end | end | ||
Line 615: | Line 625: | ||
local sbox = mw.html.create('div') | local sbox = mw.html.create('div') | ||
sbox | sbox | ||
-- 'documentation-startbox' | |||
: | :addClass(message('start-box-class')) | ||
:newline() | :newline() | ||
:tag('span') | :tag('span') | ||
:addClass(data.headingClass) | |||
:attr('id', 'documentation-heading') | |||
:cssText(data.headingStyleText) | :cssText(data.headingStyleText) | ||
:wikitext(data.heading) | :wikitext(data.heading) | ||
local links = data.links | local links = data.links | ||
Line 679: | Line 688: | ||
-- @env - environment table containing title objects, etc., generated with p.getEnvironment | -- @env - environment table containing title objects, etc., generated with p.getEnvironment | ||
-- | -- | ||
--]=] | --]=] | ||
Line 710: | Line 713: | ||
end | end | ||
-- Assemble the | -- Assemble the link box. | ||
local text = '' | local text = '' | ||
if linkBox then | if linkBox then | ||
Line 727: | Line 723: | ||
-- Add sandbox and testcases links. | -- Add sandbox and testcases links. | ||
-- "Editors can experiment in this template's sandbox and testcases pages." | -- "Editors can experiment in this template's sandbox and testcases pages." | ||
text = text .. (p.makeExperimentBlurb(args, env) or '') | text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />' | ||
if not args.content and not args[1] then | if not args.content and not args[1] then | ||
-- "Please add categories to the /doc subpage." | -- "Please add categories to the /doc subpage." | ||
Line 736: | Line 731: | ||
end | end | ||
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" | text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" | ||
end | end | ||
end | end | ||
local box = mw.html.create('div') | |||
-- 'documentation-metadata' | |||
box:attr('role', 'note') | |||
:addClass(message('end-box-class')) | |||
-- 'plainlinks' | |||
:addClass(message('end-box-plainlinks')) | |||
:wikitext(text) | |||
:done() | |||
return | return '\n' .. tostring(box) | ||
end | end | ||
Line 758: | Line 757: | ||
-- 'transcluded-from-blurb' --> | -- 'transcluded-from-blurb' --> | ||
-- 'The above [[Wikipedia:Template documentation|documentation]] | -- 'The above [[Wikipedia:Template documentation|documentation]] | ||
-- is [[ | -- is [[Help:Transclusion|transcluded]] from $1.' | ||
-- 'module-preload' --> 'Template:Documentation/preload-module-doc' | -- 'module-preload' --> 'Template:Documentation/preload-module-doc' | ||
-- 'create-link-display' --> 'create' | -- 'create-link-display' --> 'create' | ||
Line 948: | Line 947: | ||
) | ) | ||
return message('subpages-blurb', {subpagesLink}) | return message('subpages-blurb', {subpagesLink}) | ||
end | end | ||