Module:Documentation: Difference between revisions

Content deleted Content added
Add configurable css from config, so that it can be removed from common.css. Class maintained for compatibility on other wikis and with scripts. See Special:Permalink/906970618#Moving CSS
m 1 revision imported from wikipedia:Module:Documentation
 
(18 intermediate revisions by 13 users not shown)
Line 3:
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
 
-- Get the config table.
Line 44 ⟶ 43:
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 style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>'
return '<span class="' .. message('toolbar-class') .. '">('
.. table.concat(ret, ' &#124; ') .. ')</span>'
end
 
Line 112:
 
----------------------------------------------------------------------------
-- MainEntry functionpoints
----------------------------------------------------------------------------
 
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')
Line 121 ⟶ 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-classescontainer'))
:css(message('main-div-css', nil, 'table'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation'
:css('clear', 'both') -- So right or left floating items don't stick out of the doc box.
: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 156 ⟶ 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 282 ⟶ 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 310 ⟶ 322:
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
Line 324 ⟶ 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 347 ⟶ 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 390 ⟶ 415:
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
 
omargs.text = text
-- 'documentation-clear'
local ret = '<div style="clear: both;"></div>'
return '<div class="' .. message('clear') .. '"></div>'
ret = ret .. messageBox.main('ombox', omargs)
.. require('Module:Message box').main('ombox', omargs)
return ret
end
 
Line 403 ⟶ 428:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels, mProtectionBanner= env.protectionLevels
local title = env.title
protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
Line 413 ⟶ 436:
if editProt then
-- The page is edit-protected.
mProtectionBanner =return require('Module:Protection banner')._main{
local reason = message('protection-reason-edit'), small = true
}
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 =return require('Module:Protection banner')._main{
return mProtectionBanner._main{ action = 'move', small = true}
}
else
return nil
Line 446 ⟶ 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 559 ⟶ 583:
-- '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 593 ⟶ 615:
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
-- 'documentation-heading'
data.headingFontSize = '150%'
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 616 ⟶ 635:
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:css('padding-bottom', '3px')
:addClass(message('start-box-class'))
:css('border-bottom', '1px solid #aaa')
:css('margin-bottom', '1ex')
:newline()
:tag('span')
:addClass(data.headingClass)
:cssText(data.headingStyleText)
:css('font-weight', data.headingFontWeight)
:css('font-size', data.headingFontSize)
:wikitext(data.heading)
local links = data.links
Line 680 ⟶ 697:
-- @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 711 ⟶ 722:
end
 
-- Assemble the argumentslink for {{fmbox}}box.
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 = ''
if linkBox then
Line 728 ⟶ 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 743 ⟶ 746:
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 messageBox.main('fmbox\n', fmargs.. tostring(box)
end
 
Line 759 ⟶ 770:
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[WikipediaHelp:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'