Differenze tra le versioni di "Modulo:Portale"
Da Destiny One.
m (fix controllo esistenza pagina) |
m (una versione importata) |
(Nessuna differenza)
|
Versione attuale delle 22:05, 29 dic 2016
La documentazione per questo modulo può essere creata in Modulo:Portale/man
require('Module:No globals') --esportazione delle funzioni del modulo local p = {} -- testo per il messaggio di errore se non ci sono parametri o sono tutti non esistenti local novalid_parameter = { 'Il [[Template:Portale]] necessita di almeno un argomento!', 'Non sono stati inseriti portali validi nel [[Template:Portale]]' } -- layout per i portali (dato che le stringhe saranno usate in una funzione mw.ustring.format -- la coppia di caratteri '%s' è il segnaposto per una stringa, mentre per inserire il -- carattere % normalmente lo si deve inserire raddoppiato local row_portals = { --1 portale (segnaposto vuoto, è gestito a parte) '', -- 2 portali [=[<tr><td style="padding-right:3px; width:50%%;">%s</td><td style="padding-left:3px; width:50%%;">%s</td></tr>]=], -- 3 portali [=[<tr><td style="padding-right:3px; width:33%%;">%s</td><td style="padding-left:3px; padding-right:3px; width:33%%;">%s</td> <td style="padding-left:3px; width:33%%;">%s</td></tr>]=], --4 portali [=[<tr><td style="padding-right:3px; width:50%%;">%s</td><td style="padding-left:3px; width:50%%;">%s</td></tr> <tr><td style="padding-right:3px;">%s</td><td style="padding-left:3px;">%s</td></tr>]=], -- 5 portali [=[<tr><td style="padding-right:3px; width:33%%;" colspan="2">%s</td> <td style="padding-left:3px; padding-right:3px; width:33%%;" colspan="2">%s</td> <td style="padding-left:3px; width:33%%;" colspan="2">%s</td></tr> <tr><td style="padding-right:3px; width:50%%;" colspan="3">%s</td> <td style="padding-left:3px; width:50%%;" colspan="3">%s</td></tr>]=], --6 portali [=[<tr><td style="padding-right:3px; width:33%%;">%s</td> <td style="padding-left:3px; padding-right:3px; width:33%%;">%s</td> <td style="padding-left:3px; width:33%%;">%s</td></tr> <tr><td style="padding-right:3px;">%s</td> <td style="padding-left:3px; padding-right:3px;">%s</td> <td style="padding-left:3px;">%s</td></tr>]=] } -- Stringhe specifiche per alcuni portali, quando questi sono gli unici del template local single_portal = { ['Astronomia'] = "accedi alle voci di Wikipedia che trattano di astronomia e astrofisica", ['Bergamo'] = "accedi alle voci di Wikipedia su Bergamo e sul suo territorio", ['Brasile'] = "accedi alle voci di Wikipedia che parlano del Brasile", ['Chimica'] = "il portale della scienza della composizione, delle proprietà e delle trasformazioni della materia", ['Comunità'] = "entra nella comunità degli autori di Wikipedia", ['LGBTQ'] = "le voci di Wikipedia dedicate al mondo gay, lesbico, bisex, trans e queer", ['Nordafrica'] = "accedi alle voci di Wikipedia che parlano del Nordafrica", ['Oggetti del profondo cielo'] = "accedi alle voci di Wikipedia che trattano di oggetti non stellari", ['Portali'] = "accedi ai [[WP:Portale|portali]] di Wikipedia", ['Progetti'] = "partecipa ai [[WP:Progetto|progetti]] di Wikipedia", ['Punk'] = "accedi alle voci di Wikipedia che parlano di musica punk", ['Sistema solare'] = "accedi alle voci di Wikipedia sugli oggetti del Sistema solare", ['Stelle'] = "accedi alle voci di Wikipedia che trattano di stelle e costellazioni", ['Telematica'] = "accedi alle voci di Wikipedia che parlano di reti, telecomunicazioni e protocolli di rete", } -- funzione di utilità per aggiungere elementi a una tabella local function dump(t, ...) local args = {...} for _, s in ipairs(args) do table.insert(t, s) end end -- 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 -- restituisce una categoria di errore solo in ns0 local function get_error_category() return mw.title.getCurrentTitle().namespace == 0 and '[[Categoria:Errori di compilazione del template Portale]]' or '' end -- funzione princpale function p.portale(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame, {removeBlanks = false}) local lang = mw.language.getContentLanguage() local portals = {} local bad_portals = {} -- tabella per raccogliere gli errori local errors_msg = {} -- raccoglie in portals e bad_portals i nomi dei portali passati al modulo, -- ignorando quelli valorizzati a stringa vuota for i, arg in ipairs(args) do if arg ~= '' then if #portals < 6 then local ucarg = lang:ucfirst(arg) if titleExists('Portale:' .. ucarg) then table.insert(portals, { ucname=ucarg, name=arg }) else table.insert(bad_portals, ucarg) end else dump(errors_msg, 'Il template accetta al massimo sei portali') break end end end -- ritorna un messaggio di errore se non sono rimasti portali validi if #portals == 0 then return mw.getCurrentFrame():expandTemplate({ title = 'avviso', args = { tipo = 'importante', testo= novalid_parameter[(#bad_portals == 0 and 1) or 2] } }) .. get_error_category() end -- ordina alfabeticamente i nomi table.sort(portals, function(a, b) return a.ucname < b.ucname end) local reply = { '<table class="noprint" style="width:100%;>'} -- Se un solo portale valido tratto a parte if #portals == 1 then local ucname = portals[1].ucname dump(reply, '<tr><td>', mw.getCurrentFrame():expandTemplate({ title = 'Occhiello', args = { icona = portals[1].ucname, titolo = mw.ustring.format('[[Portale:%s|Portale %s]]', ucname, ucname), frase = single_portal[ucname] or mw.ustring.format('accedi alle voci di Wikipedia che trattano di %s', portals[1].name) } }), '</tr></td>') else -- da 2 a 6 portali -- genero tutti gli occhielli di collegamento in una lista local text = {} for _,portal in ipairs(portals) do text[#text+1] = mw.getCurrentFrame():expandTemplate({ title = 'Occhiello', args = { icona = portal.ucname, titolo = mw.ustring.format('[[Portale:%s|Portale %s]]', portal.ucname, portal.ucname) } }) end -- carica gli occhielli generati nella tabella di layout dump(reply, mw.ustring.format(row_portals[#portals], unpack(text))) end dump(reply, '</table>') -- aggiunge i messaggi di errore per portali non esistenti if #bad_portals > 0 then if #bad_portals == 1 then dump(errors_msg, mw.ustring.format('Il portale %s non esiste', bad_portals[1])) else dump(errors_msg, mw.ustring.format('I portali: %s non esistono', mw.text.listToText(bad_portals) )) end end for pos, msg in ipairs(errors_msg) do errors_msg[pos] = mw.ustring.format('<strong class="error">%s</strong>', msg) end local error_msg = table.concat(errors_msg, '<br />') if #errors_msg > 0 then error_msg = error_msg .. get_error_category() end return table.concat(reply) .. error_msg end return p