Module:Lua: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
No edit summary
(Lua logo)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
local mList = require('Module:List')
-------------------------------------------------------------------------------
--
--                                Module:Lua
--
-- This module implements Template:Lua.
-------------------------------------------------------------------------------
 
local mTableTools = require('Module:TableTools')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')
Line 21: Line 26:


function p.renderBox(modules)
function p.renderBox(modules)
     local boxArgs = {}
     local html = mw.html.create('div')
        :addClass('c-sidebar')
     if #modules < 1 then
     if #modules < 1 then
         boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
         html
            :tag('strong')
                :addClass('error')
                :wikitext('Error: no modules specified')
     else
     else
        local moduleLinks = {}
        for i, module in ipairs(modules) do
            moduleLinks[i] = string.format('[[:%s]]', module)
            local maybeSandbox = mw.title.new(module .. '/sandbox')
            if maybeSandbox.exists then
                moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
            end
        end
        local moduleList = mList.makeList('bulleted', moduleLinks)
         local title = mw.title.getCurrentTitle()
         local title = mw.title.getCurrentTitle()
         if title.subpageText == "doc" then
         if title.subpageText == 'doc' then
             title = title.basePageTitle
             title = title.basePageTitle
         end
         end
         if title.contentModel == "Scribunto" then
        local header = html:tag('div')
             boxArgs.text = 'This module depends on the following other modules:\n' .. moduleList
            :cssText('text-align: center;')
            :tag('p')
                :wikitext('[[File:Lua programming language logo.svg|40px|alt=Lua logo|link=]]')
                :done()
         if title.contentModel == 'Scribunto' then
             html
                :tag('p')
                    :wikitext('This module depends on the following other modules:')
         else
         else
             boxArgs.text = 'This template uses the following modules:\n' .. moduleList
             html
                :tag('p')
                    :wikitext('This template uses the following modules:')
        end
 
        local list = html:tag('ul')
        for _, module in ipairs(modules) do
            list
                :tag('li')
                    :wikitext(string.format('[[:%s]]', module))
         end
         end
     end
     end
    boxArgs.type = 'notice'
     return tostring(html)
    boxArgs.small = true
    boxArgs.image = '[[File:Lua programming language logo.svg|30px|alt=Lua logo|link=]]'
     return mMessageBox.main('mbox', boxArgs)
end
end



Latest revision as of 18:19, 2 July 2023

Module documentation[view] [edit] [history] [purge]

Lua logo

This module depends on the following other modules:

Implements {{Lua}}.

This module was adapted from Module:Lua banner on Wikipedia.
Adaptation is noted for reference and attribution only. This module may differ from the original in function or in usage. The documentation on Wikipedia may be helpful in understanding this module.

-------------------------------------------------------------------------------
-- 
--                                 Module:Lua
-- 
-- This module implements Template:Lua.
-------------------------------------------------------------------------------

local mTableTools = require('Module:TableTools')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}

function p.main(frame)
    local args = getArgs(frame, {
        wrappers = 'Template:Lua'
    })
    return p._main(args)
end

function p._main(args)
    local modules = mTableTools.compressSparseArray(args)
    local box = p.renderBox(modules)
    local trackingCategories = p.renderTrackingCategories(args, modules)
    return box .. trackingCategories
end

function p.renderBox(modules)
    local html = mw.html.create('div')
        :addClass('c-sidebar')
    if #modules < 1 then
        html
            :tag('strong')
                :addClass('error')
                :wikitext('Error: no modules specified')
    else
        local title = mw.title.getCurrentTitle()
        if title.subpageText == 'doc' then
            title = title.basePageTitle
        end
        local header = html:tag('div')
            :cssText('text-align: center;')
            :tag('p')
                :wikitext('[[File:Lua programming language logo.svg|40px|alt=Lua logo|link=]]')
                :done()
        if title.contentModel == 'Scribunto' then
            html
                :tag('p')
                    :wikitext('This module depends on the following other modules:')
        else
            html
                :tag('p')
                    :wikitext('This template uses the following modules:')
        end

        local list = html:tag('ul')
        for _, module in ipairs(modules) do
            list
                :tag('li')
                    :wikitext(string.format('[[:%s]]', module))
        end
    end
    return tostring(html)
end

function p.renderTrackingCategories(args, modules, title)
    if yesno(args.nocat) then
        return ''
    end
    local cats = {}
    local subpageBlacklist = {
        doc = true,
        sandbox = true,
        sandbox2 = true,
        testcases = true
    }
    title = title or mw.title.getCurrentTitle()
    if not subpageBlacklist[title.subpageText] then
        local protCatName
        if title.namespace == 10 then
            local category = args.category or 'Lua-based templates'
            cats[#cats + 1] = category
            protCatName = 'Templates using under-protected modules'
        elseif title.namespace == 828 then
            protCatName = 'Modules depending on under-protected modules'
        end
        if not args.noprotcat and protCatName then
            local protLevels = {
                autoconfirmed = 1,
                extendedconfirmed = 2,
                templateeditor = 3,
                sysop = 4
            }
            local currentProt
            if title.id ~= 0 then
                -- id is 0 (page does not exist) if am previewing before creating a template.
                currentProt = title.protectionLevels["edit"][1]
            end
            if currentProt == nil then
                currentProt = 0
            else
                currentProt = protLevels[currentProt]
            end
            for i, module in ipairs(modules) do
                local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
                if moduleProt == nil then
                    moduleProt = 0
                else
                    moduleProt = protLevels[moduleProt]
                end
                if moduleProt < currentProt then
                    cats[#cats + 1] = protCatName
                    break
                end
            end
        end
    end
    for i, cat in ipairs(cats) do
        cats[i] = string.format('[[Category:%s]]', cat)
    end
    return table.concat(cats)
end

return p