Modulo:Portale

Da Esopedia, l'Enciclopedia dell'[[Ordine Martinista Antico e Tradizionale|O.M.A.T.]] per gli Iniziati.
Jump to navigation Jump to search

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

[=[%s%s]=],

-- 3 portali

[=[%s%s %s]=],

--4 portali

[=[%s%s %s%s]=],

-- 5 portali

[=[%s %s %s %s %s]=],

--6 portali

[=[%s %s %s %s %s %s]=]

}

-- Stringhe specifiche per alcuni portali, quando questi sono gli unici del template local single_portal = { ['Astronomia'] = "accedi alle voci di Esopedia che trattano di astronomia e astrofisica", ['Chimica'] = "il portale della scienza della composizione, delle proprietà e delle trasformazioni della materia", ['Comunità'] = "entra nella comunità degli autori di Esopedia", ['Oggetti del profondo cielo'] = "accedi alle voci di Esopedia che trattano di oggetti non stellari", ['Portali'] = "accedi ai portali di Esopedia", ['Progetti'] = "partecipa ai progetti di Esopedia", ['Sistema solare'] = "accedi alle voci di Esopedia sugli oggetti del Sistema solare", ['Stelle'] = "accedi alle voci di Esopedia che trattano di stelle e costellazioni", ['Telematica'] = "accedi alle voci di Esopedia 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 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 = { '

'} -- Se un solo portale valido tratto a parte if #portals == 1 then local ucname = portals[1].ucname dump(reply, '') 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', 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, '
', mw.getCurrentFrame():expandTemplate({

title = 'Occhiello', args = { icona = portals[1].ucname, titolo = mw.ustring.format('Portale %s', ucname, ucname), frase = single_portal[ucname] or mw.ustring.format('accedi alle voci di Esopedia che trattano di %s', portals[1].name) }

}), '

')

-- 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('%s', msg) end local error_msg = table.concat(errors_msg, '
') if #errors_msg > 0 then error_msg = error_msg .. get_error_category() end return table.concat(reply) .. error_msg end

return p