Modulo:Sandbox/ppong: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Omega Bot (discussione | contributi)
m Bot: rimuovo no globals obsoleto
 
(9 versioni intermedie di 3 utenti non mostrate)
Riga 1:
require("strict")
local getArgs = require('Modulo:Arguments').getArgs
require("Modulo:No globals")
 
-- Tabella di configurazione
-- TABELLA DI CONFIGURAZIONE
--------------------------------------------------------------------------------
 
local config = {
progetti={ -- Inserire solo le occorrenze più insolite: il modulo già rende maiuscolo il nome del progetto
progetti = {
["Acquariofilia"]= "Forme di vita/Pesci/Acquariofilia",
["animeAcquariofilia"] = "AnimeForme edi mangavita/Pesci/Acquariofilia",
["animangaanime"] = "Anime e manga",
["Annoanimanga"] = "Cronologia/AnnoAnime e manga",
["areeprotetteAnno"] = "Aree protetteCronologia/Anno",
["Armi da fuocoareeprotette"] = "Guerra/Armi daAree fuocoprotette",
["AtleticaArmi leggerada fuoco"] = "SportGuerra/AtleticaArmi da leggerafuoco",
["Atletica leggera"] = "Sport/Atletica leggera",
["Atletica"] = "Sport/Atletica leggera",
 
["biologia"] = "Bio",
["biochimica"] = "Bio",
["Burma"] = "Birmania",
 
["Calcio"] = "Sport/Calcio",
["cartoni animati"] = "Cartoons",
["Comuni"] = "Geografia/Antropica/Comuni",
 
["Decade"] = "Cronologia/Decade",
["Dialetti"] = "Dialetti d'Italia",
["Wikilex"] = "Diritto",
["minori"] = "Diritti dei minori",
["disturbipsichici"] = "Disturbi psichici",
["Documenta ecclesiae"] = "Documenta Ecclesiae",
 
["aziende"] = "Economia",
["Elicotteri"] = "Aviazione/Elicotteri",
["Emilia"] = "Emilia e Romagna",
["Romagna"] = "Emilia e Romagna",
["emilia romagna"] = "Emilia e Romagna",
["Emilia Romagna"] = "Emilia e Romagna",
["Emilia-Romagna"] = "Emilia e Romagna",
["ER"] = "Emilia e Romagna",
["emilia-romagna"] = "Emilia e Romagna",
 
["Fiction tv"] = "Fiction TV",
["Film Horror"] = "Film horror",
["horror"] = "Film horror",
["formedivita"] = "Forme di vita",
["Formula uno"] = "F1",
["Formula 1"] = "F1",
 
["Guerra elettronica"] = "Guerra/Guerra elettronica",
["guerrestellari"] = "Guerre stellari",
["GuerreStellari"] = "Guerre stellari",
 
["Controlli automatici"] = "Ingegneria/Controlli automatici",
 
["Musica classica"] = "Musica/Classica",
["classica"] = "Musica/Classica",
["metal"] = "Musica/Heavy metal",
["Heavy Metal"] = "Musica/Heavy metal",
["Heavy metal"] = "Musica/Heavy metal",
["Hip Hop"] = "Musica/Hip hop",
["hip hop"] = "Musica/Hip hop",
["hiphop"] = "Musica/Hip hop",
["Jazz"] = "Musica/Jazz",
["Punk"] = "Musica/Punk",
["Rock"] = "Musica/Rock",
 
["Nobel"] = "Premi Nobel",
["Premi nobel"] = "Premi Nobel",
 
["Pallacanestro"] = "Sport/Pallacanestro",
["Basket"] = "Sport/Pallacanestro",
["Pk"] = "Fumetti/PK",
["PK"] = "Fumetti/PK",
["pokèmon"] = "Pokémon",
["Pokemon"] = "Pokémon",
["portorico"] = "Porto Rico",
 
["Reggio calabria"] = "Reggio Calabria",
["Rugby"] = "Sport/Rugby",
 
["San marino"] = "San Marino",
["Scienze della terra"] = "Scienze della Terra",
["stati africa"] = "Stati",
["stati america"] = "Stati",
["stati asia"] = "Stati",
["stati europa"] = "Stati",
["stati oceania"] = "Stati",
 
["tao"] = "Taoismo",
["tv"] = "Televisione",
["TV"] = "Televisione",
 
["Venezia"] = "Venezia e Laguna",
["venezia e laguna"] = "Venezia e Laguna",
["Vibo valentia"] = "Vibo Valentia",
["vibo"] = "Vibo Valentia",
["videogames"] = "Videogiochi",
 
["Disney"] = "Walt Disney",
 
["q"] = "Qualità",
["Qualita"] = "Qualità"
},
campi = {
var= { -- questa tabella serve per gestire i voti
'accuratezza',
A= "A",
'scrittura',
["A+"]= "A",
'fonti',
VETRINA= "A",
'immagini'
B= "B",
},
C= "C",
altri_parametri = {
D= "D",
E= "Enote",
X= "Eutente",
STUB= "Edata",
"modello di voce"
NC= "NC"},
},
colore_voti= {
importanza = {
A= "#6699ff",
fondamentale = 1,
B= "#53e04c",
Cprimario = "#fff31e"2,
secondario = 3,
D= "#ff831E",
Emedio = "#ff1e29"3,
NCminimo = "white"}4,
imprecisato = 5 -- valore predefinito
livelli= {
},
A= "livello completo",
importanza_definizione = {
B= "livello buono",
'<span style="color: red">interesse fondamentale</span>',
C= "livello sufficiente",
'<span style="color: orange">interesse primario</span>',
D= "livello minimo",
'<span style="color: green">interesse secondario</span>',
E= "livello bozza",
'<span style="color: gray">interesse minimo</span>',
NC= "nessun livello",
'<i>interesse imprecisato</i>'
["livello completo"]= "A",
},
["livello buono"]= "B",
voti = {
["livello sufficiente"]= "C",
["livelloA minimo"]= "D"5,
["livello bozzaA+"] = "E"5,
["nessunVETRINA livello"]= "NC"5,
["nonB compilate"]= "NC"}4,
C = 3,
descrizione_stato= {
livelloD = {2,
E = 1,
["livello completo"]= "La voce ha ottenuto il massimo livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
X = 1,
["livello buono"]= "La voce ha raggiunto un buon livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
STUB = 1
["livello sufficiente"]= "La voce è stata considerata di livello sufficiente in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
},
["livello minimo"]= "La voce è stata considerata di livello minimo in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
livelli = {
["livello bozza"]= "", -- da chiarire meglio come funziona
["nessun livello"]= "bozza",
"livello iniziale",
["non compilate"]= "La voce non è stata ancora monitorata, <span class=\"plainlinks\">[http://it.wikipedia.org/w/title="..mw.title.getCurrentTitle().fullText.."&action=edit&section=0 fallo ora]!</span>"},
"livello medio",
accuratezza= {
"livello buono",
A= "Voce adeguatamente '''accurata'''. Tutti gli aspetti principali del tema sono affrontati con la dovuta profondità. Il tema è stabile e non dovrebbe necessitare di aggiornamenti futuri.",
"livello completo",
B= "Lievi problemi relativi all''''accuratezza''' dei contenuti. Informazioni esaustive nella gran parte dei casi, ma alcuni aspetti non sono del tutto approfonditi o altri non sono direttamente attinenti. Il tema non è stabile e potrebbe in breve necessitare di aggiornamenti.",
[0] = "nessun livello",
C= "Seri problemi relativi all''''accuratezza''' dei contenuti. Importanti aspetti del tema non sono trattati o solo superficialmente. Altri aspetti non sono direttamente attinenti. Alcune informazioni importanti risultano controverse. Potrebbero essere presenti uno o più avvisi.",
-- ["livello completo"] = 5,
D= "Gravi problemi relativi all''''accuratezza''' o alla neutralità dei contenuti. Molti aspetti del tema non sono trattati o solo superficialmente. È assai probabile che siano presenti uno o più avvisi o che vadano inseriti.",
-- ["livello buono"] = 4,
E= "Gravissimi problemi relativi all''''accuratezza''' dei contenuti, segnalati da avvisi. Informazioni limitate o da controllare.",
-- ["livello sufficiente"] = 3,
NC= "Nessuna informazione sull'<b>accuratezza</b> dei contenuti."},
-- ["livello minimo"] = 2,
scrittura= {
-- ["livello bozza"] = 1,
A= "Voce '''scritta''' in buon italiano e con buono [[aiuto:manuale di stile|stile]]. Sintassi e lessico adeguati, linguaggio chiaro e scorrevole, con uso attento di termini specifici. Strutturazione in paragrafi soddisfacente.",
-- ["nessun livello"] = "NC",
B= "Lievi problemi di '''scrittura'''. Qualche inciampo nello [[aiuto:manuale di stile|stile]]. Linguaggio non sempre scorrevole. Strutturazione in paragrafi adeguata, ma ancora migliorabile sotto alcuni aspetti.",
-- ["non compilate"] = "NC"
C= "Seri problemi di '''scrittura'''. Linguaggio comprensibile, ma con [[aiuto:manuale di stile|stile]] poco scorrevole. Strutturazione in paragrafi carente.",
},
D= "Gravi problemi di '''scrittura'''. Stile scadente. Strutturazione in paragrafi assente o molto carente.",
descrizione_stato = {
E= "Gravissimi problemi di '''scrittura'''. Lo [[aiuto:manuale di stile|stile]] va completamente rivisto ed è auspicabile una integrale riscrittura.",
--[=[ livello = {
NC= "Nessuna informazione sulla '''scrittura'''."},
["livello completo"] = "La voce ha ottenuto il massimo livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
fonti= {
["livello buono"] = "La voce ha raggiunto un buon livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
A= "I contenuti della voce sono interamente verificabili tramite '''fonti''' autorevoli e [[Wikipedia:Fonti attendibili|attendibili]]. Il tema è stabile e non dovrebbe necessitare di aggiornamenti futuri.",
["livello sufficiente"] = "La voce è stata considerata di livello sufficiente in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
B= "Lievi problemi relativi alla verificabilità della voce. Un aspetto del tema non è adeguatamente supportato da '''fonti''' [[Wikipedia:Fonti attendibili|attendibili]]. Alcune fonti andrebbero sostituite con altre più autorevoli. Il tema non è stabile e potrebbe in breve necessitare di aggiornamenti.",
["livello minimo"] = "La voce è stata considerata di livello minimo in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
C= "Seri problemi relativi alla verificabilità della voce. Carenza di '''fonti''' [[Wikipedia:Fonti attendibili|attendibili]]. Alcuni aspetti del tema sono completamente privi di fonti a supporto. Presenza o necessità del template {{tl|cn}}. La delicatezza del tema richiede una speciale attenzione alle fonti.",
["livello bozza"] = "La voce è da considerarsi una bozza in base a quanto indicato dal '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]''' e da [[Aiuto:abbozzo]].", -- da chiarire meglio come funziona
D= "Gravi problemi relativi alla verificabilità della voce. Molti aspetti del tema sono completamente privi di '''fonti''' [[Wikipedia:Fonti attendibili|attendibili]] a supporto. Presenza o necessità del template {{tl|F}}.",
["nessun livello"] = "Alla voce non può ancora essere assegnato un livello per il '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.", -- da chiarire meglio come funziona
E= "Gravissimi problemi relativi alla verificabilità della voce. '''Fonti''' assenti o [[Wikipedia:Fonti attendibili|del tutto inadeguate]]. Presenza o necessità del template {{tl|F}}.",
["non compilate"] = "La voce non è stata ancora monitorata, <span class=\"plainlinks\">[http://it.wikipedia.org/w/title=" .. mw.title.getCurrentTitle().fullText .. "&action=edit&section=0 fallo ora]!</span>"
NC= "Nessuna informazione sulla [[Wikipedia:Fonti attendibili|attendibilità]] delle '''fonti'''."},
}, -- ]=]
immagini= {
accuratezza = {
A= "La voce è corredata da un adeguato numero di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici, in tema con il contenuto della voce, oppure non ne necessita alcuno.",
"La voce contiene un contenuto utile molto basso. Informazioni limitate o da controllare.",
B= "Lievi problemi relativi alla dotazione di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici nella voce. Mancano alcuni file o altri sono inadeguati.",
"La voce possiede un'accuratezza che richiede un maggiore sviluppo. Molti aspetti del tema non sono trattati o solo superficialmente.",
C= "Seri problemi relativi alla dotazione di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici nella voce. Mancano alcuni file importanti per la comprensione del tema.",
"La voce ha dimensioni e accuratezza di medio livello. Potrebbe essere ancora ampliata notevolmente, stante l'argomento trattato.",
D= "Gravi problemi relativi alla dotazione di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici nella voce. Mancano molti file importanti per la comprensione del tema, alcuni essenziali.",
"I contenuti della voce sono buoni e accurati, ma possono essere migliorati. Sarebbero utili approfondimenti o aggiornamenti.",
E= "Gravissimi problemi relativi alla dotazione di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici nella voce. La voce necessiterebbe di file importanti per la comprensione del tema, ma ne è assolutamente priva.",
"Voce adeguatamente accurata. Tutti gli aspetti principali del tema sono affrontati con la dovuta profondità e le informazioni sono aggiornate."
NC= "Nessuna informazione sulla presenza di '''[[aiuto:immagini|immagini]]''' o altri supporti grafici."} },
},
scrittura = {
"La voce è scritta con un italiano pessimo e [[:categoria:correggere|da correggere]] oppure deve essere [[aiuto:wikificare|wikificata]].",
"La scrittura della voce dovrebbe essere rivista in funzione del [[aiuto:manuale di stile|manuale di stile]].",
"La voce è adeguatamente leggibile, ma lo [[aiuto:manuale di stile|stile]] potrebbe essere più scorrevole e le informazioni potrebbero essere presentate meglio.",
"La voce è ben scritta, fatto salvo qualche inciampo nello [[aiuto:manuale di stile|stile]]. Il linguaggio o la strutturazione in paragrafi sono ancora migliorabili sotto alcuni aspetti.",
"Voce scritta in buon italiano e con buono [[aiuto:manuale di stile|stile]]. Sintassi e lessico adeguati, linguaggio chiaro e scorrevole, con uso attento di termini specifici. Strutturazione in paragrafi soddisfacente."
},
fonti = {
"La voce [[:categoria:senza fonti|non ha nessuna fonte o ne ha pochissime]].",
"La voce meriterebbe un maggior supporto di fonti [[Wikipedia:Fonti attendibili|attendibili]] e ne è ancora per lo più scoperta.",
"La voce è provvista di fonti [[Wikipedia:Fonti attendibili|attendibili]], ma non è ancora completamente [[wp:verificabilità|verificabile]]. Sarebbe necessario trovare delle fonti per i diversi aspetti della voce che ne sono scoperti.",
"La voce è ben coperta da fonti. Per migliorare l'attendibilità della voce si potrebbe comunque arricchirla con altri supporti maggiormente autorevoli.",
"I contenuti della voce sono interamente verificabili tramite fonti [[Wikipedia:Fonti attendibili|autorevoli attendibili]]."
},
immagini = {
"La voce necessiterebbe di immagini o file essenziali per la comprensione del tema, ma ne è assolutamente priva.",
"La voce ha neccessità di file importanti per la comprensione del tema, alcuni essenziali.",
"Per migliorare la comprensibilità della voce, dovrebbero esssere inserite delle immagini o file importanti per la comprensione del tema.",
"Leggendo la voce non si avverte la mancanza di adeguati supporti grafici o multimediali, potrebbero tuttavia essere migliorati.",
"La voce è corredata da un adeguato numero di immagini e/o supporti multimediali di qualità e in tema con il contenuto, oppure non ne necessita alcuno."
}
},
icona = {
'Monitoraggio 2015 !.svg',
'Monitoraggio 2015 25.svg',
'Monitoraggio 2015 50.svg',
'Monitoraggio 2015 75.svg',
'Monitoraggio 2015 100.svg',
[0] = 'Symbol stub class.svg'
}
}
 
-- FUNZIONEFunzioni DIdi UTILITA'utilità
--------------------------------------------------------------------------------
 
local getArgs = require("Modulo:Arguments").getArgs
local function riordinaTabella(t) -- ovvero come complicarsi la vita inutilmente
 
local n= 0
local iconaArgomento = require("Modulo:Sandbox/ppong/Icona").iconaArgomento
 
local italiano = mw.language.new("it")
 
-- per complicarsi la vita inutilmente
local function riordinaTabella(t)
local n = 0
for _, _ in pairs(t) do
n = n + 1
end
local i = 0
for ii = 1, n do
while true do
i = i + 1
if t[i] then
break
end
end
t[ii] = t[i]
end
end
 
-- Classe Monitoraggio
-- CLASSE MONITORAGGIO
--------------------------------------------------------------------------------
 
local monitoraggioMonitoraggio = {}
 
function Monitoraggio:new(o)
function monitoraggio:newError(err, cat) -- funzione di utilità per gli errori
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
 
function Monitoraggio:newError(err) -- funzione di utilità per gli errori
if not self.errori then
self.errori = {} end
self.errori[#self.errori + 1]= err
-- if cat then
-- if not self.categorie_errore then -- per gestire varie categorie di errore
-- self.categorie_errore= {} end
-- self.categorie_errore[cat]= cat end
end
self.errori[#self.errori + 1] = err
end
function monitoraggio:organizzaArgomenti(args)
 
for k, v in pairs(args) do -- minuscolizza tutti i parametri
function Monitoraggio:organizzaArgomenti(args)
-- minuscolizza tutti i parametri
for k, v in pairs(args) do
if type(k) == "string" then
local kkk_min = mw.ustring.lower(k)
if kkk_min ~= k and args[kkk_min] then
self:newError("parametroParametro <ttkbd>" ..kk k_min .. "</ttkbd> inserito più volte con un diverso unouso della maiuscola.")
args[k] = nil
elseif kkk_min ~= k then
args[kkk_min] = v
args[k] = nil
end
end
end
self.voti = {}
for _, s in ipairs({"accuratezza", "scrittura", "fonti", "immagini"}config.campi) do
local voto = args[s] or "'NC"'
voto = string.upper(voto)
if config.varvoti[voto] then
self.voti[s] = config.varvoti[voto]
elseif voto ~= 'NC' then
else
self:newError("valoreValore \"" .. voto .. "\" non riconosciuto per il campo <ttkbd>" .. s .. "</ttkbd>.")
end
self.voti[s]= "NC" end
args[s] = nil
end
for _, s in ipairs{"note", "utente", "data"}(config.altri_parametri) do
self[s] = args[s]
args[s] = nil
end
if args.progetto and args.progetto1 then
self:newError("<ttkbd>progetto</ttkbd> e <ttkbd>progetto1</ttkbd> entrambi specificati, sono due donominazioni alternative per il primo progetto, i seguenti vanno numerati a partire da 2")
args.progetto = nil
elseif args.progetto then
args.progetto1 = args.progetto
args.progetto = nil
end
self.progetti = {}
for k, v in pairs(args) do
if string.find(k, "^progetto%d+$") then
local i = tonumber(k:match("^progetto(%d+)$"))
self.progetti[i] = {nome = v}
local uv= mw.language.new("it"):ucfirst(v)
-- attinge alla tabella di configurazione per ottenere il nome completo del progetto
if config.progetti[v] then
local v_maius = italiano:ucfirst(v)
v= config.progetti[v]
elseifself.progetti[i]['link'] = config.progetti[uvv] thenor config.progetti[v_maius] or v_maius
args[k] = nil
v= config.progetti[uv]
local imp = args['importanza'..i]
else
if imp and not config.importanza[imp] then
v= uv end
self:newError("Valore <kbd>".. imp .."</kbd> non riconosciuto per il parametro <kbd>importanza".. i .."</kbd>.")
self.progetti[i]= v
args.k= nilend
self.progetti[i]['importanza'] = config.importanza[imp] or 5
else
args['importanza'..i] = nil
self:newError("parametro <tt>"..k.."</tt> non riconosciuto")
elseif not string.find(k, "^importanza%d+$") then
args[k]= nil end end
self:newError("Parametro <kbd>" .. k .. "</kbd> non riconosciuto.")
end
end
riordinaTabella(self.progetti)
if #self.progetti == 0 then
self:newError("nessun progetto specificato")
--[[ elseif #self.progetti > 4 then
self:newError("più di quattro progetti specificati")
for i = 5, #self.progetti do
self.progetti[i] = nil
end end-- ]]
end
end
 
-- crea una firma a partire dal solo nome utente. se invece c'è una firma con data, estrapola la data
function monitoraggio:assegnaLivello() -- la funzione attuale non è proprio così banale
function Monitoraggio:trovaUtente()
local out= "non compilate"
if mw.ustring.find(self.utente, '%[%[[Uu]tente:') then
for _, v in pairs(self.voti) do
local n, _, data = mw.ustring.find(self.utente, ' %d%d:%d%d, %d?%d (%a+ %d%d%d%d)')
if v ~= "NC" then
if n then
for _, vv in ipairs({"NC", "E", "D", "C", "B", "A"}) do -- cerca un valore alla volta in tutti i parametri, partendo dal basso, quindi assegna in generale
self.data = self.data or data
for k, vvv in pairs(self.voti) do -- un livello corrispondente al più basso valore tra i voti che sono stati dati alla voce
-- toglie ora e data e i trattini iniziali dalla firma
if vv == vvv then
self.utente = mw.ustring.gsub(mw.ustring.sub(self.utente, 1, n-1), '$--', '')
out= config.livelli[v]
end
self.valore_minimo= k -- serve a scrivere: "non è possibile dare un voto maggiore con tale parametro che ha un voto tanto basso"
else
do break end break
self.utente = '[[utente:'.. self.utente ..'|'.. self.utente ..']] ([[discussioni utente:'.. self.utente ..'|msg]])'
end end end
end
break end end
end
self.livello= out end
 
-- funzione di supporto: trova i campi vuoti relativi alla valutazione (accuratezza, scrittura...)
function monitoraggio:creaCategorie()
function Monitoraggio:trovaCampiVuoti()
local out= self.categorie or {}
local out = {}
out[#out + 1]= "[[Categoria:Voci monitorate - "..self.livello.."]]"
for _, prgv in ipairs(selfconfig.progetticampi) do
if not self.voti[v] then
local indirizzo= "Voci monitorate Progetto "..prg.." - "..self.livello
out[#out+1] = v
end
end
if #out > 0 then
return out
end
end
 
function Monitoraggio:assegnaLivello()
local t = self.voti
if next(t) == nil then
self.livello = -1
else
-- prima si calcola la media dei valori
local tot, n_tot = 0, 0
for _, n in pairs(t) do
n_tot = n_tot+1
tot = tot+n
end
local media = tot/n_tot
-- arrotondata:
if media-math.floor(media) > 0.5 then
media = math.ceil(media)
else
media = math.floor(media)
end
-- poi si controlla se alcuni valori forzano il risultato verso il basso
local tetto
local function impostaTetto(n, t, v)
if media > n and (not tetto or tetto >= n) then
tetto = n
t[#t+1] = v
end
end
self.migliora, self.compila = {}, {}
if not t.accuratezza then
impostaTetto(0, self.compila, 'accuratezza')
else
impostaTetto(t.accuratezza, self.migliora, 'accuratezza')
end
if not t.fonti then
impostaTetto(2, self.compila, 'fonti')
else
impostaTetto(t.fonti+1, self.migliora, 'copertura di fonti')
end
if not t.scrittura then
impostaTetto(3, self.compila, 'scrittura')
end
if not t.immagini then
impostaTetto(4, self.compila, 'immagini')
end
self.livello = tetto or media
end
end
 
function Monitoraggio:creaCategorie()
local out = self.categorie or {}
--[=[
out[#out + 1] = "[[Categoria:Voci monitorate - " .. self.livello .. "]]"
for _, prg in ipairs(self.link_progetti) do
local indirizzo = "Voci monitorate Progetto " .. prg .. " - " .. self.livello
if mw.title.makeTitle(Categoria, indirizzo):esist() then
out[#out + 1] = "[[Categoria:" .. indirizzo .. "]]"
end
end
for k, v in pairs(self.voti) do
out[#out + 1] = "[[Categoria:Voci monitorate - " .. k .. " " .. v .. "]]"
for _, prg in ipairs(self.progettilink_progetti) do
local indirizzo = "Progetto:" .. prg .. "/Tabella monitoraggio automatico - " .. self.livello
if mw.title.makeTitle(Categoria, indirizzo):esist() then
out[#out + 1] = "[[Categoria:" .. indirizzo .. "]]"
end
end
end
if not self.data then
self:newError("data non specificata")
else
local indirizzo = "Voci monitorate - " .. self.data
if mw.title.makeTitle(Categoria, indirizzo):esist() then
out[#out + 1] = "[[Categoria:" .. indirizzo .. "]]"
else
self:newError("data non riconosciuta, inserire: <code>data = " ..mw.language.new("it") italiano:formatDate("F Y") .. "</code>")
end
end
-- ]=]
self.categorie= out end
self.categorie = out
end
 
-- funzione che crea il primo box del template, cioè quello relativo ai progetti
function monitoraggio:impostaRigaProgetti()
function Monitoraggio:creaPrimoContenitore()
local out= { icone= {}, testo= {} }
local out = mw.html.create('table'):cssText("margin: 0 10% 0.2em 10%; border: thin solid #a7d7f9; background-color: #f0eeff;")
for i, prg in ipairs(self.progetti) do
if #self.progetti == 1 then
out.icone[i]= "[[File:{{Icona argomento|"..prg.."|Crystal Clear app ksirtet.png}}|35x50px]]" -- il template sarebbe da trasformare in una tabella lua
local prg = self.progetti[1]
if i == 1 then
local intestazione = 'La voce <b>'..mw.title.getCurrentTitle().text..'</b> è di '.. config.importanza_definizione[prg.importanza] ..' per il [[progetto:'.. prg.link .. '|progetto '.. prg.nome ..
out.testo= {"[[Progetto:"..prg.."/Monitoraggio voci|Monitoraggio "..prg.."]]"}
']] di Wikipedia ([[Progetto:'.. prg.link ..'/Monitoraggio voci|tabella di monitoraggio]]), un\'iniziativa di coordinamento e collaborazione rivolta a migliorare le voci riguardanti lo stesso tema. Puoi segnalare nuove discussioni riguardo a questa voce nel [[discussioni progetto:'..
else
prg.link ..'|bar tematico del progetto]].'
out.testo[i]= "[[Progetto:"..prg.."/Monitoraggio voci|"..prg.."]]" end end
if self['modello di voce'] then
return out end
intestazione = intestazione..' Per questo genere di voci è presente un [['.. self['modello di voce'] ..'|modello da seguire]].'
end
out:tag('tr')
:tag('td')
:addClass("avviso-immagine")
:wikitext('[[File:'.. iconaArgomento{prg.nome, 'Crystal Clear action viewmag.png'} ..'|40x40px]]')
:done()
:tag('td')
:addClass("avviso-testo")
:wikitext(intestazione)
elseif #self.progetti > 1 then
local intestazione = 'La voce <b>'..mw.title.getCurrentTitle().text..'</b> è monitorata da '..#self.progetti..
' [[wikipedia:progetto|progetti]] di Wikipedia, iniziative di coordinamento e collaborazione rivolte a migliorare le voci riguardanti i temi interessati. Puoi segnalare nuove discussioni riguardo a questa voce nei [[wp:bar tematico|bar tematici]] relativi a ciascun progetto.'
if self['modello di voce'] then
intestazione = intestazione..' Per questo genere di voci è presente un [['.. self['modello di voce'] ..'|modello da seguire]].'
end
out:addClass("mw-collapsible")
:tag('tr')
:tag('td')
:addClass("avviso-immagine")
:wikitext('[[File:Crystal Clear action viewmag.png|40px]]')
:done()
:tag('td')
:addClass("avviso-testo")
:wikitext(intestazione)
:done()
:tag('td')
:cssText("vertical-align: top")
:tag('div')
:cssText("width: 5em;")
local elenco = out:tag('tr'):tag('td'):attr('colspan', "3"):tag('table')
elenco:cssText("clear: both; width: 100% !important; border-collapse: collapse;")
-- creo una tabella che contenga l'indice dei progetti per grado di importanza
local gradi_interesse = {{}, {}, {}, {}, {}}
for _, prg in ipairs(self.progetti) do
table.insert(gradi_interesse[prg.importanza], prg)
end
for importanza, grado in ipairs(gradi_interesse) do
for i, prg in ipairs(grado) do
-- procedo per ogni progetto, in ordine di importanza, a creare una riga con icona e collegamenti
local riga = elenco:tag('tr')
riga:cssText("background-color: white; border: thin solid #D8D8D8;")
riga:tag('td')
:cssText("width: 20px; text-align: center;")
:wikitext('[[File:'.. iconaArgomento{prg.nome, 'Crystal Clear app ksirtet.png'} ..'|20x20px]]')
local inizio_frase = 'La voce è di '.. config.importanza_definizione[importanza] ..' per'
local fine_frase = 'il [[Progetto:'.. prg.link .. '|progetto '.. prg.nome ..']] ([[Progetto:'.. prg.link ..
'/Monitoraggio voci|monitoraggio]]&nbsp;<b>·</b> [[Discussioni progetto:'.. prg.link ..'|bar tematico]])'
if #grado == 1 then
riga:tag('td')
:cssText("padding-left: 0.4em;")
:wikitext(inizio_frase ..' '.. fine_frase)
elseif i == 1 then
riga:tag('td')
:attr('rowspan', #grado)
:cssText("width: 17em; text-align: right; padding-right: 0.3em; vertical-align:top;")
:wikitext(inizio_frase ..':')
riga:tag('td')
:wikitext(fine_frase)
else
riga:tag('td')
:wikitext(fine_frase)
end
end
end
end
return out
end
 
-- funzione che crea il secondo box del template, cioè quello relativo al monitoraggio
function monitoraggio:impostaRigaLivello()
function Monitoraggio:creaSecondoContenitore()
local out= {}
local modifica = mw.title.getCurrentTitle():fullUrl{action = 'edit', section = 0}
local liv= self.livello
local out = mw.html.create('table')
if config.livelli[liv] == "NC" then
:cssText("margin: 0 10% 0.2em 10%; border: thin solid #a7d7f9; background-color: white;")
out.icona= "[[File:Symbol stub class.svg|25px|center]]" -- credo che toglierò quel "center"
-- nel caso la voce debba essere ancora monitorata
if self.livello == -1 then
out:tag('tr')
:tag('td')
:addClass("avviso-immagine")
:wikitext('[[file:'.. config.icona[0] ..'|40px]]')
:done()
:tag('td')
:addClass("avviso-testo")
:wikitext('Questa voce non è stata ancora [[aiuto:monitoraggio|monitorata]]. ['.. modifica ..' Fallo] adesso!')
-- nel caso il monitoraggio sia stato compilato
else
local intestazione = {'La voce <b>'.. mw.title.getCurrentTitle().text ..'</b> è stata monitorata nel mese di '}
out.icona= "<span style=\"font-weight: bold; font-size: 145%; border: 1px solid lightsteelblue; background:"..
intestazione[2] = self.data or '<b class="error" style="font-size:smaller">data mancante</b>[[categoria:Voci monitorate - non datate]]'
config.colore_voti[config.livelli[liv]].."; color:blue; \">&nbsp;'''<tt>&nbsp;[[:Categoria:Voci monitorate - "..liv.."|"..
intestazione[3] = ' da '.. (self.utente or '<b class="error" style="font-size:smaller">valutatore mancante</b>[[categoria:Voci monitorate - non firmate]]')
string.gsub(liv, "livello ", "").."]]'''</tt>&nbsp;</span>" end
if self.livello == 0 then
out.testo= config.descrizione_stato.livello[liv]
intestazione[4] = ', ma non può ancora ricevere una valutazione. È necessaria una valutazione riguardo l\'accuratezza della voce per assegnargli un livello qualitativo.'
-- da raffinare sia per gli stub che per i monitoraggi incompleti
else
if self.data then
intestazione[4] = ' ed è classificata di <b>'.. config.livelli[self.livello] ..'</b>.'
out.data= "Voce monitorata nel mese di "..self.data end
local serve = {}
return out end
serve[1] = #self.migliora > 0 and ' una migliore '.. table.concat(self.migliora, ' e una migliore ') or nil
 
serve[#serve+1] = #self.compila > 0 and ' una valutazione per il parametro <code>|'.. self.compila[1] ..'=</code>' or nil
function monitoraggio:impostaRigheVoti()
intestazione[5] = #serve > 0 and ' È necessaria'.. table.concat(serve, ' nonché') ..' per assegnare alla voce un livello maggiore.' or nil
local out= {}
end
for i, s in ipairs({"accuratezza", "scrittura", "fonti", "immagini"}) do
out:addClass("mw-collapsible")
local voto= self.voti[s]
:tag('tr')
-- if voto ~= "NC" then -- le righe non valutate non compaiono, perché dovrebbero?
:tag('td')
local outi= {}
:addClass("avviso-immagine")
outi.icona= "<span style=\"font-weight: bold; font-size: 155%; border: 1px solid lightsteelblue; background:"..
:wikitext('[[file:'.. config.icona[self.livello] ..'|40px]]')
config.colore_voti[voto]..";\">&thinsp;'''<tt>"..voto.."</tt>'''&thinsp;</span>"
:done()
outi.testo= config.descrizione_stato[s][voto]
:tag('td')
out[i]= outi end -- end
:addClass("avviso-testo")
return out end
:wikitext(table.concat(intestazione))
:done()
:tag('td')
:cssText("vertical-align: top")
:tag('div')
:cssText("width: 5em;")
local elenco = out:tag('tr'):tag('td'):attr('colspan', "3"):tag('table')
elenco:cssText("clear: both; width: 100% !important; border-collapse: collapse;")
for _, parametro in ipairs(config.campi) do
local voto = self.voti[parametro]
if voto then
elenco:tag('tr')
:cssText("background-color: white; border: thin solid #D8D8D8;")
:tag('td')
:cssText("width: 20px;")
:wikitext('[[file:'.. config.icona[voto] ..'|20px]]')
:done()
:tag('td')
:wikitext(config.descrizione_stato[parametro][voto])
end
end
local vuoti = self:trovaCampiVuoti()
if vuoti then
local testo = 'Per questa tabella '.. (#vuoti == 1 and 'deve essere ancora compilato il campo' or 'devono essere ancora compilati i campi') ..' <code>|'.. mw.text.listToText(vuoti, '=</code>, <code>|', '=</code> e <code>|') ..'</code>.'
elenco:tag('tr')
:cssText("background-color: white; border: thin solid #D8D8D8;")
:tag('td')
:cssText("width: 20px;")
:wikitext('[[file:'.. config.icona[0] ..'|20px]]')
:done()
:tag('td')
:wikitext(testo)
end
end
if self.note then
out:tag('tr')
:tag('td')
:attr('colspan', "3")
:cssText("padding-left: 4px;")
:wikitext('<b>Note</b>: '.. self.note)
end
return out
end
function monitoraggioMonitoraggio:creaContenitore__tostring()
local out = tostring(self:creaPrimoContenitore()) .. tostring(self:creaSecondoContenitore())
local prg= self:impostaRigaProgetti()
local liverr, cat = self:impostaRigaLivello().errori, self.categorie
local out= mw.html.create("div")
:addClass("mw-collapsible") -- per rendere i voti particolari a scomparsa
:cssText("border: 1px solid silver; margin-bottom: 0.2em; margin-left: auto; margin-right: auto; background-color: white; padding: 2px;")
-- il box è diviso in tre tabelle
local out_prg= out:tag("div")
:cssText("background-color: #B5D9D3;")
:tag("table")
:cssText("border: none; margin-right:"..(#prg.icone * 35).."px;") -- border-collapse: collapse;
:tag("tr")
for i, icona in ipairs(prg.icone) do
out_prg:tag("td")
:cssText("width: 35px;")
:wikitext(prg.icone[i]) end
out_prg:tag("th")
:cssText("width: 100%; text-align: center;")
:wikitext(table.concat(prg.testo, ", "))
-----
out:tag("table")
:cssText("width: 100%; border: none;") -- border-collapse: collapse;
:tag("tr")
:tag("td")
:wikitext(liv.icona)
:done()
:tag("td")
:cssText("font-size: 107%;") -- lo toglierei
:wikitext(liv.testo)
:done()
:tag("td")
:cssText("color: grey; text-align: right; padding-right: 6px; font-size: 95%;")
:wikitext(liv.data)
-----
local out_voti= out:tag("table")
:addClass("mw-collapsible-content")
:cssText("border-collapse: collapse; width: 100%;")
for _, t in ipairs(self:impostaRigheVoti()) do
out_voti:tag("tr")
:cssText("border: 1px solid #B5D9D3;")
:tag("td")
:wikitext(t.icona)
:done()
:tag("td")
:wikitext(t.testo) end
return out end
 
function monitoraggio:__tostring()
-- for _, s in self.categorie_errore do
-- self.categorie[#self.categorie + 1]= s end
local out= tostring(self:creaContenitore())
local err= self.errori
local cat= self.categorie
if err then
out = out .." '<divli class=\"error\"><ul style="display: block;">' .. table.concat(err, "'<br /ul><ul style="display: block;">') .." '</divul>" end</li>'
end
if cat then
if err then
cat[#cat + 1] = "[[Categoria:Errori di compilazione del template Monitoraggio]]"
end
out = out .. table.concat(cat, "\n")
end
return out
end
 
function monitoraggio:new(o)
o= {} or o
setmetatable(o, self)
self.__index= self
return o end
 
-- FUNZIONEFunzione DIdi INVOKEinvoke
--------------------------------------------------------------------------------
 
local p = {}
 
-- per il debug
function p.create(t)
return Monitoraggio:new(t)
end
 
function p.main(frame)
local args = getArgs(frame)
local out =monitoraggio Monitoraggio:new()
out:organizzaArgomenti(args)
if out.utente then
out:trovaUtente()
end
out:assegnaLivello()
if mw.title.getCurrentTitle().namespace == 1 then
out:creaCategorie()
end
return tostring(out)
end
 
return p