Modulo:Bio/Parametri/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
+checkEpoca
 
aggiornato alla versione corrente, +Pseudonimo
 
(15 versioni intermedie di 2 utenti non mostrate)
Riga 1:
local config = {}
 
--[[
Configurazione dei parametri del moduloModulo:bioBio.
Definisce quali sono gli unici parametri accettati e i rispettivi valori validi nella forma:.
]]
["Nome parametro"] = { "Breve descrizione", tipo_parametro },
config.params = {
["Titolo"] = true,
["Nome"] = true,
["Cognome"] = true,
["Pseudonimo"] = true,
["PostPseudonimo"] = true,
["PostCognome"] = true,
["PostCognomeVirgola"] = true,
["ForzaOrdinamento"] = true,
["PreData"] = true,
["Sesso"] = true,
["LuogoNascita"] = true,
["LuogoNascitaLink"] = true,
["LuogoNascitaAlt"] = true,
["GiornoMeseNascita"] = true,
["AnnoNascita"] = true,
["NoteNascita"] = true,
["LuogoMorte"] = true,
["LuogoMorteLink"] = true,
["LuogoMorteAlt"] = true,
["GiornoMeseMorte"] = true,
["AnnoMorte"] = true,
["NoteMorte"] = true,
["PreAttività"] = true,
["Epoca"] = true,
["Epoca2"] = true,
["Attività"] = true,
["Attività2"] = true,
["Attività3"] = true,
["AttivitàAltre"] = true,
["Nazionalità"] = true,
["NazionalitàNaturalizzato"] = true,
["Cittadinanza"] = true,
["PostNazionalità"] = true,
["Categorie"] = true,
["FineIncipit"] = true,
["Punto"] = true,
["Immagine"] = true,
["Didascalia"] = true,
["Didascalia2"] = true,
["DimImmagine"] = true,
["CognomePrima"] = true,
["Debug"] = true
}
 
--[[
Il campo tipo_parametro può valere:
Configurazione dei controlli effettuati sui parametri (ogni parametro può averne più di uno).
1) "string": è accettato qualunque valore
Ogni controllo è configurabile tramite:
2) "number": è accettato solo un valore numerico
* "param ": il parametro su cui effettuare il controllo
3) un pattern Lua: è accettato il valore se soddisfa il pattern Lua descritto
* "valuetest": il controllo da effettuare sul valore del parametro, può valere:
4) una funzione Lua: funzione Lua che esegue il controllo di validità,
* un pattern Lua: è accettato il valore se soddisfa il pattern Lua descritto
da usare quando i tipi precedenti non sono sufficienti.
* una funzione Lua: funzione Lua che esegue il controllo di validità,
da usare quando i pattern Lua non sono sufficienti o per controlli più complessi.
* "errmsg": il messaggio di errore da visualizzare, è facoltativo.
Se assente la voce sarà comunque categorizzata tra le voci con errori.
Nel caso della funzione, deve accettare due parametri: il valore del parametro e
la tabella con gli altri argomenti (per fare controlli in relazione agli altri parametri).
Deve ritornare true se il valore del parametro è valido altrimenti false.
Esempio: scommentando la seguente funzione checkNome e usandoaggiungendo allala riga "Nome":
["Nome"] { param = { "Nome", dellavaluetest persona",= checkNome },
sonosaranno categorizzate come errore la pagine con Nome contenente "soprannominato" o "al secolo".
Inoltre non verrà visualizzato il messaggio di errore (errmsg è assente).
]]
--local function checkNome(value, args)
-- return value:find("soprannominato") == nil and
-- value:find("al secolo") == nil
--end
 
local function checkEpoca(value, args)
return mw.loadData("Modulo:Bio/Configurazione").epoche[value] ~= nil
end
 
