Module:Uses TemplateStyles: Difference between revisions

Jump to navigation Jump to search
m
1 revision imported: importing rh
enwp>Pppery
(Matching reality rather than 2018 me's wishful thinking)
m (1 revision imported: importing rh)
Line 1: Line 1:
-- This module implements the {{Uses TemplateStyles}} 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, ...)
function p.main(frame)
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
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
end


local function getConfig()
function p._main(args)
return mw.loadData('Module:Uses TemplateStyles/config')
local tStyles = mTableTools.compressSparseArray(args)
local box = p.renderBox(tStyles)
local trackingCategories = p.renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
end


local function renderBox(tStyles)
function p.renderBox(tStyles)
local boxArgs = {
local boxArgs = {}
type = 'notice',
small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
}
if #tStyles < 1 then
if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
boxArgs.text = '<strong class="error">Error: no TemplateStyles specified</strong>'
else
else
local cfg = getConfig()
local tStylesLinks = {}
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
if tsTitle then
local tsSandboxTitle = mw.title.new(string.format(
local tsSandboxTitle = mw.title.new(string.format('%s:%s/sandbox/%s', tsTitle.nsText, tsTitle.baseText, tsTitle.subpageText))
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
sandboxLink = string.format(' ([[:%s|sandbox]])', tsSandboxTitle.prefixedText)
end
end
end
end
tStylesLinks[i] = sandboxLink or link
tStylesLinks[i] = string.format('[[:%s]]%s', ts, sandboxLink or '')
end
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
boxArgs.text = 'This ' ..
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
(mw.title.getCurrentTitle():inNamespaces(828,829) and 'module' or 'template') ..
'\n' .. tStylesList
' uses [[w:Wikipedia:TemplateStyles|TemplateStyles]]:\n' .. tStylesList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Farm-Fresh css add.svg|32px|alt=CSS]]'
return mMessageBox.main('mbox', boxArgs)
return mMessageBox.main('mbox', boxArgs)
end
end


local function renderTrackingCategories(args, tStyles, titleObj)
function p.renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
if yesno(args.nocat) then
return ''
return ''
end
end
local cfg = getConfig()
local cats = {}
local cats = {}
-- Error category
-- Error category
if #tStyles < 1 and cfg['error_category'] then
if #tStyles < 1 then
cats[#cats + 1] = cfg['error_category']
cats[#cats + 1] = 'Uses TemplateStyles templates with errors'
end
end
-- TemplateStyles category
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if (titleObj.namespace == 10 or titleObj.namespace == 828)
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
and not subpageBlacklist[titleObj.subpageText]
then
then
local category = args.category or cfg['default_category']
local category = args.category
if category then
if not category then
cats[#cats + 1] = category
category = category or 'Templates using TemplateStyles'
end
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
cats[#cats + 1] = category
if not yesno(args.noprotcat) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedLevelCat = false
Line 77: Line 89:
local tsTitleObj = mw.title.new(ts)
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
if tsProt ~= currentProt and not addedLevelCat then
cats[#cats + 1] = "Templates using TemplateStyles with a different protection level"
end
if tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
if not content:find("{{pp-") then
cats[#cats + 1] = cfg['missing_padlock_category']
cats[#cats + 1] = "Templates using TemplateStyles without padlocks"
addedPadlockCat = true
addedPadlockCat = true
end
end
if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
currentProt = cfg['protection_hierarchy'][currentProt] or 0
tsProt = cfg['protection_hierarchy'][tsProt] or 0
if tsProt < currentProt then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
end
end
end
Line 99: Line 106:
end
end
return table.concat(cats)
return table.concat(cats)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = renderBox(tStyles)
local trackingCategories = renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
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
end


return p
return p

Navigation menu