Modulo Lua che implementa le funzionalità dei template {{Sommario}} e {{Sommario V}}.

Per i dettagli vedi anche Aiuto:Indice di navigazione.


--[=[###########################################################################
					 MODULO Sommario e Sommario V

Codice preso rispettivamente dal [[template:Sommario V]]
						   e dal [[template:Sommario]] 
#############################################################################]=]


-- Moduli necessari
local getArgs = require('Modulo:Arguments').getArgs -- carica i valori dei parametri

-- Funzione della categorizzazione
local function categorizza(cat)
	return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end

-- funzione per rilevare se una determinata pagina esiste o no
local function titleExists(pagina)
	local title = mw.title.new(pagina)
	return title and title.exists
end

-- GESTIONE LINK ALLA COPERTINA
-- fa un controllo automatico e se la pagine esiste la linka
local function ottieniLinkCopertina(titolo)
	return {
		exists = titleExists(titolo .. '/Copertina'),
		link = '[[' .. titolo .. '/Copertina|Copertina]]'
	}
end

-- GESTIONE LINK ALLA BIBLIOGRAFIA
-- fa un controllo automatico e se la pagine esiste la linka
local function ottieniLinkBibliografia(titolo)
	if titleExists(titolo .. '/Bibliografia') then
		return '[[' .. titolo .. '/Bibliografia|Bibliografia]]'
	end
end

-- GESTIONE LINK AI BOLLETTINI
local function ottieniLinkSviluppo(titolo)
	return (
		' [http://it.wikibooks.org/wiki/Speciale:EspandiTemplate?wpInput=%7B%7BTemplate:Bollettino|1=' ..
		mw.uri.encode( titolo, 'WIKI' ) ..
		'%7D%7D#Bollettino Sviluppo]'
	)
end

-- FUNZIONE PER GESTIRE IL LINK ALLA VERSIONE PDF
-- fa il controllo se è caricata una versione PDF locale e la linka automaticamente
local function ottieniLinkPDF(titolo)
	return {
		exists = titleExists('File:'..titolo .. '.pdf'),
		link = '[[:File:'..titolo .. '.pdf|Versione in PDF]] '
	}
end

-- FUNZIONE PER GESTIRE IL LINK ALLA VERSIONE STAMPABILE
local function ottieniLinkStampa(titolo)
	return {
		exists = titleExists(''..titolo .. '/Versione stampabile'),
		link = '[['..titolo .. '/Versione stampabile|versione stampabile]]'
	}
end

-- MESSAGGIO DI ERRORE 
local function ErrorMSG(args, ErrParametro, ErrContenuto)
	return '<strong class="error">È necessario inserire il parametro "'..ErrParametro..'" con '..ErrContenuto..'.</strong>'.. categorizza('Sommario senza '..ErrParametro)
end

-- FUNZIONE PER	GESTIRE IL LINK DI MODIFCA DEL TEMPLATE
local function ottieniUrlModifica(args)
	if args.titolo == '' or args.titolo == nil then
		return ''
	else
		local template = args.template or args.titolo
		return tostring( mw.uri.fullUrl( 'Template:' .. template, {action = 'edit'} ) )
	end
end

-- FUNZIONE PER GESTIRE LA VISUALIZZAZIONE DELL'IMMAGINE
local function IfImmagine (args)
	if args.immagine == '' or args.immagine == nil then
		return ''
	else
		local immagine = args.immagine or ''
		immaginepx = args.immaginepx or '150'
		local immaginepx = mw.ustring.gsub(immaginepx, '[Pp][Xx]', '')

		return '[[File:'..immagine..'|center|'..immaginepx..'px]]'
	end
end
	
local p = {}

--[=[###########################################################################
						 FUNZIONE PER TEMPLATE VERTICALE
#############################################################################]=]
function p.Verticale(frame)

	-- Recupera la varibile per gli argomenti
	local args = getArgs(frame)

	-- ARGOMENTI DI CONTENUTO
	local titolo = args.titolo or ErrorMSG(args,'titolo', 'il titolo del libro')
	local contenuto = args.contenuto or ErrorMSG(args,'contenuto', 'la lista dei moduli')
	local categoria = args.categoria or titolo
	-- gli argomenti relativi all'immagine vengono prelevati dalla funzione IfImmagine
	
	-- DATI STILE DELLA TABELLA
	local larghezza = args.larghezza or ''
	local colore = args.colore
	local coloreTabella = colore or 'azzurro'
	
	-- Gestione delle classi per i colori della tabella
	if colore == 'giallo' or colore == 'beige' then  coloreTabella = colore  end

	-- link esterni
	local LinkSviluppo = ottieniLinkSviluppo(titolo)
	local LinkModifica = ottieniUrlModifica(args) .. ' Modifica&nbsp;il&nbsp;sommario'

	-- Inputbox
	local InputBox = frame:extensionTag{ name = 'inputbox', content = 'type = fulltext\n prefix = '..titolo..'\n width = 24\n searchbuttonlabel = Cerca'  }


--[=[###########################################################################
							 GESTIONE DEI PARAMETRI OPZIONALI
#############################################################################]=]

-- gestione immagine
local IfImmagine = IfImmagine(args)
	
-- Cerca se esiste la biografia e se esiste la mostra
	local LinkBibliografia = ottieniLinkBibliografia(titolo)
	if LinkBibliografia ~= nil then
		LinkBibliografia = LinkBibliografia .. ' <br /> ' --.. categorizza('Libri senza biografia')
	else
		LinkBibliografia = ''
	end

-- Cerca se esiste la copertina e se non esiste categorizza	in "Libri senza copertina"
	local LinkCopertina = ottieniLinkCopertina(titolo)
	if LinkCopertina.exists then
		LinkCopertina = LinkCopertina.link .. ' <br /> '
	else
		if mw.title.getCurrentTitle().prefixedText == 'Template:'..titolo then -- Controlla che siamo nella pagina del sommario (evita categorizzazione eccessiva)
			LinkCopertina = LinkCopertina.link .. ' <br /> ' .. categorizza('Libri senza copertina')
		 else
		 	LinkCopertina = LinkCopertina.link .. ' <br /> '
		end
	end
	
-- Cerca se esiste il PDF e lo mostra
local LinkPDF = ottieniLinkPDF(titolo, frame)
	if LinkPDF.exists then
		LinkPDF = '<hr>[[File:Nuvola mimetypes pdf.png|20px]] ' .. LinkPDF.link .. ''
	else
		if args.pdf == '' or args.pdf == nil then
		LinkPDF = ''
	else
	 	LinkPDF = '<hr>[[File:Nuvola mimetypes pdf.png|20px]] [[:File:'.. args.pdf .. '|versione in PDF]] '
	end
end	

-- Cerca se esiste la versione stampabile e la mostra
local LinkStampa = ottieniLinkStampa(titolo)
	if LinkStampa.exists then
		LinkStampa = '<hr>[[File:Nuvola-inspired File Icons for MediaWiki-fileicon-ps.png|20px]] ' .. LinkStampa.link .. ''
	else
	 	LinkStampa = ''
	end


--[=[###########################################################################
						 CREAZIONE DELLA TABELLA VERTICALE
#############################################################################]=]
if args.titolo == '' or args.titolo == nil then
		return '<strong><b>Template:Sommario V:</b></strong> '.. ErrorMSG(args,'titolo', 'il titolo del libro') 
	else
		
	
	tabella ='<div id="indextop" class="noprint responsive-menu">Indice del libro'
	tabella = tabella .. '<div class="responsive-menu-button">[[#index|&#9776;]]</div></div>' 
	tabella = tabella .. '<div style="width:'..larghezza..';" class="index-content plainlinks noprint" id="index">\n'
	tabella = tabella .. '<div class="sommario-v-header h-'..coloreTabella..' ">\n'
	tabella = tabella .. '<p class="sommario-v-title">\'\'\'[['.. titolo ..']]\'\'\'</p>\n'
	tabella = tabella .. '' ..IfImmagine..''
	tabella = tabella .. ''.. LinkCopertina..' <br />'..LinkBibliografia..' '
	tabella = tabella .. '[[:Categoria:'..categoria..'|Tutti i moduli]] &middot; <span class="plainlinks">'..LinkSviluppo..'</span>\n'
	tabella = tabella .. ''..LinkPDF..''..LinkStampa..''
	tabella = tabella .. '</div>\n'
	tabella = tabella .. '<div class="sommario-v-content c-'..coloreTabella..'">\n'
	tabella = tabella .. ''..contenuto..'\n'
	tabella = tabella .. '<p class="sommario-v-modify plainlinks">['..LinkModifica..']</p>\n'
	tabella = tabella .. '<p class="responsive-menu-close">[[#indextop|chiudi indice]]</p>\n'
	tabella = tabella .. '</div>\n'
	tabella = tabella .. '<div class="sommario-v-footer c-'..coloreTabella..'">\n'
	tabella = tabella .. ''..InputBox.. '</div></div>'
	return tabella 
	end
end

--[=[###########################################################################
						 FUNZIONE PER TEMPLATE ORIZZONTALE
#############################################################################]=]
function p.Orizzontale(frame)
	local args = getArgs(frame)
	local titolo = args.titolo
	local contenuto = args.contenuto or ErrorMSG(args,'contenuto', 'la lista dei moduli')
	local colore = args.colore
	local coloreTabella = colore or 'azzurro'
	
	-- Gestione delle classi per i colori della tabella
	if colore == 'giallo' or colore == 'beige' then  coloreTabella = colore  end
if args.titolo == '' or args.titolo == nil then
		return '<strong><b>Template:Sommario:</b></strong> '.. ErrorMSG(args,'titolo', 'il titolo del libro') 
	else
	
	local html = (
		'<div class="noprint plainlinks sommario-o-main">' ..
		'<div class="sommario-v-header h-'..coloreTabella..'">' ..
		'<div class="sommario-v-title">' ..
		"'''[[" .. titolo .. "]]'''" ..
		'</div>' ..
		'<small>[[:Categoria:' .. titolo .. '|Categoria]] '
	)
	
	local copertina = ottieniLinkCopertina(titolo)
	if copertina.exists then
		html = html .. '&middot; ' .. copertina.link .. ' &middot; '
	else
		if mw.title.getCurrentTitle().prefixedText == 'Template:'..titolo then -- Controlla che siamo nella pagina del sommario (evita categorizzazione eccessiva)
			html = html .. '&middot; ' .. copertina.link .. ' &middot; ' .. categorizza('Libri senza copertina')
		 else
		 	html = html .. '&middot; ' .. copertina.link .. ' &middot; '
		end
	end

	local linkBibliografia = ottieniLinkBibliografia(titolo)
	if linkBibliografia ~= nil then
		html = html .. ' ' .. linkBibliografia .. ' &middot;'
	end
	
-- Cerca se esiste il PDF e lo mostra
local LinkPDF = ottieniLinkPDF(titolo)
	if LinkPDF.exists then
		html = html .. ' ' .. LinkPDF.link .. ' &middot;'
	else
		if args.pdf == '' or args.pdf == nil then
			html = html
		else
			html = html .. '[[:File:'.. args.pdf .. '|versione in PDF]]  &middot;'
		end
	end

-- Cerca se esiste la versione stampabile e la mostra
local LinkStampa = ottieniLinkStampa(titolo)
	if LinkStampa.exists then
		html = html .. ' ' .. LinkStampa.link .. '&middot;'
	end

	html = html .. (
		ottieniLinkSviluppo(titolo) .. ' &middot; ' ..
		' [' .. ottieniUrlModifica(args) .. ' Modifica il template]' ..
		'</small></div>' ..
		'<div class="sommario-footer c-'..coloreTabella..'">' ..
		contenuto ..
		'</div></div>'
	)
	return html
end
end
return p