Module:Documentation: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
(pass mw.title object to expandTemplate to avoid script errors on mainspace pages like m:Wikimedia LGBT/Barnstar) |
m (160 revisions imported from templatewiki:Module:Documentation) |
||
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('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. 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('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4) |
||
end |
end |
||
Line 112: | Line 112: | ||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
-- Main function |
|||
-- Load TemplateStyles |
|||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
p.main = |
p.main = makeInvokeFunc('_main') |
||
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 143: | Line 135: | ||
:tag('div') |
:tag('div') |
||
:attr('id', message('main-div-id')) |
:attr('id', message('main-div-id')) |
||
:addClass(message('main-div- |
:addClass(message('main-div-classes')) |
||
: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 337: | Line 334: | ||
-- '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' --> '[[ |
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page' |
||
-- 'sandbox-notice-pagetype-module' --> '[[ |
-- 'sandbox-notice-pagetype-module' --> '[[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 358: | Line 355: | ||
-- "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 370: | Line 365: | ||
local templateLink = makeWikilink(templateTitle.prefixedText) |
local templateLink = makeWikilink(templateTitle.prefixedText) |
||
local compareUrl = env.compareUrl |
local compareUrl = env.compareUrl |
||
if |
if 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 396: | Line 391: | ||
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 408: | Line 402: | ||
-- '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 editProt = protectionLevels.edit and protectionLevels.edit[1] |
||
local |
local moveProt = protectionLevels.move and protectionLevels.move[1] |
||
if editProt then |
|||
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then |
|||
-- The page is |
-- The page is edit-protected. |
||
mProtectionBanner = require('Module:Protection banner') |
|||
local frame = mw.getCurrentFrame() |
|||
local reason = message('protection-reason-edit') |
|||
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 450: | Line 445: | ||
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 497: | Line 492: | ||
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 = message('view-link-display') |
||
data.editLinkDisplay = |
data.editLinkDisplay = message('edit-link-display') |
||
data.historyLinkDisplay = |
data.historyLinkDisplay = message('history-link-display') |
||
data.purgeLinkDisplay = |
data.purgeLinkDisplay = message('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 513: | Line 508: | ||
end |
end |
||
data.preload = preload |
data.preload = preload |
||
data.createLinkDisplay = |
data.createLinkDisplay = message('create-link-display') |
||
return data |
return data |
||
end |
end |
||
Line 558: | Line 553: | ||
-- |
-- |
||
-- 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=]]' |
||
-- 'template-namespace-heading' --> 'Template documentation' |
-- 'template-namespace-heading' --> 'Template documentation' |
||
-- 'module-namespace-heading' --> 'Module documentation' |
-- 'module-namespace-heading' --> 'Module documentation' |
||
Line 584: | Line 579: | ||
data.heading = heading |
data.heading = heading |
||
elseif subjectSpace == 10 then -- Template namespace |
elseif subjectSpace == 10 then -- Template namespace |
||
data.heading = |
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading') |
||
elseif subjectSpace == 828 then -- Module namespace |
elseif subjectSpace == 828 then -- Module namespace |
||
data.heading = |
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading') |
||
elseif subjectSpace == 6 then -- File namespace |
elseif subjectSpace == 6 then -- File namespace |
||
data.heading = |
data.heading = message('file-namespace-heading') |
||
else |
else |
||
data.heading = |
data.heading = message('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 608: | Line 615: | ||
local sbox = mw.html.create('div') |
local sbox = mw.html.create('div') |
||
sbox |
sbox |
||
:css('padding-bottom', '3px') |
|||
:addClass(message('header-div-class')) |
|||
:css('border-bottom', '1px solid #aaa') |
|||
:tag('div') |
|||
:css('margin-bottom', '1ex') |
|||
:addClass(message('heading-div-class')) |
|||
: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('span') |
||
: |
:addClass(data.linksClass) |
||
:attr('id', data.linksId) |
|||
:wikitext(links) |
|||
:attr('id', data.linksId) |
|||
:wikitext(links) |
|||
end |
end |
||
return tostring(sbox) |
return tostring(sbox) |
||
Line 637: | Line 648: | ||
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 |
||
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} |
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText} |
||
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' |
|||
local cbox = mw.html.create('div') |
|||
cbox |
|||
:addClass(message('content-div-class')) |
|||
:wikitext('\n' .. (content or '') .. '\n') |
|||
return tostring(cbox) |
|||
end |
end |
||
Line 671: | Line 678: | ||
-- @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 696: | Line 710: | ||
end |
end |
||
-- Assemble the |
-- Assemble the arguments for {{fmbox}}. |
||
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 721: | Line 742: | ||
end |
end |
||
end |
end |
||
fmargs.text = text |
|||
return messageBox.main('fmbox', fmargs) |
|||
local ebox = mw.html.create('div') |
|||
ebox |
|||
:addClass(message('footer-div-class')) |
|||
:wikitext(text) |
|||
return tostring(ebox) |
|||
end |
end |
||
Line 739: | Line 757: | ||
-- '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 |
||
if not docTitle |
if not docTitle then |
||
return nil |
return nil |
||
end |
end |
||
Line 755: | Line 773: | ||
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 = message('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 = message('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 767: | Line 785: | ||
-- /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 = message('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 840: | Line 858: | ||
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 851: | Line 872: | ||
local testcasesEditDisplay = message('testcases-edit-link-display') |
local testcasesEditDisplay = message('testcases-edit-link-display') |
||
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) |
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) |
||
-- for Modules, add testcases run link if exists |
|||
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) |
|||
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 |