Modulo:Sandbox/ppong: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix coding style, istanza di Monitoraggio => monitoraggio
Omega Bot (discussione | contributi)
m Bot: rimuovo no globals obsoleto
 
(4 versioni intermedie di 2 utenti non mostrate)
Riga 1:
require("Modulo:No globalsstrict")
 
-- Tabella di configurazione
Riga 103:
["Qualita"] = "Qualità"
},
campi = {
-- questa tabella serve per gestire i voti
'accuratezza',
var = {
A = "A"'scrittura',
'fonti',
["A+"] = "A",
'immagini'
VETRINA = "A",
B = "B",
C = "C",
D = "D",
E = "E",
X = "E",
STUB = "E",
NC = "NC"
},
colore_votialtri_parametri = {
A = "#6699ffnote",
B = "#53e04cutente",
C = "#fff31edata",
"modello di voce"
D = "#ff831E",
},
E = "#ff1e29",
importanza = {
NC = "white"
fondamentale = 1,
primario = 2,
secondario = 3,
medio = 3,
minimo = 4,
imprecisato = 5 -- valore predefinito
},
importanza_definizione = {
'<span style="color: red">interesse fondamentale</span>',
'<span style="color: orange">interesse primario</span>',
'<span style="color: green">interesse secondario</span>',
'<span style="color: gray">interesse minimo</span>',
'<i>interesse imprecisato</i>'
},
voti = {
A = 5,
["A+"] = 5,
VETRINA = 5,
B = 4,
C = 3,
D = 2,
E = 1,
X = 1,
STUB = 1
},
livelli = {
A = "livello completobozza",
B = "livello buonoiniziale",
C = "livello sufficientemedio",
D = "livello minimobuono",
E = "livello bozzacompleto",
NC[0] = "nessun livello",
-- ["livello completo"] = "A"5,
-- ["livello buono"] = "B"4,
-- ["livello sufficiente"] = "C"3,
-- ["livello minimo"] = "D"2,
-- ["livello bozza"] = "E"1,
-- ["nessun livello"] = "NC",
-- ["non compilate"] = "NC"
},
descrizione_stato = {
--[=[ livello = {
["livello completo"] = "La voce ha ottenuto il massimo livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
["livello buono"] = "La voce ha raggiunto un buon livello di valutazione in base a quanto raccomandato nel '''[[Progetto:Qualità/Monitoraggio voci|monitoraggio della qualità]]'''.",
Riga 148 ⟶ 165:
["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
["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>"
}, -- ]=]
accuratezza = {
"La voce contiene un contenuto utile molto basso. Informazioni limitate o da controllare.",
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.",
"La voce possiede un'accuratezza che richiede un maggiore sviluppo. Molti aspetti del tema non sono trattati o solo superficialmente.",
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.",
"La voce ha dimensioni e accuratezza di medio livello. Potrebbe essere ancora ampliata notevolmente, stante l'argomento trattato.",
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.",
"I contenuti della voce sono buoni e accurati, ma possono essere migliorati. Sarebbero utili approfondimenti o aggiornamenti.",
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.",
"Voce adeguatamente accurata. Tutti gli aspetti principali del tema sono affrontati con la dovuta profondità e le informazioni sono aggiornate."
E = "Gravissimi problemi relativi all''''accuratezza''' dei contenuti, segnalati da avvisi. Informazioni limitate o da controllare.",
NC = "Nessuna informazione sull'<b>accuratezza</b> dei contenuti."
},
scrittura = {
"La voce è scritta con un italiano pessimo e [[:categoria:correggere|da correggere]] oppure deve essere [[aiuto:wikificare|wikificata]].",
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.",
"La scrittura della voce dovrebbe essere rivista in funzione del [[aiuto:manuale di stile|manuale di stile]].",
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.",
C = "SeriLa problemivoce diè '''scrittura'''. Linguaggioadeguatamente comprensibileleggibile, ma conlo [[aiuto:manuale di stile|stile]] pocopotrebbe essere più scorrevole. Strutturazionee le informazioni potrebbero inessere paragrafipresentate carentemeglio.",
"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.",
D = "Gravi problemi di '''scrittura'''. Stile scadente. Strutturazione in paragrafi assente o molto carente.",
"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."
E = "Gravissimi problemi di '''scrittura'''. Lo [[aiuto:manuale di stile|stile]] va completamente rivisto ed è auspicabile una integrale riscrittura.",
NC = "Nessuna informazione sulla '''scrittura'''."
},
fonti = {
"La voce [[:categoria:senza fonti|non ha nessuna fonte o ne ha pochissime]].",
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.",
B = "Lievi problemi relativi alla verificabilità dellaLa voce. Unmeriterebbe aspettoun delmaggior temasupporto nondi è adeguatamente supportato da '''fonti''' [[Wikipedia:Fonti attendibili|attendibili]]. Alcunee fontine andrebberoè sostituiteancora conper altrelo più autorevoli. Il tema non è stabile e potrebbe in breve necessitare di aggiornamentiscoperta.",
C = "SeriLa problemivoce relativi alla verificabilità della voce.è Carenzaprovvista di '''fonti''' [[Wikipedia:Fonti attendibili|attendibili]]., Alcunima aspettinon delè tema sonoancora completamente privi di fonti a supporto. Presenza o necessità del template {{[[templatewp:cnverificabilità|cnverificabile]]}}. LaSarebbe delicatezzanecessario deltrovare temadelle richiedefonti unaper specialei attenzionediversi alleaspetti fontidella 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.",
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 {{[[template:F|F]]}}.",
E = "GravissimiI problemicontenuti relatividella allavoce verificabilitàsono dellainteramente voce.verificabili '''Fonti'''tramite assenti ofonti [[Wikipedia:Fonti attendibili|delautorevoli tutto inadeguate]]. Presenza o necessità del template {{[[template:F|Fattendibili]]}}.",
NC = "Nessuna informazione sulla [[Wikipedia:Fonti attendibili|attendibilità]] delle '''fonti'''."
},
immagini = {
A = "La voce è corredata da un adeguato numeronecessiterebbe di '''[[aiuto:immagini|immagini]]''' eo altrifile supportiessenziali grafici,per inla temacomprensione condel il contenuto della vocetema, oppure nonma ne necessitaè assolutamente alcunopriva.",
"La voce ha neccessità di file importanti per la comprensione del tema, alcuni essenziali.",
B = "Lievi problemi relativi alla dotazione di '''[[aiuto:immagini|immagini]]''' e altri supporti grafici nella voce. Mancano alcuni file o altri sono inadeguati.",
C = "SeriPer problemimigliorare relativila allacomprensibilità dotazionedella divoce, '''[[aiuto:immagini|immagini]]'''dovrebbero eesssere altriinserite supportidelle grafici nella voce. Mancanoimmagini alcunio 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.",
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.",
"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."
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.",
NC = "Nessuna informazione sulla presenza di '''[[aiuto:immagini|immagini]]''' o altri supporti grafici."
}
},
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 di utilità
--------------------------------------------------------------------------------
 
Riga 193 ⟶ 214:
local italiano = mw.language.new("it")
 
-- ovvero comeper complicarsi la vita inutilmente
local function riordinaTabella(t)
local n = 0
for _, _ in pairs(t) do
Riga 217 ⟶ 238:
 
function Monitoraggio:new(o)
o = {}o or o{}
setmetatable(o, self)
self.__index = self
Riga 223 ⟶ 244:
end
 
function Monitoraggio:newError(err, cat) -- 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
 
Riga 240 ⟶ 255:
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>" .. kkk_min .. "</ttkbd> inserito più volte con un diverso uso della maiuscola.")
args[k] = nil
elseif kkk_min ~= k then
args[kkk_min] = v
args[k] = nil
end
Riga 251 ⟶ 266:
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>.")
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
Riga 274 ⟶ 288:
end
self.progetti = {}
self.link_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}
-- attinge alla tabella di configurazione per ottenere il nome completo del progetto
local uvv_maius = italiano:ucfirst(v)
self.progetti[i]['link'] = config.progetti[v] or config.progetti[v_maius] or v_maius
local lv
args[k] = nil
if config.progetti[v] then
local imp = args['importanza'..i]
lv = config.progetti[v]
elseifif imp and not config.progettiimportanza[uvimp] then
self:newError("Valore <kbd>".. imp .."</kbd> non riconosciuto per il parametro <kbd>importanza".. i .."</kbd>.")
lv = config.progetti[uv]
else
lv = uv
end
self.link_progettiprogetti[i]['importanza'] = lvconfig.importanza[imp] or 5
args[k'importanza'..i] = nil
elseif not string.find(k, "^importanza%d+$") then
else
self:newError("parametroParametro <ttkbd>" .. k .. "</ttkbd> non riconosciuto.")
args[k] = nil
end
end
riordinaTabella(self.progetti)
riordinaTabella(self.link_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 -- ]]
self.link_progetti[i] = nil
end
end
 
-- crea una firma a partire dal solo nome utente. se invece c'è una firma con data, estrapola la data
function Monitoraggio:trovaUtente()
if mw.ustring.find(self.utente, '%[%[[Uu]tente:') then
local n, _, data = mw.ustring.find(self.utente, ' %d%d:%d%d, %d?%d (%a+ %d%d%d%d)')
if n then
self.data = self.data or data
-- toglie ora e data e i trattini iniziali dalla firma
self.utente = mw.ustring.gsub(mw.ustring.sub(self.utente, 1, n-1), '$--', '')
end
else
self.utente = '[[utente:'.. self.utente ..'|'.. self.utente ..']] ([[discussioni utente:'.. self.utente ..'|msg]])'
end
end
 
-- funzione di supporto: trova i campi vuoti relativi alla valutazione (accuratezza, scrittura...)
-- la funzione attuale non è proprio così banale
function Monitoraggio:assegnaLivellotrovaCampiVuoti()
local out = "non compilate"{}
for _, v in pairsipairs(selfconfig.voticampi) do
if not self.voti[v ~= "NC"] then
out[#out+1] = v
-- cerca un valore alla volta in tutti i parametri, partendo dal basso, quindi assegna in generale
end
for _, vv in ipairs({"NC", "E", "D", "C", "B", "A"}) do
end
-- un livello corrispondente al più basso valore tra i voti che sono stati dati alla voce
if #out > 0 then
for k, vvv in pairs(self.voti) do
return out
if vv == vvv then
end
out = config.livelli[vv]
end
break
 
end
function Monitoraggio:assegnaLivello()
end
local t = self.voti
if out ~= "non compilate" then
if next(t) == nil then
break
self.livello = -1
end
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
break
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
self.livello = out
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
Riga 361 ⟶ 420:
end
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
local l_prg = self.link_progetti[i]
local prg = self.progetti[1]
out.icone[i] = "[[File:" .. iconaArgomento({prg, "Crystal Clear app ksirtet.png"}) .. "|35x50px]]"
local intestazione = 'La voce <b>'..mw.title.getCurrentTitle().text..'</b> è di '.. config.importanza_definizione[prg.importanza] ..' per il [[progetto:'.. prg.link .. '|progetto '.. prg.nome ..
if i == 1 then
']] 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:'..
out.testo = {"[[Progetto:" .. l_prg .. "/Monitoraggio voci|Monitoraggio " .. prg .. "]]"}
prg.link ..'|bar tematico del progetto]].'
else
if self['modello di voce'] then
out.testo[i] = "[[Progetto:" .. l_prg .. "/Monitoraggio voci|" .. prg .. "]]"
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
Riga 378 ⟶ 502:
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]]"
-- 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:" ..
config.colore_votiintestazione[config.livelli[liv]2] = self..data or '<b class="error"; colorstyle="font-size:blue; \smaller">&nbsp;'''data mancante<tt/b>[[:Categoriacategoria:Voci monitorate - "non .. liv .. "|" ..datate]]'
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>"
if self.livello == 0 then
end
intestazione[4] = ', ma non può ancora ricevere una valutazione. È necessaria una valutazione riguardo l\'accuratezza della voce per assegnargli un livello qualitativo.'
out.testo = config.descrizione_stato.livello[liv]
else
-- da modificare o migliorare?
intestazione[4] = ' ed è classificata di <b>'.. config.livelli[self.livello] ..'</b>.'
if liv == "nessun livello" then
local nonvotatiserve = {}
serve[1] = #self.migliora > 0 and ' una migliore '.. table.concat(self.migliora, ' e una migliore ') or nil
for k, v in pairs(self.voti) do
serve[#serve+1] = #self.compila > 0 and ' una valutazione per il parametro <code>|'.. self.compila[1] ..'=</code>' or nil
if v == config.livelli[liv] then
intestazione[5] = #serve > 0 and ' È necessaria'.. table.concat(serve, ' nonché') ..' per assegnare alla voce un livello maggiore.' or nil
nonvotati[#nonvotati + 1] = k
end
out:addClass("mw-collapsible")
:tag('tr')
:tag('td')
:addClass("avviso-immagine")
:wikitext('[[file:'.. config.icona[self.livello] ..'|40px]]')
:done()
:tag('td')
:addClass("avviso-testo")
: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()
out.testo = out.testo .. " <small>Non è stato fornita una valutazione per " .. table.concat(nonvotati, ", ") .. "</small>"
if vuoti then
end
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>.'
if self.data then
elenco:tag('tr')
out.data = "Voce monitorata nel mese di " .. self.data
:cssText("background-color: white; border: thin solid #D8D8D8;")
end
:tag('td')
return out
:cssText("width: 20px;")
end
:wikitext('[[file:'.. config.icona[0] ..'|20px]]')
 
:done()
function Monitoraggio:impostaRigheVoti()
:tag('td')
local out = {}
:wikitext(testo)
for i, s in ipairs({"accuratezza", "scrittura", "fonti", "immagini"}) do
local voto = self.voti[s]
if voto ~= "NC" then -- le righe non valutate non compaiono, perché dovrebbero?
local outi = {}
outi.icona = "<span style =\"font-weight: bold; font-size: 155%; border: 1px solid lightsteelblue; background:" ..
config.colore_voti[voto] .. ";\">&thinsp;'''<tt>" .. voto .. "</tt>'''&thinsp;</span>"
outi.testo = config.descrizione_stato[s][voto]
out[i] = outi
end
end
return out
end
 
function Monitoraggio:creaContenitore()
local prg = self:impostaRigaProgetti()
local liv = self:impostaRigaLivello()
local out = mw.html.create("div")
:addClass("mw-collapsible") -- per rendere i voti particolari a scomparsa
:cssText("border: 1px solid silver; margin: 0 10% 0.2em 10%; background-color: white; padding: 3px;")
-- 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; text-align: center;")
: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
if self.note then
out:tag("div"'tr')
:tag('td')
:cssText("margin: 0.3em 0 0.1em 1em")
:wikitextattr("Note: 'colspan'" .. self.note .., "''3")
:cssText("padding-left: 4px;")
:wikitext('<b>Note</b>: '.. self.note)
end
return out
end
 
function Monitoraggio:__tostring()
local out = tostring(self:creaPrimoContenitore()) .. tostring(self:creaSecondoContenitore())
-- for _, s in self.categorie_errore do
local err, cat = self.errori, self.categorie
-- 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>"</li>'
end
if cat then
Riga 498 ⟶ 602:
 
local p = {}
 
-- per il debug
function p.create(t)
return Monitoraggio:new(t)
end
 
function p.main(frame)
local args = getArgs(frame)
local monitoraggioout = Monitoraggio:new()
monitoraggioout:organizzaArgomenti(args)
if out.utente then
monitoraggio:assegnaLivello()
out:trovaUtente()
end
out:assegnaLivello()
if mw.title.getCurrentTitle().namespace == 1 then
monitoraggioout:creaCategorie()
end
return tostring(monitoraggioout)
end