Modulo:Sommario

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

La documentazione per questo modulo può essere creata in Modulo:Sommario/man

--[=[###########################################################################
					 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

local function ottieniLinkCopertina(titolo)
	return {
		exists = titleExists(titolo .. '/Copertina'),
		link = '[[' .. titolo .. '/Copertina|Copertina]]'
	}
end

local function ottieniLinkBibliografia(titolo)
	if titleExists(titolo .. '/Bibliografia') then
		return '[[' .. titolo .. '/Bibliografia|Bibliografia]]'
	end
end

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

local function ottieniLinkPDF(titolo)
	return {
		exists = titleExists('File:'..titolo .. '.pdf'),
		link = '[[:File:'..titolo .. '.pdf|versione in PDF]] '
	}
end

local function ottieniLinkStampa(titolo)
	return {
		exists = titleExists(''..titolo .. '/Versione stampabile'),
		link = '[['..titolo .. '/Versione stampabile|versione stampabile]]'
	}
end

local function ottieniUrlModifica(args)
	local template = args.template or args.titolo
	return tostring( mw.uri.fullUrl( 'Template:' .. template, {action = 'edit'} ) )
end

-- MESSAGGIO DI ERRORE PER TEMPLATE SENZA CONTENUTO
local function ErrorMSG(args)
	return '<strong class="error">È necessario inserire il parametro "contenuto" con la lista dei moduli</strong>'.. categorizza('Sommario senza contenuto')
	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
	local contenuto = args.contenuto or ErrorMSG(args)
	local categoria = args.categoria or titolo

	-- DATI STILE DELLA TABELLA
	local larghezza = args.larghezza or '250px'
	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
#############################################################################]=]

-- 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>[[Image:Nuvola mimetypes pdf.png|20px]] ' .. LinkPDF.link .. ''
	else
		if args.pdf == '' or args.pdf == nil then
		LinkPDF = ''
	else
	 	LinkPDF = '<hr>[[Image: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
#############################################################################]=]

	tabella = '<div style="width:'..larghezza..';" class="sommario-v-main">\n'
	tabella = tabella .. '<div class="sommario-v-header h-'..coloreTabella..'">\n'
	tabella = tabella .. '<p class="sommario-v-title">\'\'\'[['.. titolo ..']]\'\'\'</p>\n'
	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 .. '</div>\n'
	tabella = tabella .. '<div class="sommario-v-footer c-'..coloreTabella..'">\n'
	tabella = tabella .. ''..InputBox.. '</div></div>'
	return tabella 

end

--[=[###########################################################################
						 FUNZIONE PER TEMPLATE ORIZZONTALE
#############################################################################]=]
function p.Orizzontale(frame)
	local args = getArgs(frame)
	local titolo = args.titolo
	local contenuto = args.contenuto or ErrorMSG(args)
	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

	local html = (
		'<div class="noprint sommario-o-main">' ..
		'<div class="sommario-v-header h-'..coloreTabella..'">' ..
		'<div class="sommario-v-title">' ..
		"'''[[" .. titolo .. "]]'''" ..
		'</div>' ..
		"'''Sommario'''<br/>" ..
		'<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

return p