Module:Documentation: Difference between revisions

    m (1 revision imported)
    (link)
    Line 3: Line 3:
    -- Get required modules.
    -- Get required modules.
    local getArgs = require('Module:Arguments').getArgs
    local getArgs = require('Module:Arguments').getArgs
    local messageBox = require('Module:Message box')


    -- Get the config table.
    -- Get the config table.
    Line 44: Line 43:
    end
    end


    local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
    return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
    return ret
    end
    end


    Line 82: Line 80:
    ret[#ret + 1] = select(i, ...)
    ret[#ret + 1] = select(i, ...)
    end
    end
    return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>'
    -- 'documentation-toolbar'
    return '<span class="' .. message('toolbar-class') .. '">('
    .. table.concat(ret, ' &#124; ') .. ')</span>'
    end
    end


    Line 112: Line 112:


    ----------------------------------------------------------------------------
    ----------------------------------------------------------------------------
    -- Main function
    -- Entry points
    ----------------------------------------------------------------------------
    ----------------------------------------------------------------------------
    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')
    p.main = makeInvokeFunc('_main')
    Line 121: Line 129:
    -- This function defines logic flow for the module.
    -- This function defines logic flow for the module.
    -- @args - table of arguments passed by the user
    -- @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 env = p.getEnvironment(args)
    local root = mw.html.create()
    local root = mw.html.create()
    root
    root
    :wikitext(p._getModuleWikitext(args, env))
    :wikitext(p.protectionTemplate(env))
    :wikitext(p.protectionTemplate(env))
    :wikitext(p.sandboxNotice(args, 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')
    :tag('div')
    :attr('id', message('main-div-id'))
    -- 'documentation-container'
    :addClass(message('main-div-classes'))
    :addClass(message('container'))
    :newline()
    :newline()
    :wikitext(p._startBox(args, env))
    :wikitext(p._content(args, env))
    :tag('div')
    :tag('div')
    :css('clear', 'both') -- So right or left floating items don't stick out of the doc box.
    -- '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()
    :newline()
    :done()
    :done()
    :wikitext(p._endBox(args, env))
    :done()
    :done()
    :wikitext(p._endBox(args, env))
    :wikitext(p.addTrackingCategories(env))
    :wikitext(p.addTrackingCategories(env))
    return tostring(root)
    -- 'Module:Documentation/styles.css'
    return mw.getCurrentFrame():extensionTag (
    'templatestyles', '', {src=cfg['templatestyles']
    }) .. tostring(root)
    end
    end


    Line 155: Line 167:
    function p.getEnvironment(args)
    function p.getEnvironment(args)
    --[[
    --[[
    -- Returns a table with information about the environment, including title objects and other namespace- or
    -- Returns a table with information about the environment, including title
    -- path-related data.
    -- objects and other namespace- or path-related data.
    -- @args - table of arguments passed by the user
    -- @args - table of arguments passed by the user
    --
    --
    Line 281: Line 293:


    function envFuncs.docSpace()
    function envFuncs.docSpace()
    -- The documentation namespace number. For most namespaces this is the same as the
    -- The documentation namespace number. For most namespaces this is the
    -- subject namespace. However, pages in the Article, File, MediaWiki or Category
    -- same as the subject namespace. However, pages in the Article, File,
    -- namespaces must have their /doc, /sandbox and /testcases pages in talk space.
    -- MediaWiki or Category namespaces must have their /doc, /sandbox and
    -- /testcases pages in talk space.
    local subjectSpace = env.subjectSpace
    local subjectSpace = env.subjectSpace
    if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
    if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
    Line 309: Line 322:
    local compareUrl = mw.uri.fullUrl(
    local compareUrl = mw.uri.fullUrl(
    'Special:ComparePages',
    'Special:ComparePages',
    {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
    { page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
    )
    )
    return tostring(compareUrl)
    return tostring(compareUrl)
    Line 323: Line 336:
    -- Auxiliary templates
    -- 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)
    function p.sandboxNotice(args, env)
    Line 346: Line 371:
    local templateTitle = env.templateTitle
    local templateTitle = env.templateTitle
    local subjectSpace = env.subjectSpace
    local subjectSpace = env.subjectSpace
    if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then
    if not (subjectSpace and title and sandboxTitle and templateTitle
    and mw.title.equals(title, sandboxTitle)) then
    return nil
    return nil
    end
    end
    Line 376: Line 402:
    local testcasesTitle = env.testcasesTitle
    local testcasesTitle = env.testcasesTitle
    if testcasesTitle and testcasesTitle.exists then
    if testcasesTitle and testcasesTitle.exists then
    if testcasesTitle.namespace == mw.site.namespaces.Module.id then
    if testcasesTitle.contentModel == "Scribunto" then
    local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
    local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
    local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
    local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
    Line 389: Line 415:
    end
    end
    -- Add the sandbox to the sandbox category.
    -- Add the sandbox to the sandbox category.
    text = text .. makeCategoryLink(message('sandbox-category'))
    omargs.text = text .. makeCategoryLink(message('sandbox-category'))
    omargs.text = text
     
    local ret = '<div style="clear: both;"></div>'
    -- 'documentation-clear'
    ret = ret .. messageBox.main('ombox', omargs)
    return '<div class="' .. message('clear') .. '"></div>'
    return ret
    .. require('Module:Message box').main('ombox', omargs)
    end
    end


    Line 402: Line 428:
    -- 'protection-template' --> 'pp-template'
    -- 'protection-template' --> 'pp-template'
    -- 'protection-template-args' --> {docusage = 'yes'}
    -- 'protection-template-args' --> {docusage = 'yes'}
    local protectionLevels, mProtectionBanner
    local protectionLevels = env.protectionLevels
    local title = env.title
    protectionLevels = env.protectionLevels
    if not protectionLevels then
    if not protectionLevels then
    return nil
    return nil
    Line 412: Line 436:
    if editProt then
    if editProt then
    -- The page is edit-protected.
    -- The page is edit-protected.
    mProtectionBanner = require('Module:Protection banner')
    return require('Module:Protection banner')._main{
    local reason = message('protection-reason-edit')
    message('protection-reason-edit'), small = true
    return mProtectionBanner._main{reason, small = true}
    }
    elseif moveProt and moveProt ~= 'autoconfirmed' then
    elseif moveProt and moveProt ~= 'autoconfirmed' then
    -- The page is move-protected but not edit-protected. Exclude move
    -- The page is move-protected but not edit-protected. Exclude move
    -- protection with the level "autoconfirmed", as this is equivalent to
    -- protection with the level "autoconfirmed", as this is equivalent to
    -- no move protection at all.
    -- no move protection at all.
    mProtectionBanner = require('Module:Protection banner')
    return require('Module:Protection banner')._main{
    return mProtectionBanner._main{action = 'move', small = true}
    action = 'move', small = true
    }
    else
    else
    return nil
    return nil
    Line 445: Line 470:
    local links
    local links
    local content = args.content
    local content = args.content
    if not content then
    if not content or args[1] then
    -- No need to include the links if the documentation is on the template page itself.
    -- No need to include the links if the documentation is on the template page itself.
    local linksData = p.makeStartBoxLinksData(args, env)
    local linksData = p.makeStartBoxLinksData(args, env)
    Line 483: Line 508:
    if not title or not docTitle then
    if not title or not docTitle then
    return nil
    return nil
    end
    if docTitle.isRedirect then
    docTitle = docTitle.redirectTarget
    end
    end


    Line 555: Line 583:
    -- 'file-namespace-heading' --> 'Summary'
    -- 'file-namespace-heading' --> 'Summary'
    -- 'other-namespaces-heading' --> 'Documentation'
    -- 'other-namespaces-heading' --> 'Documentation'
    -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks'
    -- 'start-box-link-id' --> 'doc_editlinks'
    -- 'testcases-create-link-display' --> 'create'
    -- 'testcases-create-link-display' --> 'create'
    --]=]
    --]=]
    Line 589: Line 615:
    if headingStyle then
    if headingStyle then
    data.headingStyleText = headingStyle
    data.headingStyleText = headingStyle
    elseif subjectSpace == 10 then
    -- We are in the template or template talk namespaces.
    data.headingFontWeight = 'bold'
    data.headingFontSize = '125%'
    else
    else
    data.headingFontSize = '150%'
    -- 'documentation-heading'
    data.headingClass = message('main-div-heading-class')
    end
    end
    -- Data for the [view][edit][history][purge] or [create] links.
    -- Data for the [view][edit][history][purge] or [create] links.
    if links then
    if links then
    data.linksClass = message('start-box-linkclasses')
    -- 'mw-editsection-like plainlinks'
    data.linksId = message('start-box-link-id')
    data.linksClass = message('start-box-link-classes')
    data.links = links
    data.links = links
    end
    end
    Line 612: Line 635:
    local sbox = mw.html.create('div')
    local sbox = mw.html.create('div')
    sbox
    sbox
    :css('padding-bottom', '3px')
    -- 'documentation-startbox'
    :css('border-bottom', '1px solid #aaa')
    :addClass(message('start-box-class'))
    :css('margin-bottom', '1ex')
    :newline()
    :newline()
    :tag('span')
    :tag('span')
    :addClass(data.headingClass)
    :cssText(data.headingStyleText)
    :cssText(data.headingStyleText)
    :css('font-weight', data.headingFontWeight)
    :css('font-size', data.headingFontSize)
    :wikitext(data.heading)
    :wikitext(data.heading)
    local links = data.links
    local links = data.links
    Line 676: Line 697:
    -- @env - environment table containing title objects, etc., generated with p.getEnvironment
    -- @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 707: Line 722:
    end
    end


    -- Assemble the arguments for {{fmbox}}.
    -- Assemble the link 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 = ''
    local text = ''
    if linkBox then
    if linkBox then
    Line 724: Line 732:
    -- Add sandbox and testcases links.
    -- Add sandbox and testcases links.
    -- "Editors can experiment in this template's sandbox and testcases pages."
    -- "Editors can experiment in this template's sandbox and testcases pages."
    text = text .. (p.makeExperimentBlurb(args, env) or '')
    text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
    text = text .. '<br />'
    if not args.content and not args[1] then
    if not args.content and not args[1] then
    -- "Please add categories to the /doc subpage."
    -- "Please add categories to the /doc subpage."
    Line 739: Line 746:
    end
    end
    end
    end
    fmargs.text = text
    local box = mw.html.create('div')
    -- 'documentation-metadata'
    box:addClass(message('end-box-class'))
    -- 'plainlinks'
    :addClass(message('end-box-plainlinks'))
    :wikitext(text)
    :done()


    return messageBox.main('fmbox', fmargs)
    return '\n' .. tostring(box)
    end
    end


    Line 755: Line 769:
    -- 'transcluded-from-blurb' -->  
    -- 'transcluded-from-blurb' -->  
    -- 'The above [[Wikipedia:Template documentation|documentation]]  
    -- 'The above [[Wikipedia:Template documentation|documentation]]  
    -- is [[Wikipedia:Transclusion|transcluded]] from $1.'
    -- is [[Help:Transclusion|transcluded]] from $1.'
    -- 'module-preload' --> 'Template:Documentation/preload-module-doc'
    -- 'module-preload' --> 'Template:Documentation/preload-module-doc'
    -- 'create-link-display' --> 'create'
    -- 'create-link-display' --> 'create'
    Line 870: Line 884:
    local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
    local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
    -- for Modules, add testcases run link if exists
    -- for Modules, add testcases run link if exists
    if subjectSpace == 828 and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
    if testcasesTitle.contentModel == "Scribunto"  and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
    local testcasesRunLinkDisplay = message('testcases-run-link-display')
    local testcasesRunLinkDisplay = message('testcases-run-link-display')
    local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
    local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)