Module:Documentation: Difference between revisions
From Video Credit Archive
Content deleted Content added
m 144 revisions imported: phab:T7136 |
Requested>Cocopuff2018 m 1 revision imported |
||
Line 3: | Line 3: | ||
-- Get required modules. |
-- Get required modules. |
||
local getArgs = require('Module:Arguments').getArgs |
local getArgs = require('Module:Arguments').getArgs |
||
local messageBox = require('Module:Message box') |
|||
-- Get the config table. |
-- Get the config table. |
||
Line 43: | Line 44: | ||
end |
end |
||
local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) |
|||
return ret |
|||
end |
end |
||
Line 80: | Line 82: | ||
ret[#ret + 1] = select(i, ...) |
ret[#ret + 1] = select(i, ...) |
||
end |
end |
||
return '<small style="font-style: normal;">(' .. table.concat(ret, ' | ') .. ')</small>' |
|||
-- 'documentation-toolbar' |
|||
return '<span class="' .. message('toolbar-class') .. '">(' |
|||
.. table.concat(ret, ' | ') .. ')</span>' |
|||
end |
end |
||
Line 112: | Line 112: | ||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
-- |
-- Main function |
||
---------------------------------------------------------------------------- |
---------------------------------------------------------------------------- |
||
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 129: | Line 121: | ||
-- 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 |
||
-- |
|||
-- Messages: |
|||
-- 'main-div-id' --> 'template-documentation' |
|||
-- 'main-div-classes' --> 'template-documentation iezoomfix' |
|||
--]] |
--]] |
||
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)) |
||
-- This div tag is from {{documentation/start box}}, but moving it here |
|||
-- so that we don't have to worry about unclosed tags. |
|||
:tag('div') |
:tag('div') |
||
:attr('id', message('main-div-id')) |
|||
-- 'documentation-container' |
|||
:addClass(message(' |
:addClass(message('main-div-classes')) |
||
:newline() |
:newline() |
||
:wikitext(p._startBox(args, env)) |
|||
:wikitext(p._content(args, env)) |
|||
:tag('div') |
:tag('div') |
||
:css('clear', 'both') -- So right or left floating items don't stick out of the doc box. |
|||
-- '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._endBox(args, env)) |
|||
: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 167: | Line 155: | ||
function p.getEnvironment(args) |
function p.getEnvironment(args) |
||
--[[ |
--[[ |
||
-- Returns a table with information about the environment, including title |
-- 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 293: | Line 281: | ||
function envFuncs.docSpace() |
function envFuncs.docSpace() |
||
-- The documentation namespace number. For most namespaces this is the |
-- The documentation namespace number. For most namespaces this is the same as the |
||
-- |
-- subject namespace. However, pages in the Article, File, MediaWiki or Category |
||
-- |
-- namespaces must have their /doc, /sandbox and /testcases pages in talk space. |
||
-- /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 322: | Line 309: | ||
local compareUrl = mw.uri.fullUrl( |
local compareUrl = mw.uri.fullUrl( |
||
'Special:ComparePages', |
'Special:ComparePages', |
||
{ |
{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} |
||
) |
) |
||
return tostring(compareUrl) |
return tostring(compareUrl) |
||
Line 336: | Line 323: | ||
-- 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 371: | Line 346: | ||
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 |
if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then |
||
and mw.title.equals(title, sandboxTitle)) then |
|||
return nil |
return nil |
||
end |
end |
||
Line 415: | Line 389: | ||
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 |
|||
local ret = '<div style="clear: both;"></div>' |
|||
-- 'documentation-clear' |
|||
ret = ret .. messageBox.main('ombox', omargs) |
|||
return '<div class="' .. message('clear') .. '"></div>' |
|||
return ret |
|||
.. require('Module:Message box').main('ombox', omargs) |
|||
end |
end |
||
Line 428: | Line 402: | ||
-- 'protection-template' --> 'pp-template' |
-- 'protection-template' --> 'pp-template' |
||
-- 'protection-template-args' --> {docusage = 'yes'} |
-- 'protection-template-args' --> {docusage = 'yes'} |
||
local protectionLevels |
local protectionLevels, mProtectionBanner |
||
local title = env.title |
|||
protectionLevels = env.protectionLevels |
|||
if not protectionLevels then |
if not protectionLevels then |
||
return nil |
return nil |
||
Line 436: | Line 412: | ||
if editProt then |
if editProt then |
||
-- The page is edit-protected. |
-- The page is edit-protected. |
||
mProtectionBanner = require('Module:Protection banner') |
|||
local reason = message('protection-reason-edit') |
|||
return mProtectionBanner._main{reason, 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. |
||
mProtectionBanner = require('Module:Protection banner') |
|||
return mProtectionBanner._main{action = 'move', small = true} |
|||
} |
|||
else |
else |
||
return nil |
return nil |
||
Line 583: | Line 558: | ||
-- 'file-namespace-heading' --> 'Summary' |
-- 'file-namespace-heading' --> 'Summary' |
||
-- 'other-namespaces-heading' --> 'Documentation' |
-- 'other-namespaces-heading' --> 'Documentation' |
||
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' |
|||
-- 'start-box-link-id' --> 'doc_editlinks' |
|||
-- 'testcases-create-link-display' --> 'create' |
-- 'testcases-create-link-display' --> 'create' |
||
--]=] |
--]=] |
||
Line 615: | Line 592: | ||
if headingStyle then |
if headingStyle then |
||
data.headingStyleText = headingStyle |
data.headingStyleText = headingStyle |
||
elseif subjectSpace == 10 then |
|||
-- We are in the template or template talk namespaces. |
|||
data.headingFontWeight = 'bold' |
|||
data.headingFontSize = '125%' |
|||
else |
else |
||
data.headingFontSize = '150%' |
|||
-- '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 |
||
data.linksClass = message('start-box-linkclasses') |
|||
-- 'mw-editsection-like plainlinks' |
|||
data. |
data.linksId = message('start-box-link-id') |
||
data.links = links |
data.links = links |
||
end |
end |
||
Line 635: | Line 615: | ||
local sbox = mw.html.create('div') |
local sbox = mw.html.create('div') |
||
sbox |
sbox |
||
:css('padding-bottom', '3px') |
|||
-- 'documentation-startbox' |
|||
:css('border-bottom', '1px solid #aaa') |
|||
:addClass(message('start-box-class')) |
|||
:css('margin-bottom', '1ex') |
|||
:newline() |
:newline() |
||
:tag('span') |
:tag('span') |
||
:addClass(data.headingClass) |
|||
:cssText(data.headingStyleText) |
: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 |
||
Line 697: | Line 679: | ||
-- @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 722: | 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 732: | Line 727: | ||
-- 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 '') |
||
text = text .. '<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 746: | Line 742: | ||
end |
end |
||
end |
end |
||
fmargs.text = text |
|||
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 messageBox.main('fmbox', fmargs) |
||
end |
end |
||
Line 770: | Line 758: | ||
-- 'transcluded-from-blurb' --> |
-- 'transcluded-from-blurb' --> |
||
-- 'The above [[Wikipedia:Template documentation|documentation]] |
-- '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' |