|
|
| (144 intermediate revisions by 23 users not shown) |
| Line 1: |
Line 1: |
| --This module implements {{Documentation}}.
| | |
|
| |
| local p = {}
| |
|
| |
| function p.corps(frame)
| |
| args = frame:getParent().args
| |
| local page = mw.title.getCurrentTitle()
| |
| doc = p.docname(page)
| |
| local corps = {}
| |
|
| |
| if page.subpageText == 'sandbox' then
| |
| table.insert(corps, '<div style="clear:both />')
| |
| table.insert(corps, frame:preprocess('{{Template sandbox notice}}'))
| |
| end
| |
|
| |
| table.insert(corps, p.header(page))
| |
| table.insert(corps, p.content(frame, page))
| |
| table.insert(corps, p.footer(page))
| |
|
| |
| if args.raw then
| |
| return frame:preprocess('<nowiki>' .. table.concat(corps) .. '</nowiki>\n:' .. os.clock())
| |
| end
| |
|
| |
| return table.concat(corps)
| |
| end
| |
|
| |
| function p.docname(page)
| |
| if not page.isSubpage then return page.subjectNsText .. ":" .. page.text .. "/doc" end
| |
|
| |
| if page.subpageText == 'doc'
| |
| or page.subpageText == 'sandbox'
| |
| or page.subpageText == 'testcases' then
| |
| return page.subjectNsText .. ":" .. page.baseText .. "/doc"
| |
| else
| |
| return page.subjectNsText .. ":" .. page.text .. "/doc"
| |
| end
| |
| end
| |
|
| |
| function p.ifexist(page)
| |
| if not page then return false end
| |
| if mw.title.new(page).exists then return true end
| |
| return false
| |
| end
| |
|
| |
| function p.header(page)
| |
| local header = {'<div class="template-documentation"'}
| |
|
| |
| if args.color then
| |
| table.insert(header, ' style="background:')
| |
| table.insert(header, args.color .. '"')
| |
| end
| |
|
| |
| table.insert(header, '><div style="margin-bottom:1ex; border-bottom:1px solid #aaa; padding-bottom:3px;">')
| |
| table.insert(header, '[[File:Template-info.png|50px|alt=Template documentation|link=]]')
| |
| table.insert(header, '<span style="font-weight:bold; font-size:125%"> ')
| |
|
| |
| if args.heading then table.insert(header, args.heading)
| |
| else table.insert(header, 'Template documentation') end
| |
| table.insert(header, '</span>')
| |
|
| |
| if not args.content then
| |
| table.insert(header, '<span class="mw-editsection plainlinks">[[')
| |
| local arg = mw.title.new(args[1] or doc)
| |
|
| |
| if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
| |
| table.insert(header, arg:fullUrl('action=view') .. ' view]')
| |
| table.insert(header, '] [[')
| |
| table.insert(header, arg:fullUrl('action=edit') .. ' edit]')
| |
| table.insert(header, '] [[')
| |
| table.insert(header, arg:fullUrl('action=history') .. ' history]')
| |
| table.insert(header, '] [[')
| |
| table.insert(header, page:fullUrl('action=purge') .. ' purge]')
| |
| else
| |
| table.insert(header, arg:fullUrl({["action"]="edit", ["preload"]="Template:Documentation/preload"}))
| |
| table.insert(header, ' create]')
| |
| end
| |
| table.insert(header, ']</span>')
| |
| end
| |
|
| |
| table.insert(header, '</div>')
| |
| return table.concat(header)
| |
| end
| |
|
| |
| function p.content(frame, page)
| |
| local content = {}
| |
| local arg = args[1] or doc
| |
| if args.content then
| |
| table.insert(content, '\n')
| |
| table.insert(content, args.content)
| |
| else
| |
| table.insert(content, frame:preprocess('<nowiki />'))
| |
| table.insert(content, '\n')
| |
| if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
| |
| table.insert(content, frame:preprocess('{{' .. arg .. '}}'))
| |
| end
| |
| end
| |
|
| |
| table.insert(content, '\n')
| |
| table.insert(content, frame:preprocess('<nowiki />'))
| |
| table.insert(content, '<div style="clear:both" />\n')
| |
| return table.concat(content)
| |
| end
| |
|
| |
| function p.footer(page)
| |
| local footer = {}
| |
| local arg = mw.title.new(args[1] or doc)
| |
|
| |
| table.insert(footer, '</div><div class="template-documentation plainlinks" ')
| |
| table.insert(footer, 'style="font-style:italic; margin:2px 0px 0px; padding: 0.35em 0.9em')
| |
|
| |
| if args.color then
| |
| table.insert(footer, '; background:')
| |
| table.insert(footer, args.color)
| |
| end
| |
| table.insert(footer, ';">\n')
| |
|
| |
| if args.content then
| |
| if args["link box"] then
| |
| table.insert(footer, args["link box"])
| |
| else
| |
| table.insert(footer, 'This documentation is directly included in this page.')
| |
| end
| |
| else
| |
| if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
| |
| table.insert(footer, 'The above [[Wikipedia:Template documentation|documentation]] is ')
| |
| table.insert(footer, '[[Wikipedia:Transclusion|transcluded]] from [[')
| |
| table.insert(footer, tostring(arg))
| |
| table.insert(footer, ']] <span style="font-size:89%; font-style:normal;">([')
| |
| table.insert(footer, arg:fullUrl('action=edit'))
| |
| table.insert(footer, ' edit] | [')
| |
| table.insert(footer, arg:fullUrl('action=history') .. ' history])</span>.<br />')
| |
| end
| |
| table.insert(footer, 'Editors can experiment in this templates ')
| |
|
| |
| local sandbox = arg.subjectNsText .. ":" .. arg.baseText .. "/sandbox"
| |
| local argsandbox = mw.title.new(sandbox)
| |
| if p.ifexist(sandbox) then
| |
| table.insert(footer, '[[' .. sandbox .. '|sandbox]]')
| |
| table.insert(footer, ' <span style="font-size:89%; font-style:normal;">([')
| |
| table.insert(footer, argsandbox:fullUrl('action=edit'))
| |
| table.insert(footer, ' edit])</span>')
| |
| else
| |
| table.insert(footer, 'sandbox <span style="font-size:89%; font-style:normal;">([')
| |
| table.insert(footer, argsandbox:fullUrl({["action"]="edit", ["preload"]="Template:Documentation/preload-sandbox"}))
| |
| table.insert(footer, ' create])</span>')
| |
| end
| |
| table.insert(footer, ' and ')
| |
|
| |
| local test = arg.subjectNsText .. ":" .. arg.baseText .. "/testcases"
| |
| local argtest = mw.title.new(test)
| |
| if p.ifexist(test) then
| |
| table.insert(footer, '[[' .. test .. '|testcases]]')
| |
| table.insert(footer, ' <span style="font-size:89%; font-style:normal;">([')
| |
| table.insert(footer, argtest:fullUrl('action=edit'))
| |
| table.insert(footer, ' edit])</span>')
| |
| else
| |
| table.insert(footer, 'testcases <span style="font-size:89%; font-style:normal;">([')
| |
| table.insert(footer, argtest:fullUrl({["action"]="edit", ["preload"]="Template:Documentation/preload-testcases"}))
| |
| table.insert(footer, ' create])</span>')
| |
| end
| |
|
| |
| table.insert(footer, ' pages.<br />Please add categories to the ')
| |
| table.insert(footer, '<span class="plainlinks">[')
| |
|
| |
| if args[1] and p.ifexist(args[1]) or p.ifexist(doc) then
| |
| table.insert(footer, arg:fullUrl('action=edit'))
| |
| else
| |
| table.insert(footer, arg:fullUrl({["action"]="edit", ["preload"]="Template:Documentation/preload"}))
| |
| end
| |
|
| |
| table.insert(footer, ' /doc] subpage.')
| |
| end
| |
| table.insert(footer, '</div>')
| |
| return table.concat(footer)
| |
| end
| |
|
| |
| return p
| |
This module displays a box containing documentation for templates, Lua modules and other pages. The {{Documentation}} template invokes it.
Normal usage
For most uses, you should use the {{Documentation}} template; please see that template's page for its usage instructions and parameters.
Use in other modules
To use this module from another Lua module, first load it with require:
local documentation = require('Module:Documentation').main
Then you can simply call it using a table of arguments.
documentation{content = 'Some documentation', ['link box'] = 'My custom link box'}
Please refer to the template documentation for usage instructions and a list of parameters.
Porting to other wikis
The module has a configuration file at Module:Documentation/config which is intended to allow easy translation and porting from Wikipedia to other wikis. Please see the code comments in the config page for instructions. If you have any questions, or you need a feature which is not currently implemented, please leave a message at Template talk:Documentation to get the attention of a developer.