Module:Lua
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.
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.
The above documentation is transcluded from Module:Lua/doc.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of this module.
Editors can experiment in this module's sandbox and testcases pages.
Subpages of 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 list = mw.html.create('ul')
for _, module in ipairs(modules) do
list
:tag('li')
:wikitext(string.format('[[:%s]]', module))
end
local title = mw.title.getCurrentTitle()
if title.subpageText == 'doc' then
title = title.basePageTitle
end
if title.contentModel == 'Scribunto' then
html
:wikitext('This module depends on the following other modules:')
:newline()
else
html
:wikitext('This template uses the following modules:')
:newline()
end
html
:node(list)
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