local function checkLen1000(value, args)
return {
-- ignora eventuali tag span, solitamente generati da template inclusi
["Titolo"] = { "Eventuali titoli", "string" },
return value:gsub("<span.+</span>", ""):len() < 1000
["Nome"] = { "Nome della persona", "string" },
end
["Cognome"] = { "Cognome della persona", "string" },
 
["PostCognome"] = { "Precisazioni dopo il cognome", "string" },
local function checkQuestionMark(value, args)
["PostCognomeVirgola"] = { "Precisazioni dopo il cognome (fra virgole)", "string" },
return value ~= "?"
["ForzaOrdinamento"] = { "Forza ordinamento", "string" },
end
["PreData"] = { "Precisazioni prima della data", "string" },
 
["Sesso"] = { "Scegliere tra M e F", "^[MF]$" },
local function checkEllipsis(value, args)
["LuogoNascita"] = { "Luogo di nascita", "string" },
return value ~= "..."
["LuogoNascitaLink"] = { "Luogo di nascita (link)", "string" },
end
["LuogoNascitaAlt"] = { "Luogo di nascita (alternativo)", "string" },
 
["GiornoMeseNascita"] = { "Giorno e mese di nascita", "string" },
local function checkPeriod(value, args)
["AnnoNascita"] = { "Anno di nascita", "string" },
return not value:match("^%.")
["NoteNascita"] = { "Note sulla nascita", "string" },
end
["LuogoMorte"] = { "Luogo di morte", "string" },
 
["LuogoMorteLink"] = { "Luogo Morte (link)", "string" },
-- Applicato su AnnoMorte per verificare che in presenza di AnnoNascita sia uguale o posteriore
["LuogoMorteAlt"] = { "Luogo Morte (alternativo)", "string" },
local function checkMorteDopoNascita(value, args)
["GiornoMeseMorte"] = { "Giorno e mese di morte", "string" },
local annoNascita, annoMorte
["AnnoMorte"] = { "Anno di morte", "string" },
local ret = true
["NoteMorte"] = { "Note sulla morte", "string" },
if args["AnnoNascita"] then
["PreAttività"] = { "Frase pre-attività", "string" },
annoNascita = tonumber(args["AnnoNascita"])
["Epoca"] = { "Sottocategorizzazione per secolo di attività", checkEpoca },
annoMorte = tonumber(value)
["Epoca2"] = { "Per persone che hanno vissuto a cavallo di secoli diversi", checkEpoca },
if annoNascita and annoMorte then
["Attività"] = { "Attività nell'elenco di attività esistenti", "string" },
ret = annoMorte >= annoNascita
["Attività2"] = { "Seconda attività", "string" },
end
["Attività3"] = { "Terza attività", "string" },
end
["AttivitàAltre"] = { "Attività (altre)", "string" },
return ret
["Nazionalità"] = { "Nazionalità nell'elenco di nazionalità esistenti", "string" },
end
["NazionalitàNaturalizzato"] = { "Nazionalità (naturalizzato)", "string" },
 
["Cittadinanza"] = { "Nazionalità culturale differente dalla nazionalità anagrafica", "string" },
-- Per controllare la dipendenza da un altro parametro
["PostNazionalità"] = { "Precisazioni dopo la nazionalità", "string" },
local function hasParam(param)
["Categorie"] = { "Se 'no', disattiva la categorizzazione per Attività e Nazionalità", "^no$" },
return function(value, args)
["FineIncipit"] = { "Sostituisce la parte dopo le parentesi della data", "string" },
return args[param] ~= nil
["Punto"] = { "Se 'no' elimina il punto finale", "^no$" },
end
["Immagine"] = { "Nome del file", "string" },
end
["Didascalia"] = { "Didascalia dell'immagine", "string" },
 
["Didascalia2"] = { "Ulteriore didascalia", "string" },
-- Per controllare il conflitto con un altro parametro
["DimImmagine"] = { "Dimensione immagine senza px", "^%d+$" }
local function unusedParam(param)
return function(value, args)
return args[param] == nil
end
end
 
-- Per controllare che un altro parametro abbia valore diverso
local function diffParam(param)
return function(value, args)
return value ~= args[param]
end
end
 
config.validators = {
{ param = "Sesso", valuetest = "^[MF]$", errmsg = "il valore del parametro Sesso non è valido, accettato solo 'M' o 'F'" },
{ param = "Epoca", valuetest = checkEpoca, errmsg = "il valore del parametro Epoca non è valido" },
{ param = "Epoca2", valuetest = checkEpoca, errmsg = "il valore del parametro Epoca2 non è valido" },
{ param = "Epoca2", valuetest = hasParam("Epoca"), errmsg = "Epoca2 è usato ma Epoca è vuoto" },
{ param = "Epoca2", valuetest = diffParam("Epoca"), errmsg = "Epoca2 ha lo stesso valore di Epoca" },
{ param = "Punto", valuetest = "^no$", errmsg = "il valore del parametro Punto non è valido, accettato solo 'no'" },
{ param = "DimImmagine", valuetest = "^%d+$", errmsg = "il valore del parametro DimImmagine non è valido, inserire la dimensione senza px" },
{ param = "Categorie", valuetest = "^no$", errmsg = "il valore del parametro Categorie non è valido, accettato solo 'no'" },
{ param = "PostNazionalità", valuetest = checkPeriod, errmsg = "PostNazionalità inizia con il punto. Spostarne il contenuto alla riga successiva dopo la chiusura del template Bio" },
{ param = "PostNazionalità", valuetest = checkLen1000 },
{ param = "FineIncipit", valuetest = checkLen1000 },
{ param = "PostCognomeVirgola", valuetest = unusedParam("PostCognome"), errmsg = "PostCognome e PostCognomeVirgola non possono essere utilizzati insieme" },
{ param = "AnnoNascita", valuetest = checkQuestionMark, errmsg = "il valore '?' in AnnoNascita non è valido: se sconosciuto va lasciato vuoto e il template visualizzerà i punti di sospensione" },
{ param = "AnnoNascita", valuetest = checkEllipsis, errmsg = "il valore '...' in AnnoNascita non è valido: se sconosciuto va lasciato vuoto e il template visualizzerà i punti di sospensione" },
{ param = "AnnoMorte", valuetest = checkEllipsis, errmsg = "il valore '...' in AnnoMorte non è valido: se sconosciuto va utilizzato '?' e il template visualizzerà i punti di sospensione" },
{ param = "AnnoMorte", valuetest = checkMorteDopoNascita, errmsg = "il valore del parametro AnnoMorte è anteriore ad AnnoNascita" },
{ param = "LuogoNascitaLink", valuetest = hasParam("LuogoNascita"), errmsg = "LuogoNascitaLink è usato ma LuogoNascita è vuoto" },
{ param = "LuogoNascitaLink", valuetest = diffParam("LuogoNascita"), errmsg = "LuogoNascitaLink va usato solo se diverso da LuogoNascita" },
{ param = "LuogoNascitaAlt", valuetest = hasParam("LuogoNascita"), errmsg = "LuogoNascitaAlt è usato ma LuogoNascita è vuoto" },
{ param = "LuogoMorteLink", valuetest = hasParam("LuogoMorte"), errmsg = "LuogoMorteLink è usato ma LuogoMorte è vuoto" },
{ param = "LuogoMorteLink", valuetest = diffParam("LuogoMorte"), errmsg = "LuogoMorteLink va usato solo se diverso da LuogoMorte" },
{ param = "LuogoMorteAlt", valuetest = hasParam("LuogoMorte"), errmsg = "LuogoMorteAlt è usato ma LuogoMorte è vuoto" },
{ param = "LuogoMorte", valuetest = hasParam("AnnoMorte"), errmsg = "LuogoMorte è usato ma AnnoMorte è vuoto" },
{ param = "GiornoMeseMorte", valuetest = hasParam("AnnoMorte"), errmsg = "GiornoMeseMorte è usato ma AnnoMorte è vuoto" },
{ param = "Attività3", valuetest = hasParam("Attività2"), errmsg = "Attività3 è usato ma Attività2 è vuoto" }
}
 
return config