Modulo:Sandbox/ppong: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix coding style, istanza di Monitoraggio => monitoraggio |
cambio tutto |
||
Riga 103:
["Qualita"] = "Qualità"
},
campi = {
'accuratezza',
'fonti',
'immagini'
},
"modello di voce"
},
importanza = {
fondamentale = 1,
primario = 2,
secondario = 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>',
'interesse imprecisato'
},
voti = {
A = 5,
["A+"] = 5,
VETRINA = 5,
B = 4,
C = 3,
D = 2,
E = 1,
X = 1,
STUB = 1
},
livelli = {
-- ["livello completo"] =
-- ["livello buono"] =
-- ["livello sufficiente"] =
-- ["livello minimo"] =
-- ["livello bozza"] =
-- ["nessun livello"] = "NC",
-- ["non compilate"] = "NC"
},
descrizione_stato = {
Riga 150 ⟶ 166:
},
accuratezza = {
"La voce contiene un contenuto utile molto basso. Informazioni limitate o da controllare.",
"La voce possiede un'accuratezza che richiede un maggiore sviluppo. Molti aspetti del tema non sono trattati o solo superficialmente.",
"La voce ha dimensioni e accuratezza di medio livello. Potrebbe essere ancora ampliata notevolmente, stante l'argomento trattato.",
"I contenuti della voce sono buoni e accurati, ma possono essere migliorati. Sarebbero utili approfondimenti o aggiornamenti.",
"Voce adeguatamente accurata. Tutti gli aspetti principali del tema sono affrontati con la dovuta profondità e le informazioni sono aggiornate."
},
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 è 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 è ben coperta da fonti. Per migliorare l'attendibilità della voce si potrebbe comunque arricchirla con altri supporti maggiormente autorevoli.",
},
immagini = {
"La voce ha neccessità di file importanti per la comprensione del tema, alcuni essenziali.",
"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'
}
}
--
--------------------------------------------------------------------------------
Riga 193 ⟶ 213:
local italiano = mw.language.new("it")
--
local function riordinaTabella(t)
local n = 0
for _, _ in pairs(t) do
Riga 217 ⟶ 237:
function Monitoraggio:new(o)
o =
setmetatable(o, self)
self.__index = self
Riga 223 ⟶ 243:
end
function Monitoraggio:newError(err
if not self.errori then
self.errori = {}
end
self.errori[#self.errori + 1] = err
end
Riga 240 ⟶ 254:
for k, v in pairs(args) do
if type(k) == "string" then
local
if
self:newError("
args[k] = nil
elseif
args[
args[k] = nil
end
Riga 251 ⟶ 265:
end
self.voti = {}
for _, s in ipairs(
local voto = args[s] or
voto = string.upper(voto)
if config.
self.voti[s] = config.
elseif voto ~= 'NC' then
self:newError("
end
args[s] = nil
end
for _, s in ipairs
self[s] = args[s]
args[s] = nil
Riga 274 ⟶ 287:
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}
-- attinge alla tabella di configurazione per ottenere il nome completo del progetto
local
self.progetti[i]['link'] = config.progetti[v] or config.progetti[v_maius] or v_maius
args[k] = nil
local imp = args['importanza'..i]
self:newError("Valore <tt>".. imp .."</tt> non riconosciuto per il parametro <tt>importanza".. i .."</tt>.")
end
self.
args[
elseif not string.find(k, "^importanza%d+$") then
self:newError("
end
end
riordinaTabella(self.progetti)
if #self.progetti == 0 then
self:newError("nessun progetto specificato")
self:newError("più di quattro progetti specificati")
for i = 5, #self.progetti do
self.progetti[i] = nil
end -- ]]
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...)
function Monitoraggio:
local out =
for _, v in
if not self.voti[v
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, 'amplia ulteriormente')
end
if not t.fonti then
impostaTetto(2, self.compila, 'fonti')
else
impostaTetto(t.fonti+1, self.migliora, 'migliora la copertura di fonti di')
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
Riga 361 ⟶ 419:
end
end
-- ]=]
self.categorie = out
end
-- funzione che crea il primo box del template, cioè quello relativo ai progetti
function Monitoraggio:creaPrimoContenitore()
local out = mw.html.create('table'):cssText("margin: 0 10% 0.2em 10%; border: thin solid #a7d7f9; background-color: #f0eeff;")
if #self.progetti == 1 then
local prg = self.progetti[1]
local intestazione = 'La voce <b>'..mw.title.getCurrentTitle().text..'</b> è monitorata dal [[progetto:'.. prg.link .. '|progetto '.. prg.nome ..
']] di Wikipedia ([[Progetto:'.. prg.link ..'/Monitoraggio voci|tabella di monitoraggio]]), consulta le sue linee guida per conoscere le raccomandazioni che sono state decise in relazione alla stesura di questa voce e segnala le nuove discussioni nel [[discussioni progetto:'..
prg.link ..'|suo bar tematico]].'
if self['modello di voce'] then
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, consulta le rispettive linee guida per conoscere le raccomandazioni che sono state decise in relazione alla stesura di questa voce e segnala le nuove discussioni nei relativi [[wp:bar tematico|bar tematici]].'
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]] <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 ⟶ 501:
end
-- funzione che crea il secondo box del template, cioè quello relativo al monitoraggio
function Monitoraggio:creaSecondoContenitore()
local modifica = mw.title.getCurrentTitle():fullUrl{action = 'edit', section = 0}
local out = mw.html.create('table')
:cssText("margin: 0 10% 0.2em 10%; border: thin solid #a7d7f9; background-color: white;")
-- 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 '}
intestazione[3] = ' da '.. (self.utente or '<b class="error" style="font-size:smaller">valutatore mancante</b>[[categoria:Voci monitorate - non firmate]]')
if self.livello == 0 then
intestazione[4] = ', ma non può ancora ricevere una valutazione.'
else
intestazione[4] = ' ed è classificata di <b>'.. config.livelli[self.livello] ..'</b>.'
end
intestazione[5] = mw.language.new('it'):ucfirst(table.concat(self.migliora, ' e ')) ..' questa voce per migliorarne il livello.'
elseif #self.migliora == 0 and #self.compila > 0 then
if #self.compila == 1 then
intestazione[5] = 'Per migliorare la valutazione è necessaria una valutazione per il parametro <code>|'.. self.compila[1] ..
'=</code>. ['.. modifica ..' Aggiungila] adesso!'
else
intestazione[5] = 'Per migliorare la valutazione è necessaria una valutazione per i parametri <code>|'..
mw.text.listToText(self.compila, '=</code>, <code>|', '=</code> e <code>|') ..'=</code>. ['.. modifica ..' Aggiungila] adesso!'
end
elseif #self.migliora > 0 and #self.compila > 0 then
if #self.compila == 1 then
intestazione[5] = mw.language.new('it'):ucfirst(table.concat(self.migliora, ' e ')) ..' questa voce e ['.. modifica ..
'aggiungi una valutazione per il parametro <code>|'.. self.compila[1] ..'=</code> per migliorare il risultato della valutazione.'
else
intestazione[5] = mw.language.new('it'):ucfirst(table.concat(self.migliora, ' e ')) ..' questa voce e ['.. modifica ..
'aggiungi una valutazione per i parametri <code>|'.. mw.text.listToText(self.compila, '=</code>, <code>|', '=</code> e <code>|') ..
'=</code> per migliorare il risultato della valutazione.'
end
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()
if vuoti then
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('Per questa tabella devono essere ancora compilati i campi <code>|'.. mw.text.listToText(vuoti, '=</code>, <code>|', '=</code> e <code>|') ..'</code>.')
end
end
if self.note then
out:tag(
:tag('td')
:
: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())
local err, cat = self.errori, self.categorie
if err then
out = out ..
end
if cat then
Riga 498 ⟶ 616:
local p = {}
-- per il debug
function p.create(t)
return Monitoraggio:new(t)
end
function p.main(frame)
local args = getArgs(frame)
local
if out.utente then
out:trovaUtente()
end
out:assegnaLivello()
if mw.title.getCurrentTitle().namespace == 1 then
end
return tostring(
end
|