Module:Documentation: Difference between revisions
From Mariopedia, a wiki on Mario, Yoshi, Wario, Donkey Kong, Super Smash Bros., and more!
Jump to navigationJump to search
Content deleted Content added
m Protected "Module:Documentation": High-risk Lua module ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) |
m Protected "Module:Documentation": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only administrators] (indefinite)) |
||
Line 7: | Line 7: | ||
-- Get the config table. |
-- Get the config table. |
||
local cfg = mw.loadData('Module:Documentation/config') |
local cfg = mw.loadData('Module:Documentation/config') |
||
local i18n = mw.loadData('Module:Documentation/i18n') |
|||
local p = {} |
local p = {} |
||
Line 33: | Line 33: | ||
expectType = expectType or 'string' |
expectType = expectType or 'string' |
||
if type(msg) ~= expectType then |
if type(msg) ~= expectType then |
||
error(' |
error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) |
||
end |
end |
||
if not valArray then |
if not valArray then |
||
Line 41: | Line 41: | ||
local function getMessageVal(match) |
local function getMessageVal(match) |
||
match = tonumber(match) |
match = tonumber(match) |
||
return valArray[match] or error(' |
return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) |
||
end |
end |
||
Line 112: | Line 112: | ||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
-- Load TemplateStyles |
|||
-- Main function |
|||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
p.main = |
p.main = function(frame) |
||
local parent = frame.getParent(frame) |
|||
local output = p._main(parent.args) |
|||
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. frame:preprocess(output) |
|||
end |
|||
---------------------------------------------------------------------------- |
|||
-- Main function |
|||
---------------------------------------------------------------------------- |
|||
function p._main(args) |
function p._main(args) |
||
Line 135: | Line 143: | ||
:tag('div') |
:tag('div') |
||
:attr('id', message('main-div-id')) |
:attr('id', message('main-div-id')) |
||
:addClass(message('main-div- |
:addClass(message('main-div-class')) |
||
:newline() |
|||
:wikitext(p._startBox(args, env)) |
:wikitext(p._startBox(args, env)) |
||
:wikitext(p._content(args, env)) |
:wikitext(p._content(args, env)) |
||
:tag('div') |
|||
:css('clear', 'both') -- So right or left floating items don't stick out of the doc box. |
|||
:newline() |
|||
:done() |
|||
:done() |
:done() |
||
:wikitext(p._endBox(args, env)) |
:wikitext(p._endBox(args, env)) |
||
Line 334: | Line 337: | ||
-- '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).' |
||
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template |
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' |
||
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template |
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' |
||
-- 'sandbox-notice-pagetype-other' --> 'sandbox page' |
-- 'sandbox-notice-pagetype-other' --> 'sandbox page' |
||
-- 'sandbox-notice-compare-link-display' --> 'diff' |
-- 'sandbox-notice-compare-link-display' --> 'diff' |
||
Line 355: | Line 358: | ||
-- "This is the template sandbox for [[Template:Foo]] (diff)." |
-- "This is the template sandbox for [[Template:Foo]] (diff)." |
||
local text = '' |
local text = '' |
||
local frame = mw.getCurrentFrame() |
|||
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. |
|||
local pagetype |
local pagetype |
||
if subjectSpace == 10 then |
if subjectSpace == 10 then |
||
Line 365: | Line 370: | ||
local templateLink = makeWikilink(templateTitle.prefixedText) |
local templateLink = makeWikilink(templateTitle.prefixedText) |
||
local compareUrl = env.compareUrl |
local compareUrl = env.compareUrl |
||
if compareUrl then |
if isPreviewing or not compareUrl then |
||
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) |
|||
else |
|||
local compareDisplay = message('sandbox-notice-compare-link-display') |
local compareDisplay = message('sandbox-notice-compare-link-display') |
||
local compareLink = makeUrlLink(compareUrl, compareDisplay) |
local compareLink = makeUrlLink(compareUrl, compareDisplay) |
||
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) |
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) |
||
else |
|||
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) |
|||
end |
end |
||
-- Get the test cases page blurb if the page exists. This is something like |
-- Get the test cases page blurb if the page exists. This is something like |
||
Line 391: | Line 396: | ||
text = text .. makeCategoryLink(message('sandbox-category')) |
text = text .. makeCategoryLink(message('sandbox-category')) |
||
omargs.text = text |
omargs.text = text |
||
omargs.class = message('sandbox-class') |
|||
local ret = '<div style="clear: both;"></div>' |
local ret = '<div style="clear: both;"></div>' |
||
ret = ret .. messageBox.main('ombox', omargs) |
ret = ret .. messageBox.main('ombox', omargs) |
||
Line 402: | Line 408: | ||
-- 'protection-template' --> 'pp-template' |
-- 'protection-template' --> 'pp-template' |
||
-- 'protection-template-args' --> {docusage = 'yes'} |
-- 'protection-template-args' --> {docusage = 'yes'} |
||
local protectionLevels, mProtectionBanner |
|||
local title = env.title |
local title = env.title |
||
local protectionLevels |
|||
local protectionTemplate = message('protection-template') |
|||
local namespace = title.namespace |
|||
if not (protectionTemplate and (namespace == 10 or namespace == 828)) then |
|||
-- Don't display the protection template if we are not in the template or module namespaces. |
|||
return nil |
|||
end |
|||
protectionLevels = env.protectionLevels |
protectionLevels = env.protectionLevels |
||
if not protectionLevels then |
if not protectionLevels then |
||
return nil |
return nil |
||
end |
end |
||
local |
local editLevels = protectionLevels.edit |
||
local |
local moveLevels = protectionLevels.move |
||
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then |
|||
if editProt then |
|||
-- The page is |
-- The page is full-move protected, or full, template, or semi-protected. |
||
local frame = mw.getCurrentFrame() |
|||
mProtectionBanner = require('Module:Protection banner') |
|||
return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} |
|||
return mProtectionBanner._main{reason, small = true} |
|||
elseif moveProt and moveProt ~= 'autoconfirmed' then |
|||
-- The page is move-protected but not edit-protected. Exclude move |
|||
-- protection with the level "autoconfirmed", as this is equivalent to |
|||
-- no move protection at all. |
|||
mProtectionBanner = require('Module:Protection banner') |
|||
return mProtectionBanner._main{action = 'move', small = true} |
|||
else |
else |
||
return nil |
return nil |
||
Line 492: | Line 497: | ||
data.docTitle = docTitle |
data.docTitle = docTitle |
||
-- View, display, edit, and purge links if /doc exists. |
-- View, display, edit, and purge links if /doc exists. |
||
data.viewLinkDisplay = |
data.viewLinkDisplay = i18n['view-link-display'] |
||
data.editLinkDisplay = |
data.editLinkDisplay = i18n['edit-link-display'] |
||
data.historyLinkDisplay = |
data.historyLinkDisplay = i18n['history-link-display'] |
||
data.purgeLinkDisplay = |
data.purgeLinkDisplay = i18n['purge-link-display'] |
||
-- Create link if /doc doesn't exist. |
-- Create link if /doc doesn't exist. |
||
local preload = args.preload |
local preload = args.preload |
||
Line 508: | Line 513: | ||
end |
end |
||
data.preload = preload |
data.preload = preload |
||
data.createLinkDisplay = |
data.createLinkDisplay = i18n['create-link-display'] |
||
return data |
return data |
||
end |
end |
||
Line 553: | Line 558: | ||
-- |
-- |
||
-- Messages: |
-- Messages: |
||
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]' |
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' |
||
-- 'template-namespace-heading' --> 'Template documentation' |
-- 'template-namespace-heading' --> 'Template documentation' |
||
-- 'module-namespace-heading' --> 'Module documentation' |
-- 'module-namespace-heading' --> 'Module documentation' |
||
Line 579: | Line 584: | ||
data.heading = heading |
data.heading = heading |
||
elseif subjectSpace == 10 then -- Template namespace |
elseif subjectSpace == 10 then -- Template namespace |
||
data.heading = |
data.heading = i18n['template-namespace-heading'] |
||
elseif subjectSpace == 828 then -- Module namespace |
elseif subjectSpace == 828 then -- Module namespace |
||
data.heading = |
data.heading = i18n['module-namespace-heading'] |
||
elseif subjectSpace == 6 then -- File namespace |
elseif subjectSpace == 6 then -- File namespace |
||
data.heading = |
data.heading = i18n['file-namespace-heading'] |
||
else |
else |
||
data.heading = |
data.heading = i18n['other-namespaces-heading'] |
||
end |
|||
-- Heading CSS |
|||
local headingStyle = args['heading-style'] |
|||
if headingStyle then |
|||
data.headingStyleText = headingStyle |
|||
elseif subjectSpace == 10 then |
|||
-- We are in the template or template talk namespaces. |
|||
data.headingFontWeight = 'bold' |
|||
data.headingFontSize = '125%' |
|||
else |
|||
data.headingFontSize = '150%' |
|||
end |
end |
||
Line 615: | Line 608: | ||
local sbox = mw.html.create('div') |
local sbox = mw.html.create('div') |
||
sbox |
sbox |
||
:addClass(message('header-div-class')) |
|||
:css('padding-bottom', '3px') |
|||
:tag('div') |
|||
:css('border-bottom', '1px solid #aaa') |
|||
:addClass(message('heading-div-class')) |
|||
:css('margin-bottom', '1ex') |
|||
:newline() |
|||
:tag('span') |
|||
:cssText(data.headingStyleText) |
|||
:css('font-weight', data.headingFontWeight) |
|||
:css('font-size', data.headingFontSize) |
|||
:wikitext(data.heading) |
:wikitext(data.heading) |
||
local links = data.links |
local links = data.links |
||
if links then |
if links then |
||
sbox |
sbox |
||
: |
:tag('div') |
||
: |
:addClass(data.linksClass) |
||
:attr('id', data.linksId) |
|||
:wikitext(links) |
|||
:wikitext(links) |
|||
end |
end |
||
return tostring(sbox) |
return tostring(sbox) |
||
Line 652: | Line 641: | ||
-- 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. |
||
local cbox = mw.html.create('div') |
|||
return '\n' .. (content or '') .. '\n' |
|||
cbox |
|||
:addClass(message('content-div-class')) |
|||
:wikitext('\n' .. (content or '') .. '\n') |
|||
return tostring(cbox) |
|||
end |
end |
||
Line 678: | Line 671: | ||
-- @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 |
||
-- |
|||
-- Messages: |
|||
-- 'fmbox-id' --> 'documentation-meta-data' |
|||
-- 'fmbox-style' --> 'background-color: #ecfcf4' |
|||
-- 'fmbox-textstyle' --> 'font-style: italic' |
|||
-- |
|||
-- The HTML is generated by the {{fmbox}} template, courtesy of [[Module:Message box]]. |
|||
--]=] |
--]=] |
||
Line 710: | Line 696: | ||
end |
end |
||
-- Assemble the |
-- Assemble the footer text field. |
||
local fmargs = {} |
|||
fmargs.id = message('fmbox-id') -- Sets 'documentation-meta-data' |
|||
fmargs.image = 'none' |
|||
fmargs.style = message('fmbox-style') -- Sets 'background-color: #ecfcf4' |
|||
fmargs.textstyle = message('fmbox-textstyle') -- 'font-style: italic;' |
|||
-- Assemble the fmbox text field. |
|||
local text = '' |
local text = '' |
||
if linkBox then |
if linkBox then |
||
Line 742: | Line 721: | ||
end |
end |
||
end |
end |
||
fmargs.text = text |
|||
local ebox = mw.html.create('div') |
|||
return messageBox.main('fmbox', fmargs) |
|||
ebox |
|||
:addClass(message('footer-div-class')) |
|||
:wikitext(text) |
|||
return tostring(ebox) |
|||
end |
end |
||
Line 757: | Line 739: | ||
-- 'history-link-display' --> 'history' |
-- 'history-link-display' --> 'history' |
||
-- 'transcluded-from-blurb' --> |
-- 'transcluded-from-blurb' --> |
||
-- 'The above [[ |
-- 'The above [[Wikipedia:Template documentation|documentation]] |
||
-- is [[ |
-- is [[Wikipedia: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' |
||
-- 'create-module-doc-blurb' --> |
-- 'create-module-doc-blurb' --> |
||
-- 'You might want to $1 a documentation page for this [[ |
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].' |
||
--]=] |
--]=] |
||
local docTitle = env.docTitle |
local docTitle = env.docTitle |
||
Line 773: | Line 755: | ||
local docLink = makeWikilink(docTitle.prefixedText) |
local docLink = makeWikilink(docTitle.prefixedText) |
||
local editUrl = docTitle:fullUrl{action = 'edit'} |
local editUrl = docTitle:fullUrl{action = 'edit'} |
||
local editDisplay = |
local editDisplay = i18n['edit-link-display'] |
||
local editLink = makeUrlLink(editUrl, editDisplay) |
local editLink = makeUrlLink(editUrl, editDisplay) |
||
local historyUrl = docTitle:fullUrl{action = 'history'} |
local historyUrl = docTitle:fullUrl{action = 'history'} |
||
local historyDisplay = |
local historyDisplay = i18n['history-link-display'] |
||
local historyLink = makeUrlLink(historyUrl, historyDisplay) |
local historyLink = makeUrlLink(historyUrl, historyDisplay) |
||
ret = message('transcluded-from-blurb', {docLink}) |
ret = message('transcluded-from-blurb', {docLink}) |
||
Line 785: | Line 767: | ||
-- /doc does not exist; ask to create it. |
-- /doc does not exist; ask to create it. |
||
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} |
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} |
||
local createDisplay = |
local createDisplay = i18n['create-link-display'] |
||
local createLink = makeUrlLink(createUrl, createDisplay) |
local createLink = makeUrlLink(createUrl, createDisplay) |
||
ret = message('create-module-doc-blurb', {createLink}) |
ret = message('create-module-doc-blurb', {createLink}) |
||
Line 858: | Line 840: | ||
local mirrorPreload = message('mirror-link-preload') |
local mirrorPreload = message('mirror-link-preload') |
||
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} |
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 872: | Line 851: | ||
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 |