Line 1: |
Line 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') |
| local mTableTools = require('Module:TableTools') | | local mTableTools = require('Module:TableTools') |
| local mMessageBox = require('Module:Message box') | | local mMessageBox = require('Module:Message box') |
− | local TNT = require('Module:TNT')
| |
| | | |
| local p = {} | | local p = {} |
− |
| |
− | local function format(msg)
| |
− | return TNT.format('I18n/Lua banner', msg)
| |
− | end
| |
− |
| |
− | local function getConfig()
| |
− | return mw.loadData('Module:Lua banner/config')
| |
− | end
| |
| | | |
| function p.main(frame) | | function p.main(frame) |
Line 29: |
Line 19: |
| end | | end |
| | | |
− | function p._main(args, cfg) | + | function p._main(args) |
| local modules = mTableTools.compressSparseArray(args) | | local modules = mTableTools.compressSparseArray(args) |
− | local box = p.renderBox(modules, cfg) | + | local box = p.renderBox(modules) |
− | local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg) | + | local trackingCategories = p.renderTrackingCategories(args, modules) |
| return box .. trackingCategories | | return box .. trackingCategories |
| end | | end |
| | | |
− | function p.renderBox(modules, cfg) | + | function p.renderBox(modules) |
| local boxArgs = {} | | local boxArgs = {} |
| if #modules < 1 then | | if #modules < 1 then |
− | cfg = cfg or getConfig() | + | boxArgs.text = '<strong class="error">Error: no modules specified</strong>' |
− | if cfg['allow_wishes'] then
| |
− | boxArgs.text = format('wishtext')
| |
− | else
| |
− | boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist'))
| |
− | end
| |
| 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') |
| + | 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 = format('header') .. '\n' .. moduleList | + | 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' |
| boxArgs.small = true | | boxArgs.small = true |
− | boxArgs.image = string.format( | + | boxArgs.image = '[[File:Lua-logo-nolabel.svg|30px|alt=|link=]]' |
− | '[[File:Lua-logo-nolabel.svg|30px|alt=%s|link=%s]]',
| |
− | format('logo_alt'),
| |
− | format('logo_link')
| |
− | )
| |
| return mMessageBox.main('mbox', boxArgs) | | return mMessageBox.main('mbox', boxArgs) |
| end | | end |
| | | |
− | function p.renderTrackingCategories(args, modules, titleObj, cfg) | + | function p.renderTrackingCategories(args, modules, titleObj) |
| if yesno(args.nocat) then | | if yesno(args.nocat) then |
| return '' | | return '' |
| end | | end |
− |
| + | |
− | cfg = cfg or getConfig()
| |
− |
| |
| local cats = {} | | local cats = {} |
− |
| + | |
| -- Error category | | -- Error category |
− | if #modules < 1 and not cfg['allow_wishes'] and cfg['error_category'] then | + | if #modules < 1 then |
− | cats[#cats + 1] = cfg['error_category'] | + | 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() |
− | if titleObj.namespace == 10 | + | local subpageBlacklist = { |
− | and not cfg['subpage_blacklist'][titleObj.subpageText] | + | doc = true, |
− | then
| + | sandbox = true, |
− | local category = args.category | + | sandbox2 = true, |
− | if not category then | + | testcases = true |
− | local pagename = modules[1] and mw.title.new(modules[1]) | + | } |
− | category = pagename and cfg['module_categories'][pagename.text]
| + | if not subpageBlacklist[titleObj.subpageText] then |
| + | local protCatName |
| + | if titleObj.namespace == 10 then |
| + | local category = args.category |
| if not category then | | if not category then |
− | if cfg['allow_wishes'] and #modules < 1 then | + | local categories = { |
− | category = cfg['wish_category']
| + | ['Module:String'] = 'Lua String-based templates', |
− | else | + | ['Module:Math'] = 'Templates based on the Math Lua module', |
− | category = cfg['default_category'] | + | ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', |
| + | ['Module:Citation'] = 'Lua-based citation templates' |
| + | } |
| + | 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"][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
| |
− | if category then
| |
− | cats[#cats + 1] = category
| |
| 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) |