imported>Oetterer |
|||
Zeile 1: | Zeile 1: | ||
-- 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') | ||
Zeile 35: | Zeile 34: | ||
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') | ||
+ | if maybeSandbox.exists then | ||
+ | moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) | ||
+ | end | ||
end | end | ||
local moduleList = mList.makeList('bulleted', moduleLinks) | local moduleList = mList.makeList('bulleted', moduleLinks) | ||
− | boxArgs.text = ' | + | 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:' .. moduleList | ||
+ | else | ||
+ | boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList | ||
+ | end | ||
end | end | ||
boxArgs.type = 'notice' | boxArgs.type = 'notice' | ||
Zeile 49: | Zeile 60: | ||
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() | ||
Zeile 65: | Zeile 76: | ||
testcases = true | testcases = true | ||
} | } | ||
− | if | + | if not subpageBlacklist[titleObj.subpageText] then |
− | + | local protCatName | |
− | + | if titleObj.namespace == 10 then | |
− | + | local category = args.category | |
− | + | if not category then | |
− | -- | + | --[[ we remove all the special categories |
− | + | local categories = { | |
− | + | ['Module:String'] = 'Templates based on the String Lua module', | |
− | + | ['Module:Math'] = 'Templates based on the Math Lua module', | |
− | + | ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', | |
− | + | ['Module:Citation'] = 'Templates based on the Citation/CS1 Lua module' | |
− | + | } | |
− | + | categories['Module:Citation/CS1'] = categories['Module:Citation'] | |
− | -- | + | category = modules[1] and categories[modules[1]] |
− | category = | + | --]] |
+ | category = category or 'Lua-based templates' | ||
+ | end | ||
+ | cats[#cats + 1] = category | ||
+ | protCatName = "Templates using under-protected Lua 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 | ||
+ | if module ~= "WP:libraryUtil" then | ||
+ | local moduleProt = mw.title.new(module).protectionLevels["edit"] and 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 | 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) |
Aktuelle Version vom 5. Oktober 2022, 16:13 Uhr
This module is rated as ready for general use. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module depends on the following other modules: |
This module implements the {{lua}} template.
Usage from wikitext[Quelltext bearbeiten]
This module cannot be used directly from wikitext. It can only be used through the {{lua}} template. Please see the template page for documentation.
Usage from Lua modules[Quelltext bearbeiten]
To use this module from other Lua modules, first load the module.
local mLuaBanner = require('Module:Lua banner')
You can then generate a side box using the _main function.
mLuaBanner._main(args)
The args variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{lua}} template documentation.
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
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:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-logo-nolabel' .. require( 'Module:Util' ).globalFileExtension() .. '|30px|alt=Lua logo|link=Wikipedia:Lua]]'
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 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
if not category then
--[[ we remove all the special categories
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation'] = 'Templates based on the Citation/CS1 Lua module'
}
categories['Module:Citation/CS1'] = categories['Module:Citation']
category = modules[1] and categories[modules[1]]
--]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua 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
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"] and 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
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p