--[[
* Modulo che implementa i template {{Vedi anche}} e {{Vedi anche sezione}}.
]]
require('Modulo:No globals')
-- Parsifica un argomento del template (rappresenta il titolo di una pagina) e ne restituisce il wikilink.
--
-- @param {string} arg
-- @return {string}
local function parseArg(arg)
local dest, count
-- restituisce errore con wikilink a categorie
if arg:match('^%s*:%s*[Cc][Aa][Tt]') then
return '<span class="error">(usare il [[Template:Vedi categoria]])</span>'
end
-- rimuove eventuali pipe inserite tramite {{!}}
arg = arg:match('(.*)|') or arg
-- sostituisce le HTML entity (per esempio ' generato da {{PAGENAME}} quando il titolo contiene l'apostrofo)
arg = mw.text.decode(arg)
-- sostituisce # con §, se trovato crea un piped wikilink
dest = arg
arg, count = arg:gsub('#', ' § ')
dest = count == 1 and (dest .. '|') or ''
return string.format("'''[[%s%s]]'''", dest, arg)
end
-- Costruisce l'HTML per contenere i wikilink alle pagine.
--
-- @param {string} wikitext
-- @param {boolean} withNoprint
-- @return {string}
local function buildHTML(wikitext, withNoprint)
local tableNode = mw.html.create('table')
tableNode
:addClass('vedi-anche')
:addClass(withNoprint and 'noprint' or nil)
:tag('tr')
:tag('td')
:wikitext('[[File:Magnifying glass icon mgx2.svg|20px|class=noviewer|link=]]')
:done()
:tag('td')
:wikitext(string.format("''Lo stesso argomento in dettaglio: %s''.", wikitext))
:done()
return tostring(tableNode)
end
-- Carica il CSS via TemplateStyles
local function loadCSS(frame)
local styles = 'Modulo:Vedi anche/sandbox/styles.css'
return frame:extensionTag{
name = 'templatestyles',
args = {src = styles}
}
end
-- =============================================================================
-- Funzioni esportate
-- =============================================================================
local p = {}
-- Funzione per il template {{Vedi anche sezione}}.
function p.sezione(frame)
local arg = frame:getParent().args[1]
local wlink = arg and string.format("'''[[#%s|%s]]'''", arg, arg) or ''
return loadCSS(frame) .. buildHTML('sezione ' .. wlink)
end
-- Funzione per il template {{Vedi anche}}.
function p.main(frame)
local lastArg, conjunction
local args = {}
for _, val in ipairs(frame:getParent().args) do
if mw.text.trim(val) ~= '' then
table.insert(args, parseArg(val))
lastArg = val
end
end
if #args > 1 and lastArg then
conjunction = mw.ustring.lower(lastArg:sub(1, 1)) == 'e' and 'ed' or 'e'
conjunction = ' ' .. conjunction .. ' '
end
return loadCSS(frame) .. buildHTML(mw.text.listToText(args, ', ', conjunction), true)
end
return p