Module:Lua: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
>OmegaK2
mNo edit summary
No edit summary
Line 1: Line 1:
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local messageBox = require('Module:Message box')
local yesno = require('Module:Yesno')
local util = require('Module:Util')
local p = {}
local p = {}
local i18n = {
    text = 'Uses Lua:\n',
    category = 'Lua-based templates',
}


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


function p._main(args)
function p._main(args)
local modules = {}
    local modules = mTableTools.compressSparseArray(args)
for k, v in pairs(args) do
    local box = p.renderBox(modules)
if type(k) == 'number' and k >= 1 and math.floor(k) == k and string.find(v, '%S') then
    local trackingCategories = p.renderTrackingCategories(args, modules)
table.insert(modules, '* [[:' .. mw.text.trim(v) .. ']]')
    return box .. trackingCategories
end
end
end
 
return messageBox.main('mbox', {
function p.renderBox(modules)
type = 'notice',
    local boxArgs = {}
small = true,
    if #modules < 1 then
image = '[[File:Lua programming language logo.svg|30px|alt=Lua logo]]',
        boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
text = i18n.text .. table.concat(modules, '\n')
    else
}) .. util.misc.add_category(i18n.category, {namespace=10})
        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()
        if title.subpageText == "doc" then
            title = title.basePageTitle
        end
        if title.contentModel == "Scribunto" then
            boxArgs.text = 'This module depends on the following other modules:\n' .. moduleList
        else
            boxArgs.text = 'This template uses the following modules:\n' .. moduleList
        end
    end
    boxArgs.type = 'notice'
    boxArgs.small = true
    boxArgs.image = '[[File:Lua programming language logo.svg|30px|alt=Lua logo|link=]]'
    return mMessageBox.main('mbox', boxArgs)
end
 
function p.renderTrackingCategories(args, modules, titleObj)
    if yesno(args.nocat) then
        return ''
    end
 
    local cats = {}
 
    -- Error category
    if #modules < 1 then
        cats[#cats + 1] = 'Lua-based templates with errors'
    end
 
    -- Lua templates category
    titleObj = titleObj or mw.title.getCurrentTitle()
    local subpageBlacklist = {
        doc = true,
        sandbox = true,
        sandbox2 = true,
        testcases = true
    }
    if not subpageBlacklist[titleObj.subpageText] then
        local protCatName
        if titleObj.namespace == 10 then
            local category = args.category or 'Lua-based templates'
            cats[#cats + 1] = category
            protCatName = 'Templates using under-protected modules'
        elseif titleObj.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 titleObj.id ~= 0 then
                -- id is 0 (page does not exist) if am previewing before creating a template.
                currentProt = titleObj.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
end


return p
return p

Revision as of 23:52, 26 July 2020

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

Lua error in package.lua at line 80: module 'Module:Message box' not found.

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.

local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
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 boxArgs = {}
    if #modules < 1 then
        boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
    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()
        if title.subpageText == "doc" then
            title = title.basePageTitle
        end
        if title.contentModel == "Scribunto" then
            boxArgs.text = 'This module depends on the following other modules:\n' .. moduleList
        else
            boxArgs.text = 'This template uses the following modules:\n' .. moduleList
        end
    end
    boxArgs.type = 'notice'
    boxArgs.small = true
    boxArgs.image = '[[File:Lua programming language logo.svg|30px|alt=Lua logo|link=]]'
    return mMessageBox.main('mbox', boxArgs)
end

function p.renderTrackingCategories(args, modules, titleObj)
    if yesno(args.nocat) then
        return ''
    end

    local cats = {}

    -- Error category
    if #modules < 1 then
        cats[#cats + 1] = 'Lua-based templates with errors'
    end

    -- Lua templates category
    titleObj = titleObj or mw.title.getCurrentTitle()
    local subpageBlacklist = {
        doc = true,
        sandbox = true,
        sandbox2 = true,
        testcases = true
    }
    if not subpageBlacklist[titleObj.subpageText] then
        local protCatName
        if titleObj.namespace == 10 then
            local category = args.category or 'Lua-based templates'
            cats[#cats + 1] = category
            protCatName = 'Templates using under-protected modules'
        elseif titleObj.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 titleObj.id ~= 0 then
                -- id is 0 (page does not exist) if am previewing before creating a template.
                currentProt = titleObj.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