Module:Documentation: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
m
role=note for end box
(don’t preprocess the result—everything should already have been preprocessed by that point, and the yet another preprocessing makes the section edit links point to this module instead of the respective documentation subpage)
m (role=note for end box)
Line 3:
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
 
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
 
local i18n = mw.loadData('Module:Documentation/i18n')
local p = {}
 
Line 33 ⟶ 32:
expectType = expectType or 'string'
if type(msg) ~= expectType then
error(require('Modulemessage:TNT type error in message cfg.') .format(. cfgKey .. 'I18n/Documentation', ('cfg-error-msg-type', cfgKey,.. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
Line 41 ⟶ 40:
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error(require('Modulemessage:TNT').format('I18n/Documentation', 'cfg-error-msg-empty',no value found for key '$' .. match, .. ' in message cfg.' .. cfgKey), 4)
end
 
local ret =return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
return ret
end
 
Line 82 ⟶ 80:
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return '<small>(' .. table.concat(ret, ' &#124; ') .. ')</small>'
return '<span class="' .. message('toolbar-class') .. '">('
.. table.concat(ret, ' &#124; ') .. ')</span>'
end
 
Line 112:
 
----------------------------------------------------------------------------
-- Entry points
-- Load TemplateStyles
----------------------------------------------------------------------------
 
function p.main = functionnonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
local parent = frame.getParent(frame)
return frame:expandTemplate{title = 'module test cases notice'}
local output = p._main(parent.args)
else
return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
return p.main(frame)
end
end
 
p.main = makeInvokeFunc('_main')
----------------------------------------------------------------------------
-- Main function
----------------------------------------------------------------------------
 
function p._main(args)
Line 129:
-- This function defines logic flow for the module.
-- @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 root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(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')
-- 'documentation-container'
:attr('id', message('main-div-id'))
:addClass(message('main-div-classcontainer'))
:newline()
:wikitext(p._startBox(args, env))
:tag('div')
:wikitext(p._content(args, env))
-- '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()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p._endBox(args, env))
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return tostring(root)
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
 
Line 158 ⟶ 167:
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title objects and other namespace- or
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
Line 284 ⟶ 293:
 
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the same as the
-- same as the subject namespace. However, pages in the Article, File, MediaWiki or Category
-- MediaWiki or Category namespaces must have their /doc, /sandbox and /testcases pages in talk space.
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
Line 312 ⟶ 322:
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
Line 326 ⟶ 336:
-- 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)
Line 337 ⟶ 359:
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
Line 349 ⟶ 371:
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
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
end
Line 358 ⟶ 381:
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local frame = mw.getCurrentFrame()
local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
local pagetype
if subjectSpace == 10 then
Line 370 ⟶ 391:
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if isPreviewing or not compareUrl then
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
else
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
Line 394 ⟶ 415:
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
 
omargs.text = text
-- 'documentation-clear'
omargs.class = message('sandbox-class')
return messageBox'<div class="' .main. message('omboxclear', omargs) .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
 
Line 406 ⟶ 428:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local titleprotectionLevels = env.titleprotectionLevels
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
if not protectionLevels then
return nil
end
local editLevelseditProt = protectionLevels.edit and protectionLevels.edit[1]
local moveLevelsmoveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
-- The page is full-move protected, or full, template, or semiedit-protected.
return require('Module:Protection banner')._main{
local frame = mw.getCurrentFrame()
return frame:expandTemplate{title = protectionTemplate, args = message('protection-templatereason-argsedit'), nil,small 'table')}= 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.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
Line 448 ⟶ 470:
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
Line 495 ⟶ 517:
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = i18n[message('view-link-display'])
data.editLinkDisplay = i18n[message('edit-link-display'])
data.historyLinkDisplay = i18n[message('history-link-display'])
data.purgeLinkDisplay = i18n[message('purge-link-display'])
-- Create link if /doc doesn't exist.
local preload = args.preload
Line 511 ⟶ 533:
end
data.preload = preload
data.createLinkDisplay = i18n[message('create-link-display'])
return data
end
Line 523 ⟶ 545:
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities.
s = s:gsub('%]', '&#93;')
return s
:gsub('%[', '&#91;') -- Replace square brackets with HTML entities.
:gsub('%]', '&#93;')
end
 
Line 556 ⟶ 578:
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
-- 'start-box-link-id' --> 'doc_editlinks'
-- 'testcases-create-link-display' --> 'create'
--]=]
Line 582 ⟶ 602:
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = i18n[message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading'])
elseif subjectSpace == 828 then -- Module namespace
data.heading = i18n[message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading'])
elseif subjectSpace == 6 then -- File namespace
data.heading = i18n[message('file-namespace-heading'])
else
data.heading = i18n[message('other-namespaces-heading'])
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-linkclasses')
data.linksIdlinksClass = message('start-box-link-idclasses')
data.links = links
end
Line 606 ⟶ 635:
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('header-div-class'))
:addClass(message('start-box-class'))
:tag('div')
:newline()
:addClass(message('heading-div-class'))
:tag('span')
:addClass(data.headingClass)
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:tagaddClass('div'data.linksClass)
:addClassattr('id', data.linksClasslinksId)
:wikitext(links)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
Line 635 ⟶ 666:
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- 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
 
Line 669 ⟶ 696:
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
Line 694 ⟶ 722:
end
 
-- Assemble the footerlink text fieldbox.
local text = ''
if linkBox then
Line 704 ⟶ 732:
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
text = text .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
Line 719 ⟶ 746:
end
end
 
local eboxbox = mw.html.create('div')
-- 'documentation-metadata'
ebox
box:attr('role', 'note')
:addClass(message('footer-div-class'))
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return tostring(ebox)
 
return '\n' .. tostring(box)
end
 
Line 737 ⟶ 769:
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[w:Wikipedia:Template documentation|documentation]]
-- is [[w:WikipediaHelp:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle or args.content then
return nil
end
Line 753 ⟶ 785:
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = i18n[message('edit-link-display'])
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = i18n[message('history-link-display'])
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
Line 765 ⟶ 797:
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = i18n[message('create-link-display'])
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
Line 838 ⟶ 870:
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 mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
Line 849 ⟶ 884:
local testcasesEditDisplay = message('testcases-edit-link-display')
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
local testcasesPreload
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu