Module:Documentation
From D&D 5e
Documentation for this module may be created at Module:Documentation/doc
--This module implements {{Documentation}}. --TODO: Implement a class 'ConcatBuilder' to reduce redundancy --'table.insert(<MyTable>, <MyString>)' and 'table.concat(<MyTable>)' 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