×
Create a new article
Write your page title here:
We currently have 230 articles on Farthest Frontier. Type your article name above or create one of the articles listed here!



    Farthest Frontier

    Module:Documentation: Difference between revisions

    Content added Content deleted
    m (1 revision imported)
    (updating module documentation)
    Line 3:
    -- Get required modules.
    local getArgs = require('Module:Arguments').getArgs
    local messageBox = require('Module:Message box')
     
    -- Get the config table.
    local cfg = mw.loadData('Module:Documentation/config')
     
    local i18n = mw.loadData('Module:Documentation/i18n')
    local p = {}
     
    Line 33 ⟶ 32:
    expectType = expectType or 'string'
    if type(msg) ~= expectType then
    error(require('Modulemessage:TNT type error in message cfg.') .format(. cfgKey .. 'I18n/Documentation', ('cfg-error-msg-type', cfgKey,.. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
    end
    if not valArray then
    Line 41 ⟶ 40:
    local function getMessageVal(match)
    match = tonumber(match)
    return valArray[match] or error(require('Modulemessage:TNT').format('I18n/Documentation', 'cfg-error-msg-empty',no value found for key '$' .. match, .. ' in message cfg.' .. cfgKey), 4)
    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:
     
    ----------------------------------------------------------------------------
    -- Entry points
    -- Load TemplateStyles
    ----------------------------------------------------------------------------
     
    function p.main = functionnonexistent(frame)
    if mw.title.getCurrentTitle().subpageText == 'testcases' then
    local parent = frame.getParent(frame)
    return frame:expandTemplate{title = 'module test cases notice'}
    local output = p._main(parent.args)
    else
    return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output
    return p.main(frame)
    end
    end
     
    p.main = makeInvokeFunc('_main')
    ----------------------------------------------------------------------------
    -- Main function
    ----------------------------------------------------------------------------
     
    function p._main(args)
    Line 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-classcontainer'))
    :attr('role', 'complementary')
    :wikitext(p._startBox(args, env))
    :attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
    :wikitext(p._content(args, env))
    :attr('aria-label', args.heading == '' and 'Documentation' or nil)
    :newline()
    :tag('div')
    -- '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()
    :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 158 ⟶ 170:
    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 168 ⟶ 180:
    -- env.sandboxTitle - the /sandbox subpage.
    -- env.testcasesTitle - the /testcases subpage.
    -- env.printTitle - the print version of the template, located at the /Print subpage.
    --
    -- Data includes:
    Line 262 ⟶ 273:
    --]]
    return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
    end
    function envFuncs.printTitle()
    --[[
    -- Title object for the /Print subpage.
    -- Messages:
    -- 'print-subpage' --> 'Print'
    --]]
    return env.templateTitle:subPageTitle(message('print-subpage'))
    end
     
    Line 284 ⟶ 286:
     
    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 312 ⟶ 315:
    local compareUrl = mw.uri.fullUrl(
    'Special:ComparePages',
    { page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
    )
    return tostring(compareUrl)
    Line 326 ⟶ 329:
    -- 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 334 ⟶ 349:
    --
    -- Messages:
    -- 'sandbox-notice-image' --> '[[ImageFile:Sandbox.svg|50px|alt=|link=]]'
    -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
    -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
    -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page'
    -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page'
    -- 'sandbox-notice-pagetype-other' --> 'sandbox page'
    -- 'sandbox-notice-compare-link-display' --> 'diff'
    Line 349 ⟶ 364:
    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 358 ⟶ 374:
    -- "This is the template sandbox for [[Template:Foo]] (diff)."
    local text = ''
    local frame = mw.getCurrentFrame()
    local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed.
    local pagetype
    if subjectSpace == 10 then
    Line 370 ⟶ 384:
    local templateLink = makeWikilink(templateTitle.prefixedText)
    local compareUrl = env.compareUrl
    if isPreviewing or not compareUrl then
    text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
    else
    local compareDisplay = message('sandbox-notice-compare-link-display')
    local compareLink = makeUrlLink(compareUrl, compareDisplay)
    text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
    else
    text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
    end
    -- Get the test cases page blurb if the page exists. This is something like
    Line 394 ⟶ 408:
    end
    -- Add the sandbox to the sandbox category.
    omargs.text = text .. makeCategoryLink(message('sandbox-category'))
     
    omargs.text = text
    -- 'documentation-clear'
    omargs.class = message('sandbox-class')
    local ret =return '<div styleclass="' .. message('clear:') both;.. '"></div>'
    ret = ret .. messageBoxrequire('Module:Message box').main('ombox', omargs)
    return ret
    end
     
    Line 408 ⟶ 421:
    -- 'protection-template' --> 'pp-template'
    -- 'protection-template-args' --> {docusage = 'yes'}
    local titleprotectionLevels = env.titleprotectionLevels
    local protectionLevels
    local protectionTemplate = message('protection-template')
    local namespace = title.namespace
    if not (protectionTemplate and (namespace == 10 or namespace == 828)) then
    -- Don't display the protection template if we are not in the template or module namespaces.
    return nil
    end
    protectionLevels = env.protectionLevels
    if not protectionLevels then
    return nil
    end
    local editLevelseditProt = protectionLevels.edit and protectionLevels.edit[1]
    local moveLevelsmoveProt = protectionLevels.move and protectionLevels.move[1]
    if editProt then
    if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then
    -- The page is full-move protected, or full, template, or semiedit-protected.
    return require('Module:Protection banner')._main{
    local frame = mw.getCurrentFrame()
    return frame:expandTemplate{title = protectionTemplate, args = message('protection-templatereason-argsedit'), nil,small 'table')}= 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.
    return require('Module:Protection banner')._main{
    action = 'move', small = true
    }
    else
    return nil
    Line 450 ⟶ 463:
    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 478 ⟶ 491:
    -- 'history-link-display' --> 'history'
    -- 'purge-link-display' --> 'purge'
    -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace'
    -- 'module-preload' --> 'Template:Documentation/preload-module-doc'
    -- 'docpage-preload' --> 'Template:Documentation/preload'
    Line 497 ⟶ 509:
    data.docTitle = docTitle
    -- View, display, edit, and purge links if /doc exists.
    data.viewLinkDisplay = i18n[message('view-link-display'])
    data.editLinkDisplay = i18n[message('edit-link-display'])
    data.historyLinkDisplay = i18n[message('history-link-display'])
    data.purgeLinkDisplay = i18n[message('purge-link-display'])
    -- Create link if /doc doesn't exist.
    local preload = args.preload
    if not preload then
    if subjectSpace == 6828 then -- FileModule namespace
    preload = message('file-docpage-preload')
    elseif subjectSpace == 828 then -- Module namespace
    preload = message('module-preload')
    else
    Line 513 ⟶ 523:
    end
    data.preload = preload
    data.createLinkDisplay = i18n[message('create-link-display'])
    return data
    end
    Line 519 ⟶ 529:
    function p.renderStartBoxLinks(data)
    --[[
    -- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
    -- @data - a table of data generated by p.makeStartBoxLinksData
    --]]
    Line 533 ⟶ 543:
    local docTitle = data.docTitle
    local title = data.title
    local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
    if docTitle.exists then
    local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
    local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
    local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
    local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
    ret = '[%s] [%s] [%s] [%s]'
    ret = escapeBrackets(ret)
    Line 543 ⟶ 553:
    else
    local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
    ret = '[%s] [%s]'
    ret = escapeBrackets(ret)
    ret = mw.ustring.format(ret, createLink, purgeLink)
    end
    return ret
    Line 558 ⟶ 568:
    --
    -- Messages:
    -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]'
    -- 'template-namespace-heading' --> 'Template documentation'
    -- 'module-namespace-heading' --> 'Module documentation'
    -- '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 584 ⟶ 592:
    data.heading = heading
    elseif subjectSpace == 10 then -- Template namespace
    data.heading = i18n[message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading'])
    elseif subjectSpace == 828 then -- Module namespace
    data.heading = i18n[message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading'])
    elseif subjectSpace == 6 then -- File namespace
    data.heading = i18n[message('file-namespace-heading'])
    else
    data.heading = i18n[message('other-namespaces-heading'])
    end
    -- Heading CSS
    local headingStyle = args['heading-style']
    if headingStyle then
    data.headingStyleText = headingStyle
    else
    -- 'documentation-heading'
    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 608 ⟶ 625:
    local sbox = mw.html.create('div')
    sbox
    -- 'documentation-startbox'
    :addClass(message('header-div-class'))
    :addClass(message('start-box-class'))
    :tag('div')
    :newline()
    :addClass(message('heading-div-class'))
    :tag('span')
    :addClass(data.headingClass)
    :attr('id', 'documentation-heading')
    :cssText(data.headingStyleText)
    :wikitext(data.heading)
    local links = data.links
    if links then
    sbox:tag('span')
    :tagaddClass('div'data.linksClass)
    :addClassattr('id', data.linksClasslinksId)
    :wikitext(links)
    :attr('id', data.linksId)
    :wikitext(links)
    end
    return tostring(sbox)
    Line 637 ⟶ 657:
    local content = args.content
    if not content and docTitle and docTitle.exists then
    content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
    end
    -- The line breaks below are necessary so that "=== Headings ===" at the start and end
    -- of docs are interpreted correctly.
    return '\n' .. (content or '') .. '\n'
    local cbox = mw.html.create('div')
    cbox
    :addClass(message('content-div-class'))
    :wikitext('\n' .. (content or '') .. '\n')
    return tostring(cbox)
    end
     
    Line 671 ⟶ 687:
    -- @args - a table of arguments passed by the user
    -- @env - environment table containing title objects, etc., generated with p.getEnvironment
    --
    --]=]
    Line 696 ⟶ 713:
    end
     
    -- Assemble the footerlink text fieldbox.
    local text = ''
    if linkBox then
    Line 706 ⟶ 723:
    -- 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 715 ⟶ 731:
    end
    text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
    local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.
    if printBlurb then
    text = text .. '<br />' .. printBlurb
    end
    end
    end
     
    local eboxbox = mw.html.create('div')
    -- 'documentation-metadata'
    ebox
    box:attr('role', 'note')
    :addClass(message('footer-div-class'))
    :addClass(message('end-box-class'))
    -- 'plainlinks'
    :addClass(message('end-box-plainlinks'))
    :wikitext(text)
    :done()
    return tostring(ebox)
     
    return '\n' .. tostring(box)
    end
     
    Line 739 ⟶ 756:
    -- 'history-link-display' --> 'history'
    -- 'transcluded-from-blurb' -->
    -- 'The above [[w:Wikipedia:Template documentation|documentation]]
    -- is [[w:WikipediaHelp:Transclusion|transcluded]] from $1.'
    -- 'module-preload' --> 'Template:Documentation/preload-module-doc'
    -- 'create-link-display' --> 'create'
    -- 'create-module-doc-blurb' -->
    -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].'
    --]=]
    local docTitle = env.docTitle
    if not docTitle or args.content then
    return nil
    end
    Line 755 ⟶ 772:
    local docLink = makeWikilink(docTitle.prefixedText)
    local editUrl = docTitle:fullUrl{action = 'edit'}
    local editDisplay = i18n[message('edit-link-display'])
    local editLink = makeUrlLink(editUrl, editDisplay)
    local historyUrl = docTitle:fullUrl{action = 'history'}
    local historyDisplay = i18n[message('history-link-display'])
    local historyLink = makeUrlLink(historyUrl, historyDisplay)
    ret = message('transcluded-from-blurb', {docLink})
    Line 767 ⟶ 784:
    -- /doc does not exist; ask to create it.
    local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
    local createDisplay = i18n[message('create-link-display'])
    local createLink = makeUrlLink(createUrl, createDisplay)
    ret = message('create-module-doc-blurb', {createLink})
    Line 840 ⟶ 857:
    local mirrorPreload = message('mirror-link-preload')
    local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
    if subjectSpace == 828 then
    mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
    end
    local mirrorDisplay = message('mirror-link-display')
    local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
    Line 851 ⟶ 871:
    local testcasesEditDisplay = message('testcases-edit-link-display')
    local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
    -- for Modules, add testcases run link if exists
    testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
    if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
    local testcasesRunLinkDisplay = message('testcases-run-link-display')
    local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
    testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
    else
    testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
    end
    else
    local testcasesPreload
    Line 920 ⟶ 947:
    )
    return message('subpages-blurb', {subpagesLink})
    end
     
    function p.makePrintBlurb(args, env)
    --[=[
    -- Generates the blurb displayed when there is a print version of the template available.
    -- @args - a table of arguments passed by the user
    -- @env - environment table containing title objects, etc., generated with p.getEnvironment
    --
    -- Messages:
    -- 'print-link-display' --> '/Print'
    -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]'
    -- .. ' of this template exists at $1.'
    -- .. ' If you make a change to this template, please update the print version as well.'
    -- 'display-print-category' --> true
    -- 'print-category' --> 'Templates with print versions'
    --]=]
    local printTitle = env.printTitle
    if not printTitle then
    return nil
    end
    local ret
    if printTitle.exists then
    local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display'))
    ret = message('print-blurb', {printLink})
    local displayPrintCategory = message('display-print-category', nil, 'boolean')
    if displayPrintCategory then
    ret = ret .. makeCategoryLink(message('print-category'))
    end
    end
    return ret
    end
     
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.