Modulo:Vedi anche/sandbox

Versione del 12 mag 2015 alle 10:11 di Rotpunkt (discussione | contributi) (Nuova sandbox)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
--[[
* Modulo che implementa il template Vedi anche.
]]

require('Modulo:No globals')

local p = {}

-- Parsifica un argomento del template (rappresenta il titolo di una pagina) e ne ritorna il wikilink.
local function parseArg(arg)
	local dest, count
	
	-- 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 "'''[[" .. dest .. arg .. "]]'''"
end

-- Costruisce l'HTML per contenere i wikilink alle pagine.
local function buildHTML(wikitext)
	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('noprint')
		:css(tableStyle)
		:tag('tr')
			:tag('td')
				:css('padding', '0 .5em')
				:wikitext('[[File:Exquisite-kfind.png|20px|class=noviewer]]')
				:done()
			:tag('td')
				:css('width', '100%')
				:wikitext("''Lo stesso argomento in dettaglio: " .. wikitext  .. "''.")
				:done()

	return tostring(tableNode)	
end

-- entry-point per {{Vedi anche}}
function p.main(frame)
	local args = {}
	local cat

	for _, val in ipairs(frame:getParent().args) do
		table.insert(args, parseArg(val))
	end

	-- se presente l'obsoleto parametro 'sezione' categorizza la voce (solo nel namespace principale)
	cat = (mw.title.getCurrentTitle().namespace == 0 and frame:getParent().args.sezione) and
		  '[[Categoria:Vedi anche con parametro sezione]]' or ''

	return buildHTML(mw.text.listToText(args, ', ', ' e ')) .. cat
end

return p