Difference between revisions of "Module:Documentation"

From Veloopti Help
Jump to: navigation, search
Line 1: Line 1:
 
--This module implements {{Documentation}}.
 
--This module implements {{Documentation}}.
--TODO: Implement a class 'ConcatBuilder' to reduce redundancy
 
--'table.insert(<MyTable>, <MyString>)' and 'table.concat(<MyTable>)'
 
 
   
 
   
 
local p = {}
 
local p = {}

Revision as of 13:34, 29 August 2013

Documentation for this module may be created at Module:Documentation/doc

--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%">&nbsp;')
 
    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">&#91;[')
        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, '&#93;&#32;&#91;[')
            table.insert(header, arg:fullUrl('action=edit') .. ' edit]')
            table.insert(header, '&#93;&#32;&#91;[')
            table.insert(header, arg:fullUrl('action=history') .. ' history]')
            table.insert(header, '&#93;&#32;&#91;[')
            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, '&#93;</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, ']]&nbsp;<span style="font-size:89%; font-style:normal;">([')
            table.insert(footer, arg:fullUrl('action=edit'))
            table.insert(footer, ' edit]&nbsp;|&nbsp;[')
            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, '&nbsp;<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&nbsp;<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, '&nbsp;<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&nbsp;<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