Modulo:Nota disambigua
Aspetto
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Nota disambigua/man (modifica · cronologia)
Sandbox: Modulo:Nota disambigua/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Nota disambigua/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Nota disambigua/man (modifica · cronologia)
Sandbox: Modulo:Nota disambigua/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Nota disambigua/test (modifica · cronologia · Esegui)
Questo modulo implementa il template {{nota disambigua}}. Richiamarlo nel template con
<includeonly>{{#invoke:Nota disambigua|main}}</includeonly>
--[[
* Modulo che implementa le funzionalità del template {{Nota disambigua}}.
]]
require('strict')
local p = {}
-- Parsifica un argomento del template (rappresenta il titolo di una pagina)
-- e ne ritorna il wikilink.
-- (Adattato da [[Modulo:Vedi anche]])
local function parseArg(arg)
-- trim e rimuove eventuali parentesi preesistenti
arg = arg:match('^%s*%[%[(.-)%]%]%s*$') or arg
-- rimuove eventuali pipe inserite tramite {{!}}
arg = arg:match('(.*)|') or arg
-- sostituisce le HTML entity
arg = mw.text.decode(arg)
return "'''[[" .. arg .. "]]'''"
end
-- Restituisce true se una stringa è nil o contiene solo whitespace
local function isEmpty(s)
return s == nil or s:find('^%s*$')
end
-- Costruisce l'HTML per contenere i wikilink alle pagine.
-- (Adattato da [[Modulo:Vedi anche]])
local function buildHTML(wikitext, with_noprint)
local tableStyle = {
['margin-bottom'] = '.5em',
border = '1px solid #CCC',
['text-align'] = 'left',
['font-size'] = '95%',
background = 'transparent'
}
local tableNode = mw.html.create('table')
tableNode
:addClass(with_noprint and 'noprint' or nil)
:css(tableStyle)
:tag('tr')
:tag('td')
:css('padding', '0 .5em')
:wikitext('[[Immagine:Nota disambigua.svg|18px|link=|alt=bussola]]')
:done()
:tag('td')
:css('width', '100%')
:css('font-style', 'italic')
:wikitext("[[Aiuto:Disambiguazione|Disambiguazione]] – " .. wikitext)
:done()
return tostring(tableNode)
end
-- Entry-point per {{Nota disambigua}}
function p.main(frame)
local pargs = frame:getParent().args
local argDescrizione = pargs["descrizione"] or pargs[1]
local argTitolo = pargs["titolo"] or pargs[2]
local argRedirect = pargs["redirect"] or pargs[3]
local wikitext
local descrizione = ""
local redirect = ""
local titolo = ""
local errorCat = ""
local pagename = mw.title.getCurrentTitle().text -- titolo pagina corrente
-- il template non va inserito nelle pagine che contengono un disambiguante
if pagename:find(' %(') and not pargs["nocat"] then
errorCat = "[[Categoria:Errori di compilazione del template Nota disambigua]]"
end
-- controlla parametro redirect
if not isEmpty(argRedirect) then
redirect = "\"" .. argRedirect .. "\" rimanda qui. "
-- segnala errore se il redirect è uguale al titolo della pagina corrente
if argRedirect:lower() == pagename:lower() and not pargs["nocat"] then
errorCat = "[[Categoria:Errori di compilazione del template Nota disambigua]]"
end
end
-- descrizione
if isEmpty(argDescrizione) then
descrizione = "altri significati" -- default
else
descrizione = argDescrizione
end
local titoli = {} -- elenco di link da inserire
local lastTitolo -- ultimo link (serve l'iniziale per la congiunzione)
local congiunzione -- congiunzione alla fine della lista di link
-- titolo
if not isEmpty(argTitolo) then
titoli[1] = parseArg(argTitolo)
else
-- default
titoli[1] = "'''[[" .. pagename .." (disambigua)]]'''"
end
-- altri link eventuali
local index = 2
local label = "titolo2"
while not isEmpty(pargs[label]) do
titoli[#titoli + 1] = parseArg(pargs[label])
lastTitolo = titoli[#titoli]
index = index + 1
label = "titolo" .. index
end
-- determina congiunzione
if #titoli > 1 and lastTitolo then
-- sub(6, 6) è la prima lettera dopo tripli apici e parentesi quadre
congiunzione = mw.ustring.lower(lastTitolo:sub(6, 6)) == 'e' and 'ed' or 'e'
congiunzione = ' ' .. congiunzione .. ' '
end
-- costruisci lista di link
titolo = mw.text.listToText(titoli, ', ', congiunzione)
wikitext = redirect .. "Se stai cercando " .. descrizione .. ", vedi " .. titolo .. "."
return errorCat .. buildHTML(wikitext, true)
end
return p