Info Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Quickfooter/man (modifica · cronologia)
Sandbox: Modulo:Quickfooter/sandbox (modifica · cronologia) · Test: Modulo:Quickfooter/test (modifica · cronologia · Esegui)

Vedi anche


--[[ 	Source script:	https://it.wikivoyage.org/wiki/Modulo:Quickfooter 	Maintainers:		Andyrom75, Nastoshka  	Lazy loads: 	require( 'Module:Indicatore GPX' ).gpx ]] local Wikibase = require( 'Modulo:Wikibase' ) local interprogetto = require( 'Modulo:Interprogetto' ).interprogetto local NS0Cat = require( 'Modulo:NS0Cat' ).NS0CatVal local livello = require( 'Modulo:Livello' ).livello local IsInArticle = ''  local function _isDefined(s) 	return s ~= '' and s end  local function _has_value (tab, val)     for index, value in ipairs(tab) do         if value == val then             return true         end     end     return false end  local function _initTable (tab) 	local tab2 = {}     for key, value in pairs(tab) do     	tab2[key] = _isDefined( value and mw.text.trim( value) )     end     return tab2 end  -- Controlla l'esistenza degli articoli in NS:0 per costruire il breadcrumb local function _ExistIsInCatVal (value, NoCat)     if value and (mw.title.new( value ).exists == true) then     	IsInArticle = value     	return NS0Cat( value )     else     	return NoCat and '' or NS0Cat( value )     end end  -- Controlla l'esistenza di specifiche categorie per aggiungerle all'articolo -- **NOTA** Attualmente non usata: può essere cancellata local function _ExistCatVal (value)     if value and (mw.title.new( 'Categoria:'..value ).exists == true) then      	return NS0Cat( value ) 	end    	return '' end  local function _IsInVal (value)     if value then     	IsInArticle = value     end 	return '' end  local function _IsInCatVal (value)     if value then     	IsInArticle = value 		return NS0Cat( value )     end 	return '' end  local function _Quickfooter(frame) 	local args = _initTable( frame.args ) 	local output = '' 	--Creo la sezione altri progetti con i parametri presi da Wikidata o passati dall'articolo 	local IPargs = { 		nobarra = 's', 		w = _isDefined( args.w ) or _isDefined( Wikibase.itwikilink() ) or nil, 		s = _isDefined( args.s ) or _isDefined( Wikibase.itwikisourcelink() ) or nil, 		q = _isDefined( args.q ) or _isDefined( Wikibase.itwikiquotelink() ) or nil, 		n = _isDefined( args.n ) or _isDefined( Wikibase.itwikinewslink() ) or nil, 		b = _isDefined( args.b ) or _isDefined( Wikibase.itwikibookslink() ) or nil, 		commons = _isDefined( args.commons ) or _isDefined( Wikibase.commonslink() ) or nil 		} 	if IPargs.w or IPargs.s or IPargs.q or IPargs.n or IPargs.b or IPargs.commons then 		output = output .. '== Altri progetti ==\n<div class="interprogetto">' .. interprogetto(IPargs) .. '</div>' 	else 		output = output .. '<br />' 	end  	--Inserisco il cassetto delle nazioni negli articoli continentali 	if args[1] == 'Continente' then 		if mw.title.new( 'Template:' .. mw.title.getCurrentTitle().text ).exists == true then 			output = output .. '<br style="clear: both;" />' .. frame:expandTemplate{ title=mw.title.getCurrentTitle().text } 		end 		output = output .. NS0Cat('Continente')  	--Gestisco le poche casistiche delle sotto-regioni continentali 	elseif args[1] == 'Regione continentale' then 		output = output .. _IsInCatVal(args['Continente']) 			.. _IsInCatVal(args['Continente2']) 			.. _IsInCatVal(args['Regione continentale']) 			.. NS0Cat('Regione continentale') 			.. NS0Cat('Regione')  	--Gestisco gli articoli di tipo Stato 	elseif args[1] == 'Stato' then 		output = output .. '<br style="clear: both;" />' 		if args.Continente then 			output = output .. ((mw.title.new( 'Template:' .. args.Continente  ).exists == true) and frame:expandTemplate{ title=args.Continente  } or '') 				.. _IsInCatVal( args.Continente ) 		end 		if args.Continente2 then 			output = output .. ((mw.title.new( 'Template:' .. args.Continente2 ).exists == true) and frame:expandTemplate{ title=args.Continente2 } or '') 				.. _IsInCatVal( args.Continente2 ) 		end 		output = output .. _IsInCatVal(args['Regione continentale']) 			.. _IsInCatVal(args['Regione continentale2']) 			.. _IsInCatVal(args['Regione continentale3']) 			.. NS0Cat('Stato')  	--Gestisco gli articoli di tipo Regione nazionale 	elseif args[1] == 'Regione nazionale' then 		output = output .. _IsInVal(args['Regione continentale']) 			.. _IsInVal(args['Regione continentale2']) 			.. _IsInVal(args['Regione continentale3']) 			.. _IsInVal(args.Stato) 			.. _IsInVal(args.Stato2) 			.. _IsInVal(args.Stato3) 			.. _ExistIsInCatVal(args['Regione nazionale']) 			.. _ExistIsInCatVal(args['Regione nazionale2']) 			.. _ExistIsInCatVal(args['Regione nazionale3']) 			.. _ExistIsInCatVal(args['Regione nazionale4']) 			.. _ExistIsInCatVal(args['Regione nazionale5']) 			.. _ExistIsInCatVal(args['Regione nazionale6']) 			.. _ExistIsInCatVal(args['Regione nazionale7']) 			.. NS0Cat('Regione nazionale') 			.. NS0Cat('Regione') 			.. ((args.Stato  and NS0Cat(args.Stato  .. ' - le sue regioni')) or '') 			.. ((args.Stato2 and NS0Cat(args.Stato2 .. ' - le sue regioni')) or '') 			.. ((args.Stato3 and NS0Cat(args.Stato3 .. ' - le sue regioni')) or '')  	--Gestisco gli articoli di tipo Città 	elseif args[1] == 'Città' then 		output = output .. _IsInVal(args.Stato) 			.. _IsInVal(args.Stato2) 			.. _IsInVal(args.Stato3) 			.. _ExistIsInCatVal(args['Regione nazionale']) 			.. _ExistIsInCatVal(args['Regione nazionale2']) 			.. _ExistIsInCatVal(args['Regione nazionale3']) 			.. _ExistIsInCatVal(args['Regione nazionale4']) 			.. _ExistIsInCatVal(args['Regione nazionale5']) 			.. _ExistIsInCatVal(args['Regione nazionale6']) 			.. _ExistIsInCatVal(args['Regione nazionale7']) 			.. NS0Cat('Città') 			.. ((args.Stato  and NS0Cat(args.Stato  .. ' - le sue città')) or '') 			.. ((args.Stato2 and NS0Cat(args.Stato2 .. ' - le sue città')) or '') 			.. ((args.Stato3 and NS0Cat(args.Stato3 .. ' - le sue città')) or '') 			.. ((args['Regione nazionale']  and NS0Cat(args['Regione nazionale']  .. ' - le sue città')) or '') 			.. ((args['Regione nazionale2'] and NS0Cat(args['Regione nazionale2'] .. ' - le sue città')) or '') 			.. ((args['Regione nazionale3'] and NS0Cat(args['Regione nazionale3'] .. ' - le sue città')) or '') 			.. ((args['Regione nazionale4'] and NS0Cat(args['Regione nazionale4'] .. ' - le sue città')) or '') 			.. ((args['Regione nazionale5'] and NS0Cat(args['Regione nazionale5'] .. ' - le sue città')) or '') 			.. ((args['Regione nazionale6'] and NS0Cat(args['Regione nazionale6'] .. ' - le sue città')) or '') 			.. ((args['Regione nazionale7'] and NS0Cat(args['Regione nazionale7'] .. ' - le sue città')) or '')  	--Gestisco gli articoli di tipo Distretto 	elseif args[1] == 'Distretto' then 		output = output .. _ExistIsInCatVal(args['Città']) 			.. _ExistIsInCatVal(args.Distretto, true) 			.. _ExistIsInCatVal(args.Distretto2, true) 			.. NS0Cat('Distretto') 			.. ((args['Città'] and NS0Cat(args['Città'] .. ' - i suoi distretti')) or '')  	-- Gestisco articoli di tipo Aeroporto 	elseif args[1] == 'Aeroporto' then 		output = output .. NS0Cat('Aeroporto') 			.. _IsInVal(args['Continente']) 			.. _IsInVal(args['Continente2']) 			.. _IsInVal(args.Stato) 			.. _IsInVal(args.Stato2) 			.. _IsInVal(args.Stato3) 			.. _IsInVal(args['Città']) 			.. _ExistCatVal(args['Città']) 			.. ((args.Stato and NS0Cat(args.Stato .. ' - i suoi aeroporti')) or '') 			.. ((args.Stato2 and NS0Cat(args.Stato2 .. ' - i suoi aeroporti')) or '') 			.. ((args.Stato3 and NS0Cat(args.Stato3 .. ' - i suoi aeroporti')) or '') 	end  	--Limito le categorie a territori geograficamente più pertinenti 	if _has_value({'Mare', 'Lago', 'Insenatura', 'Monte', 'Sito archeologico', 'Parco', 'Itinerario', 'Sentiero'}, args[1]) then 		if not _isDefined(args.Stato) then --Le categorie sovranazionali vengono applicate solo se non è presente il parametro Stato 			output = output .. _IsInCatVal(args['Continente']) 				.. _IsInCatVal(args['Continente2']) 				.. _IsInCatVal(args['Regione continentale']) 				.. _IsInCatVal(args['Regione continentale2']) 				.. _IsInCatVal(args['Regione continentale3']) 		elseif not _isDefined(args['Città']) then --Le categorie sovraurbane vengono applicate solo se non è presente il parametro Città 			output = output .. _IsInCatVal(args.Stato) 				.. _IsInCatVal(args.Stato2) 				.. _IsInCatVal(args.Stato3) 				.. _ExistIsInCatVal(args['Regione nazionale']) 				.. _ExistIsInCatVal(args['Regione nazionale2']) 				.. _ExistIsInCatVal(args['Regione nazionale3']) 				.. _ExistIsInCatVal(args['Regione nazionale4']) 				.. _ExistIsInCatVal(args['Regione nazionale5']) 				.. _ExistIsInCatVal(args['Regione nazionale6']) 				.. _ExistIsInCatVal(args['Regione nazionale7']) 		else 			output = output ..  _ExistIsInCatVal(args['Città']) 		end 	end  	-- Categorizza nella categoria omonima al primo parametro (tipo di Quickfooter) 	if _has_value({'Monte', 'Sito archeologico', 'Parco', 'Itinerario', 'Sentiero'}, args[1]) then 		output = output .. NS0Cat(args[1]) 	end 	if args[1] == 'Tematica' then 		if mw.title.getCurrentTitle().text ~= 'Tematiche turistiche' then IsInArticle = 'Tematiche turistiche' end 		if args.Tema == 'Parchi' or args.Tema == nil then 			output = output .. _IsInCatVal(args['Continente']) 				.. _IsInCatVal(args['Continente2']) 				.. _IsInCatVal(args.Stato) 				.. _IsInCatVal(args.Stato2) 				.. _IsInCatVal(args.Stato3) 				.. _ExistIsInCatVal(args['Regione nazionale'], true) 				.. _ExistIsInCatVal(args['Regione nazionale2'], true) 				.. _ExistIsInCatVal(args['Regione nazionale3'], true) 				.. _ExistIsInCatVal(args['Regione nazionale4'], true) 				.. _ExistIsInCatVal(args['Regione nazionale5'], true) 				.. _ExistIsInCatVal(args['Regione nazionale6'], true) 				.. _ExistIsInCatVal(args['Regione nazionale7'], true) 				.. _ExistIsInCatVal(args['Città']) 		elseif args.Tema == 'Aeroporto' then 			output = output .. NS0Cat('Tematica Aeroporto') -- Temporary, ci servirà per far girare qualche bot e riempire i Quickbar / Quickfooter prima di cancellarla 			 			-- Vecchia categorizzazione 			if args.Stato then 				output = output .. _IsInCatVal( args.Stato ) 				--Genero il template solo negli articoli nazionali, ossia quelli in cui è specificato lo Stato 				if args.Continente  and (mw.title.new( "Template:Aeroporti dell'" .. args.Continente  ).exists == true) then output = output .. frame:expandTemplate{ title="Aeroporti dell'" .. args.Continente  } end 				if args.Continente2 and (mw.title.new( "Template:Aeroporti dell'" .. args.Continente2 ).exists == true) then output = output .. frame:expandTemplate{ title="Aeroporti dell'" .. args.Continente2 } end 			else 				--Creo categoria e breadcrumb continentale solo quando non è specificato lo Stato 				output = output .. _IsInCatVal(args['Continente']) 					.. _IsInCatVal(args['Continente2']) 			end 			output = output .. _ExistIsInCatVal(args['Città']) 		else 			output = output .. frame:expandTemplate{ title='Tematiche' } 		end 	end  	--Aggiungo ad ogni articolo delle categorie supplementari ad esso associate in accordo alla sua tipologia 	if args[1] == 'Itinerario' then 		output = output .. NS0Cat('Itinerario') 			.. ((args.Continente  and NS0Cat(args.Continente  .. ' - i suoi itinerari')) or '') 			.. ((args.Continente2 and NS0Cat(args.Continente2 .. ' - i suoi itinerari')) or '') 			.. ((args.Stato  and NS0Cat(args.Stato  .. ' - i suoi itinerari')) or '') 			.. ((args.Stato2 and NS0Cat(args.Stato2 .. ' - i suoi itinerari')) or '') 			.. ((args.Stato3 and NS0Cat(args.Stato3 .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale']  and NS0Cat(args['Regione nazionale']  .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale2'] and NS0Cat(args['Regione nazionale2'] .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale3'] and NS0Cat(args['Regione nazionale3'] .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale4'] and NS0Cat(args['Regione nazionale4'] .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale5'] and NS0Cat(args['Regione nazionale5'] .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale6'] and NS0Cat(args['Regione nazionale6'] .. ' - i suoi itinerari')) or '') 			.. ((args['Regione nazionale7'] and NS0Cat(args['Regione nazionale7'] .. ' - i suoi itinerari')) or '') 			.. ((args['Città'] and NS0Cat(args['Città'] .. ' - i suoi itinerari')) or '') 			.. ((args.Distretto and NS0Cat(args.Distretto .. ' - i suoi itinerari')) or '') 	elseif args[1] == 'Sentiero' then 		output = output .. NS0Cat('Sentiero') 			.. ((args.Continente  and NS0Cat(args.Continente  .. ' - i suoi sentieri')) or '') 			.. ((args.Continente2 and NS0Cat(args.Continente2 .. ' - i suoi sentieri')) or '') 			.. ((args.Stato  and NS0Cat(args.Stato  .. ' - i suoi sentieri')) or '') 			.. ((args.Stato2 and NS0Cat(args.Stato2 .. ' - i suoi sentieri')) or '') 			.. ((args.Stato3 and NS0Cat(args.Stato3 .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale']  and NS0Cat(args['Regione nazionale']  .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale2'] and NS0Cat(args['Regione nazionale2'] .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale3'] and NS0Cat(args['Regione nazionale3'] .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale4'] and NS0Cat(args['Regione nazionale4'] .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale5'] and NS0Cat(args['Regione nazionale5'] .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale6'] and NS0Cat(args['Regione nazionale6'] .. ' - i suoi sentieri')) or '') 			.. ((args['Regione nazionale7'] and NS0Cat(args['Regione nazionale7'] .. ' - i suoi sentieri')) or '') 	elseif args[1] == 'Sito archeologico' then 		if args.Stato then output = output .. NS0Cat(args.Stato .. ' - i suoi siti archeologici') end 	elseif args[1] == 'Tematica' then 		output = output .. NS0Cat('Tematiche turistiche') 		if args.Tema == 'Parchi' then 			output = output .. NS0Cat('Lista di parchi') 		elseif args.Tema == 'Aeroporto' then 			-- non far nulla, li sposteremo usando il Quickfooter Aeroporto invece che tematica 		elseif args.Tema then 			output = output .. NS0Cat('Quickfooter tematico con tema errato') 		end 	end  	--Aggiungo Template livello quando il parametro è presente per i gruppi di articoli già discussi 	--Per gli altri mostro solo la categoria delle bozze 	if _has_value({'Continente', 'Regione continentale', 'Stato', 'Regione nazionale', 'Città', 'Distretto', 'Parco', 'Sito archeologico', 'Massa d\'acqua', 'Monte', 'Itinerario', 'Sentiero', 'Frasario', 'Tematica'}, args[1]) then 		output = output .. livello( args.Livello, args[1] ) 	elseif _has_value({'Oceano', 'Mare', 'Lago', 'Insenatura'}, args[1]) then 		output = output .. livello( args.Livello, 'Massa d\'acqua' ) 	elseif args[1] == 'UNESCO' then 		--A questi articoli non è associato un livello 	else 		if args.Livello == 1 then 			output = output .. livello( args.Livello, args[1] ) 		end 	end  	--Aggiungo la categoria dell'articolo quando necessaria o in alcuni casi quando già esistente e alimento la categoria 	--che mette in evidenzia gli articoli col parametro tipo compilato in modo errato o con valori non ancora gestiti 	if _has_value({'Continente', 'Regione continentale', 'Stato', 'Regione nazionale'}, args[1]) then 		--Queste tipologie hanno sempre una categoria 		output = output .. NS0Cat(mw.title.getCurrentTitle().text) 	elseif _has_value({'Città', 'Distretto', 'Monte', 'Oceano', 'Mare', 'Lago', 'Insenatura'}, args[1]) then 		--Queste tipologie vengono categorizzate solo se la categoria già esiste 		if mw.title.new( 'Categoria:' .. mw.title.getCurrentTitle().text ).exists == true then 			output = output .. NS0Cat(mw.title.getCurrentTitle().text) 		end 	elseif _has_value({'Parco', 'Sito archeologico', 'Frasario', 'UNESCO', 'Tematica', 'Itinerario', 'Sentiero', 'Aeroporto'}, args[1]) then 		--Queste tipologie non sono mai categorizzate 	else 		output = output .. NS0Cat('Quickfooter con tipo errato') 	end  	--Chiamata ridondante quando è presente un pagebanner quindi escludo tutti quei casi in cui è obbligatorio da modello 	if not _has_value({'Continente', 'Regione continentale', 'Stato', 'Regione nazionale', 'Città', 'Distretto', 'Monte', 		'Oceano', 'Mare', 'Lago', 'Insenatura', 'Parco', 'Sito archeologico', 'Frasario', 'UNESCO', 'Itinerario', 		'Sentiero'}, args[1]) then 		output = output .. require( 'Module:Indicatore GPX' ).gpx() 	end  	frame:callParserFunction( '#IsIn', { IsInArticle } ) 	return output end  --Interfacce del modulo local p = {}  function p.QuickfooterTemplate(frame) 	return _Quickfooter(frame:getParent()) end  function p.QuickfooterInvoke(frame) 	return _Quickfooter(frame) end  function p.QuickfooterModule(frame) 	local args = frame.args 	frame = mw.getCurrentFrame() 	frame.args = args 	return _Quickfooter(frame) end  return p