Modulo:Progetti interessati

Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Progetti interessati/man (modifica · cronologia)
Sandbox: Modulo:Progetti interessati/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Progetti interessati/test (modifica · cronologia · esegui)
Modulo che implementa il template {{Progetti interessati}}.
Ha due sottopagine di configurazione:
- Modulo:Progetti interessati/Configurazione: parametri di configurazione principali
- Modulo:Progetti interessati/Categorie: per la configurazione delle categorie relative al parametro importanza.
--[[
* Modulo che implementa il template Monitoraggio.
]]--
require('Modulo:No globals')
local getArgs = require('Modulo:Arguments').getArgs
-- Configurazione
local cfg = mw.loadData('Modulo:Monitoraggio/Configurazione')
-- Variabili globali
local projParams = { 'progetto', 'progetto2', 'progetto3', 'progetto4' }
local gradeParams = { 'accuratezza', 'scrittura', 'fonti', 'immagini' }
-------------------------------------------------------------------------------
-- Funzioni di utilità
-------------------------------------------------------------------------------
-- Wrapper di mw.title.exists, verifica sia che name sia valido, sia che esista
local function titleExists(name)
local title = mw.title.new(name)
return title and title.exists
end
local function project(param, args)
return cfg.alias[args[param]] or args[param]
end
local function grade(param, args)
return args[param] or 'nc'
end
local function lowestGrade(args)
local t = { args.accuratezza, args.scrittura, args.fonti, args.immagini }
table.sort(t)
return t[4]
end
local function parseArgs(args)
local validGrades = { a = true, b = true, c = true, d = true, e = true }
for _, param in ipairs(gradeParams) do
args[param] = validGrades[args[param]] and args[param] or nil
end
return args
end
-------------------------------------------------------------------------------
-- Monitoraggio
-------------------------------------------------------------------------------
local function getLivello(args)
local ret
-- è presente accuratezza
if args.accuratezza then
if not args.scrittura then
ret = '0.4'
elseif not args.fonti then
ret = '0.3'
elseif not args.immagini then
ret = '0.2'
else
-- sono presenti tutti e quattro i parametri di valutazione
if args.accuratezza == 'e' then
ret = 'BOZZA'
elseif args.scrittura == 'e' then
ret = 'W'
elseif args.fonti == 'e' then
ret = 'F'
elseif args.immagini == 'e' then
ret = 'IMMAGINI'
else
local values = { a = 4, b = 3, c = 2, d = 1 }
ret = tostring(values[lowestGrade(args)])
end
end
-- manca accuratezza
else
if args.scrittura or args.fonti or args.immagini then
ret = '0.5'
else
ret = nil
end
end
return ret
end
local function getCategories(livello, args)
local ret = {}
local cat
for _, param in ipairs(projParams) do
if args[param] then
cat = string.format('[[Categoria:Voci monitorate Progetto %s]]', project(param, args))
table.insert(ret, cat)
end
end
for _, gradeParam in ipairs(gradeParams) do
-- per la "Situazione monitoraggio per parametro" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
cat = string.format('[[Categoria:Voci monitorate - %s %s]]',
gradeParam, string.upper(grade(gradeParam, args)))
table.insert(ret, cat)
-- categorie per il [[template:Tabella monitoraggio]]
for _, projParam in ipairs(projParams) do
if args[projParam] then
cat = string.format('Categoria:Progetto:%s/Tabella monitoraggio automatico - %s %s',
project(projParam, args), gradeParam, grade(gradeParam, args))
if titleExists(cat) then
table.insert(ret, '[[' .. cat .. ']]')
end
end
end
end
local suffix = livello and cfg.livello[livello].cat or 'non compilate'
-- per la "Situazione generale" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
cat = string.format('[[Categoria:Voci monitorate - %s]]', suffix)
table.insert(ret, cat)
-- categorie per il [[template:Tabella monitoraggio]]
for _, param in ipairs(projParams) do
if args[param] then
cat = string.format('Categoria:Voci monitorate Progetto %s - %s',
project(param, args), suffix)
if titleExists(cat) then
table.insert(ret, '[[' .. cat .. ']]')
end
end
end
-- per la "Situazione monitoraggio per mese" di [[Progetto:Qualità/Monitoraggio voci/Tabella]]
if args.data then
cat = string.format('Categoria:Voci monitorate - %s', args.data)
if titleExists(cat) then
table.insert(ret, '[[' .. cat .. ']]')
else
table.insert(ret, '[[Categoria:Errori di compilazione del template Monitoraggio]]')
end
else
table.insert(ret, '[[Categoria:Voci monitorate - non datate]]')
end
return args.debug and ( table.concat(ret, '<br />'):gsub('%[%[', '[[:') ) .. '<br />' or
table.concat(ret)
end
-------------------------------------------------------------------------------
-- API
-------------------------------------------------------------------------------
local p = {}
-- Entry-point per {{#invoke:monitoraggio|livello}}
function p.livello(frame)
local args = parseArgs(getArgs(frame))
return getLivello(args)
end
-- Entry-point per {{#invoke:monitoraggio|categorie}}
function p.categorie(frame)
local args = parseArgs(getArgs(frame))
local livello = getLivello(args)
return getCategories(livello, args)
end
return p