Module:Documentation: Difference between revisions
Jump to navigation
Jump to search
m>Mr. Stradivarius convert makeCategoriesBlurb comment |
MeowyCats2 (talk | contribs) m 224 revisions imported |
||
(138 intermediate revisions by 68 users not shown) | |||
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 28: | Line 26: | ||
-- If the table valArray is present, strings such as $1, $2 etc. in the | -- If the table valArray is present, strings such as $1, $2 etc. in the | ||
-- message are substituted with values from the table keys [1], [2] etc. | -- message are substituted with values from the table keys [1], [2] etc. | ||
-- For example, if the message | -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', | ||
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." | -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." | ||
--]] | --]] | ||
Line 45: | Line 43: | ||
end | end | ||
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal) | |||
end | end | ||
Line 83: | 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 113: | 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 122: | 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 = | local root = mw.html.create() | ||
root | root | ||
:tag('div') | |||
-- '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() | |||
: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() | |||
return tostring(root) | :done() | ||
:wikitext(p._endBox(args, env)) | |||
:done() | |||
:wikitext(p.addTrackingCategories(env)) | |||
-- 'Module:Documentation/styles.css' | |||
return mw.getCurrentFrame():extensionTag ( | |||
'templatestyles', '', {src=cfg['templatestyles'] | |||
}) .. tostring(root) | |||
end | end | ||
Line 157: | Line 167: | ||
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 167: | Line 177: | ||
-- 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 261: | Line 270: | ||
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) | return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) | ||
end | end | ||
function envFuncs.subjectSpace() | function envFuncs.subjectSpace() | ||
Line 277: | Line 278: | ||
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 302: | Line 304: | ||
local templateTitle = env.templateTitle | local templateTitle = env.templateTitle | ||
local sandboxTitle = env.sandboxTitle | local sandboxTitle = env.sandboxTitle | ||
local compareUrl = mw.uri.fullUrl( | if templateTitle.exists and sandboxTitle.exists then | ||
local compareUrl = mw.uri.fullUrl( | |||
'Special:ComparePages', | |||
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} | |||
) | |||
return tostring(compareUrl) | |||
else | |||
return nil | |||
end | |||
end | end | ||
return env | return env | ||
end | end | ||
---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ||
Line 415: | Line 334: | ||
-- which generate the box HTML. | -- which generate the box HTML. | ||
--]] | --]] | ||
env = env or p.getEnvironment(args) | |||
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 445: | Line 365: | ||
-- 'history-link-display' --> 'history' | -- 'history-link-display' --> 'history' | ||
-- 'purge-link-display' --> 'purge' | -- 'purge-link-display' --> 'purge' | ||
-- ' | -- 'module-preload' --> 'Template:Documentation/preload-module-doc' | ||
-- 'docpage-preload' --> 'Template:Documentation/preload' | -- 'docpage-preload' --> 'Template:Documentation/preload' | ||
-- 'create-link-display' --> 'create' | -- 'create-link-display' --> 'create' | ||
--]] | --]] | ||
local | local subjectSpace = env.subjectSpace | ||
local title = env.title | local title = env.title | ||
local docTitle = env.docTitle | local docTitle = env.docTitle | ||
Line 456: | Line 375: | ||
return nil | return nil | ||
end | end | ||
if docTitle.isRedirect then | |||
docTitle = docTitle.redirectTarget | |||
end | |||
local data = {} | |||
data.title = title | data.title = title | ||
data.docTitle = docTitle | data.docTitle = docTitle | ||
Line 466: | Line 390: | ||
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(' | preload = message('module-preload') | ||
else | else | ||
preload = message('docpage-preload') | preload = message('docpage-preload') | ||
Line 479: | Line 403: | ||
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 | ||
--]] | --]] | ||
local function escapeBrackets(s) | |||
-- Escapes square brackets with HTML entities. | |||
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities. | |||
s = s:gsub('%]', ']') | |||
return s | |||
end | |||
local ret | local ret | ||
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 = | ret = escapeBrackets(ret) | ||
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) | ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) | ||
else | else | ||
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) | |||
ret = '[%s] [%s]' | |||
ret = escapeBrackets(ret) | |||
ret = mw.ustring.format(ret, createLink, purgeLink) | |||
end | end | ||
return ret | return ret | ||
Line 508: | Line 442: | ||
-- | -- | ||
-- Messages: | -- Messages: | ||
-- 'documentation-icon-wikitext' --> '[[File:Template- | -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]' | ||
-- 'template-namespace-heading' --> 'Template documentation' | -- 'template-namespace-heading' --> 'Template documentation' | ||
-- 'module-namespace-heading' --> 'Module documentation' | -- 'module-namespace-heading' --> 'Module documentation' | ||
-- '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 547: | Line 479: | ||
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 568: | Line 497: | ||
-- Renders the start box html. | -- Renders the start box html. | ||
-- @data - a table of data generated by p.makeStartBoxData. | -- @data - a table of data generated by p.makeStartBoxData. | ||
local sbox = | local sbox = mw.html.create('div') | ||
sbox | sbox | ||
-- 'documentation-startbox' | |||
:addClass(message('start-box-class')) | |||
:newline() | |||
:tag('span') | |||
:addClass(data.headingClass) | |||
:attr('id', 'documentation-heading') | |||
:cssText(data.headingStyleText) | |||
:wikitext(data.heading) | |||
local links = data.links | local links = data.links | ||
if links then | if links then | ||
sbox | sbox:tag('span') | ||
:addClass(data.linksClass) | |||
:attr('id', data.linksId) | |||
:wikitext(links) | |||
end | end | ||
return tostring(sbox) | return tostring(sbox) | ||
Line 599: | Line 527: | ||
-- @args - a table of arguments passed by the user | -- @args - a table of arguments passed by the user | ||
-- @env - environment table containing title objects, etc., generated with p.getEnvironment | -- @env - environment table containing title objects, etc., generated with p.getEnvironment | ||
env = env or p.getEnvironment(args) | |||
local docTitle = env.docTitle | local docTitle = env.docTitle | ||
local content = args.content | local content = args.content | ||
if not content and docTitle and docTitle.exists then | if not content and docTitle and docTitle.exists then | ||
local | content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText} | ||
content = | end | ||
if mw.site.siteName == "Miraheze Developers Wiki" and args.noexportinstructions ~= "yes" then | |||
local export = mw.getCurrentFrame():expandTemplate{title="How to export"} | |||
content = export .. "<br/>" .. (content or '') | |||
end | end | ||
-- The line breaks below are necessary so that "=== Headings ===" at the start and end | -- The line breaks below are necessary so that "=== Headings ===" at the start and end | ||
-- of docs are interpreted correctly. | -- of docs are interpreted correctly. | ||
return '\n' .. (content or '') .. '\n' | return '\n' .. (content or '') .. '\n' | ||
end | |||
p.contentTitle = makeInvokeFunc('_contentTitle') | |||
function p._contentTitle(args, env) | |||
env = env or p.getEnvironment(args) | |||
local docTitle = env.docTitle | |||
if not args.content and docTitle and docTitle.exists then | |||
return docTitle.prefixedText | |||
else | |||
return '' | |||
end | |||
end | end | ||
Line 622: | Line 566: | ||
-- @env - environment table containing title objects, etc., generated with p.getEnvironment | -- @env - environment table containing title objects, etc., generated with p.getEnvironment | ||
-- | -- | ||
--]=] | --]=] | ||
-- Get environment data. | -- Get environment data. | ||
env = env or p.getEnvironment(args) | |||
local subjectSpace = env.subjectSpace | local subjectSpace = env.subjectSpace | ||
local docTitle = env.docTitle | local docTitle = env.docTitle | ||
Line 652: | Line 591: | ||
end | end | ||
-- Assemble the | -- Assemble the link box. | ||
local text = '' | local text = '' | ||
if linkBox then | if linkBox then | ||
text = text .. linkBox | text = text .. linkBox | ||
else | else | ||
text = text .. (p.makeDocPageBlurb(args, env) or '') | text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." | ||
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then | |||
if subjectSpace == 2 or subjectSpace == | -- We are in the user, template or module namespaces. | ||
-- We are in the user, module | -- Add sandbox and testcases links. | ||
text = text .. p. | -- "Editors can experiment in this template's sandbox and testcases pages." | ||
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." | |||
-- Don't show this message with inline docs or with an explicitly specified doc page, | |||
-- as then it is unclear where to add the categories. | |||
text = text .. (p.makeCategoriesBlurb(args, env) or '') | text = text .. (p.makeCategoriesBlurb(args, env) or '') | ||
end | end | ||
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 704: | Line 635: | ||
-- '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 739: | Line 670: | ||
end | end | ||
function p. | function p.makeExperimentBlurb(args, env) | ||
--[[ | --[[ | ||
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." | -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." | ||
Line 754: | Line 685: | ||
-- 'mirror-edit-summary' --> 'Create sandbox version of $1' | -- 'mirror-edit-summary' --> 'Create sandbox version of $1' | ||
-- 'mirror-link-display' --> 'mirror' | -- 'mirror-link-display' --> 'mirror' | ||
-- 'mirror-link-preload' --> 'Template:Documentation/mirror' | |||
-- 'sandbox-link-display' --> 'sandbox' | -- 'sandbox-link-display' --> 'sandbox' | ||
-- 'testcases-link-display' --> 'testcases' | -- 'testcases-link-display' --> 'testcases' | ||
-- 'testcases-edit-link-display'--> 'edit' | -- 'testcases-edit-link-display'--> 'edit' | ||
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' | -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' | ||
-- 'testcases-create-link-display' --> 'create' | -- 'testcases-create-link-display' --> 'create' | ||
Line 802: | Line 733: | ||
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) | local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) | ||
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) | local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) | ||
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = | local mirrorPreload = message('mirror-link-preload') | ||
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} | |||
if subjectSpace == 828 then | |||
mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary} | |||
end | |||
local mirrorDisplay = message('mirror-link-display') | local mirrorDisplay = message('mirror-link-display') | ||
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) | local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) | ||
Line 814: | Line 749: | ||
local testcasesEditDisplay = message('testcases-edit-link-display') | local testcasesEditDisplay = message('testcases-edit-link-display') | ||
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) | local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) | ||
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) | -- for Modules, add testcases run link if exists | ||
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then | |||
local testcasesRunLinkDisplay = message('testcases-run-link-display') | |||
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) | |||
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink) | |||
else | |||
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) | |||
end | |||
else | else | ||
local testcasesPreload | local testcasesPreload | ||
Line 854: | Line 796: | ||
function p.makeSubpagesBlurb(args, env) | function p.makeSubpagesBlurb(args, env) | ||
-- | --[[ | ||
-- Generates the "Subpages of this template" link. | |||
-- @args - a table of arguments passed by the user | |||
-- @env - environment table containing title objects, etc., generated with p.getEnvironment | |||
-- Messages: | |||
-- 'template-pagetype' --> 'template' | |||
-- 'module-pagetype' --> 'module' | |||
-- 'default-pagetype' --> 'page' | |||
-- 'subpages-link-display' --> 'Subpages of this $1' | |||
--]] | |||
local subjectSpace = env.subjectSpace | local subjectSpace = env.subjectSpace | ||
local templateTitle = env.templateTitle | local templateTitle = env.templateTitle | ||
Line 860: | Line 812: | ||
return nil | return nil | ||
end | end | ||
local pagetype | local pagetype | ||
if subjectSpace == 10 then | if subjectSpace == 10 then | ||
Line 869: | Line 820: | ||
pagetype = message('default-pagetype') | pagetype = message('default-pagetype') | ||
end | end | ||
local subpagesLink = makeWikilink( | |||
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', | 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', | ||
message('subpages-link-display', {pagetype}) | message('subpages-link-display', {pagetype}) | ||
) | ) | ||
return message('subpages-blurb', {subpagesLink}) | |||
end | end | ||
Line 908: | Line 841: | ||
-- 'testcases-subpage' --> 'testcases' | -- 'testcases-subpage' --> 'testcases' | ||
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' | -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' | ||
-- | -- | ||
-- /testcases pages in the module namespace are not categorised, as they may have | |||
-- {{documentation}} transcluded automatically. | |||
--]] | --]] | ||
local title = env.title | local title = env.title | ||
local subjectSpace = env.subjectSpace | |||
if not title or not subjectSpace then | |||
return nil | |||
end | |||
local subpage = title.subpageText | |||
local ret = '' | local ret = '' | ||
if message('display-strange-usage-category', nil, 'boolean') | if message('display-strange-usage-category', nil, 'boolean') | ||
and (subpage == message('doc-subpage') or subpage == message('testcases-subpage')) | and ( | ||
subpage == message('doc-subpage') | |||
or subjectSpace ~= 828 and subpage == message('testcases-subpage') | |||
) | |||
then | then | ||
ret = ret .. makeCategoryLink(message('strange-usage-category')) | |||
ret = ret .. makeCategoryLink(message('strange-usage-category') | |||
end | end | ||
return ret | return ret |