Diff: Module:Lua banner
Comparing revision #3 (2023-02-16 14:39:53) with revision #4 (2024-03-04 22:45:45).
| Old | New |
|---|---|
-- This module implements the {{lua}} template. |
-- This module implements the {{lua}} template. |
local yesno = require('Module:Yesno') |
local yesno = require('Module:Yesno') |
local mList = require('Module:List') |
local mList = require('Module:List') |
local mTableTools = require('Module:TableTools') |
local mTableTools = require('Module:TableTools') |
local mMessageBox = require('Module:Message box') |
local mMessageBox = require('Module:Message box') |
local p = {} |
local p = {} |
function p.main(frame) |
function p.main(frame) |
local origArgs = frame:getParent().args |
local origArgs = frame:getParent().args |
local args = {} |
local args = {} |
for k, v in pairs(origArgs) do |
for k, v in pairs(origArgs) do |
v = v:match('^%s*(.-)%s*$') |
v = v:match('^%s*(.-)%s*$') |
if v ~= '' then |
if v ~= '' then |
args[k] = v |
args[k] = v |
end |
end |
end |
end |
return p._main(args) |
return p._main(args) |
end |
end |
function p._main(args) |
function p._main(args) |
local modules = mTableTools.compressSparseArray(args) |
local modules = mTableTools.compressSparseArray(args) |
local box = p.renderBox(modules) |
local box = p.renderBox(modules) |
local trackingCategories = p.renderTrackingCategories(args, modules) |
local trackingCategories = p.renderTrackingCategories(args, modules) |
return box .. trackingCategories |
return box .. trackingCategories |
end |
end |
function p.renderBox(modules) |
function p.renderBox(modules) |
local boxArgs = {} |
local boxArgs = {} |
if #modules < 1 then |
if #modules < 1 then |
boxArgs.text = '<strong class="error">Error: no modules specified</strong>' |
boxArgs.text = '<strong class="error">Error: no modules specified</strong>' |
else |
else |
local moduleLinks = {} |
local moduleLinks = {} |
for i, module in ipairs(modules) do |
for i, module in ipairs(modules) do |
moduleLinks[i] = string.format('[[:%s]]', module) |
moduleLinks[i] = string.format('[[:%s]]', module) |
local maybeSandbox = mw.title.new(module .. '/sandbox') |
local maybeSandbox = mw.title.new(module .. '/sandbox') |
if maybeSandbox.exists then |
if maybeSandbox.exists then |
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) |
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) |
end |
end |
end |
end |
local moduleList = mList.makeList('bulleted', moduleLinks) |
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 |
if title.contentModel == "Scribunto" then |
boxArgs.text = 'This module depends on the following other modules:' .. moduleList |
boxArgs.text = 'This module depends on the following other modules:' .. moduleList |
else |
else |
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList |
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList |
end |
end |
end |
end |
boxArgs.type = 'notice' |
boxArgs.type = 'notice' |
boxArgs.small = true |
boxArgs.small = true |
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]' |
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]' |
return mMessageBox.main('mbox', boxArgs) |
return mMessageBox.main('mbox', boxArgs) |
end |
end |
function p.renderTrackingCategories(args, modules, titleObj) |
function p.renderTrackingCategories(args, modules, titleObj) |
if yesno(args.nocat) then |
if yesno(args.nocat) then |
return '' |
return '' |
end |
end |
local cats = {} |
local cats = {} |
-- Error category |
-- Error category |
if #modules < 1 then |
if #modules < 1 then |
cats[#cats + 1] = 'Lua templates with errors' |
cats[#cats + 1] = 'Lua templates with errors' |
end |
end |
-- Lua templates category |
-- Lua templates category |
titleObj = titleObj or mw.title.getCurrentTitle() |
titleObj = titleObj or mw.title.getCurrentTitle() |
local subpageBlacklist = { |
local subpageBlacklist = { |
doc = true, |
doc = true, |
sandbox = true, |
sandbox = true, |
sandbox2 = true, |
sandbox2 = true, |
testcases = true |
testcases = true |
} |
} |
if not subpageBlacklist[titleObj.subpageText] then |
if not subpageBlacklist[titleObj.subpageText] then |
local protCatName |
local protCatName |
if titleObj.namespace == 10 then |
if titleObj.namespace == 10 then |
local category = args.category |
local category = args.category |
if not category then |
if not category then |
local categories = { |
local categories = { |
['Module:String'] = 'Templates based on the String Lua module', |
['Module:String'] = 'Templates based on the String Lua module', |
['Module:Math'] = 'Templates based on the Math Lua module', |
['Module:Math'] = 'Templates based on the Math Lua module', |
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', |
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', |
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' |
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' |
} |
} |
category = modules[1] and categories[modules[1]] |
category = modules[1] and categories[modules[1]] |
category = category or 'Lua-based templates' |
category = category or 'Lua-based templates' |
end |
end |
cats[#cats + 1] = category |
cats[#cats + 1] = category |
protCatName = "Templates using under-protected Lua modules" |
protCatName = "Templates using under-protected Lua modules" |
elseif titleObj.namespace == 828 then |
elseif titleObj.namespace == 828 then |
protCatName = "Modules depending on under-protected modules" |
protCatName = "Modules depending on under-protected modules" |
end |
end |
if not args.noprotcat and protCatName then |
if not args.noprotcat and protCatName then |
local protLevels = { |
local protLevels = { |
autoconfirmed = 1, |
autoconfirmed = 1, |
extendedconfirmed = 2, |
extendedconfirmed = 2, |
templateeditor = 3, |
templateeditor = 3, |
sysop = 4 |
sysop = 4 |
} |
} |
local currentProt |
local currentProt |
if titleObj.id ~= 0 then |
if titleObj.id ~= 0 then |
-- id is 0 (page does not exist) if am previewing before creating a template. |
-- id is 0 (page does not exist) if am previewing before creating a template. |
currentProt = titleObj.protectionLevels["edit"][1] |
currentProt = titleObj.protectionLevels["edit"][1] |
end |
end |
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end |
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end |
for i, module in ipairs(modules) do |
for i, module in ipairs(modules) do |
if module ~= "WP:libraryUtil" then |
if module ~= "WP:libraryUtil" then |
local moduleProt = mw.title.new(module).protectionLevels["edit"][1] |
local moduleProt = mw.title.new(module).protectionLevels["edit"][1] |
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end |
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end |
if moduleProt < currentProt then |
if moduleProt < currentProt then |
cats[#cats + 1] = protCatName |
cats[#cats + 1] = protCatName |
break |
break |
end |
end |
end |
end |
end |
end |
end |
end |
end |
end |
for i, cat in ipairs(cats) do |
for i, cat in ipairs(cats) do |
cats[i] = string.format('[[Category:%s]]', cat) |
cats[i] = string.format('[[Category:%s]]', cat) |
end |
end |
return table.concat(cats) |
return table.concat(cats) |
end |
end |
return p |
return p |