Modulo:Itemlist

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

Per come utilizzare questo modulo si veda il manuale dei template Citylist e Destinationlist.


--[[
	Source script:	https://it.wikivoyage.org/wiki/Modulo:Itemlist
	Maintainer:		Andyrom75

	Lazy loads:
	require('Modulo:Avviso').avviso
]]
local Marker = require('Modulo:Marker').MarkerModule

local function _isDefined(s)
	return s ~= '' and s
end

local function _numberedList( t ) 
	local _numbT = {}
	for key, val in pairs(t) do
		if tonumber(key) then
			_numbT[#_numbT+1] = val
		end
	end
	return _numbT
end

function _validateParams( params )
	local validParams = {
		titolo = true,
		nome = true,
		alt = true,
		lat = true,
		long = true,
		descrizione = true,
		immagine = true,
		wikidata = true
	}
	local invalidParams = ''
	for key, _ in pairs( params ) do
		if not validParams[key] then
			invalidParams = invalidParams .. '<b>' .. key ..'</b>; '
		end
	end
	return _isDefined(invalidParams) and ('[[Categoria:Itemlist con errori di compilazione]]<span class="debuginfo" style="display:none;">Sono presenti parametri non gestiti: '.. invalidParams .. '</span>') or ''
end

function _item(frame, tipo)
	local args = frame.args
	local output = ''
	if _isDefined(args.titolo) then
		output = '<b>' .. args.titolo .. '</b>\n'
	end
	local MarkerArgs = {
		counter = tipo or 'listing',
		tipo = tipo or 'listing',
		nome = args.nome,
		lat = args.lat,
		long = args.long,
		immagine = args.immagine,
		wikidata = args.wikidata
	}
	output = output .. '*' .. Marker{ args = MarkerArgs }
	if _isDefined(args.alt) then output = output .. " (" .. args.alt .. ")" end
	if _isDefined(args.descrizione) then output = output .. " &mdash; " .. args.descrizione end
	--Categorizzo le pagine aventi item senza parametro nome
	if not _isDefined( args.nome ) then output = output .. '<span class="debuginfo" style="display:none;">Parametro nome assente</span>[[Categoria:Itemlist con errori di compilazione]]' end
	--Categorizzo le pagine aventi item senza parametro wikidata
	if not _isDefined( args.wikidata ) then output = output .. (mw.title.getCurrentTitle().namespace == 0 and '[[Categoria:Itemlist con errori di compilazione]]' or '') end
	return output .. _validateParams( args ) .. '\n' .. MarkerArgs.tipo 
end

local function _itemlist(frame, listType)
	local args = frame.args
	local output = ''
	local count = 0
	local markerType = (listType == 'citylist') and 'city' or 'vicinity'
	--mi assicuro di avere una lista con solo chiavi numeriche senza duplicati
	local numberedArgs = _numberedList(args) 
	for _, val in ipairs(numberedArgs) do
		if (_ <= 20) and val then
			val, count = string.gsub( val, '\n' .. markerType .. '$', '')
			if count == 0 then
				val, count = string.gsub( val, '\n[^\n]*(.)$', '')
				val = val .. ((count == 0) and '' or '<span class="debuginfo" style="display:none;">Il tipo di elemento non è coerente col tipo di template</span>[[Categoria:Itemlist con errori di compilazione]]')
			end
			output = output .. '\n' .. val
		end
	end
	output = '<div id="' .. listType .. '">' .. output .. '</div>'
	if #numberedArgs > 20 then
		output = require('Modulo:Avviso').avviso{args={tipo = 'stile', testo = 'Il template è pensato per gestire fino a 20 località, le successive non saranno mostrate. Seleziona le più significative eliminando le altre.'}} .. output
		if mw.title.getCurrentTitle().namespace == 0 then
			output = output .. '[[Categoria:Articoli con problemi di stile]][[Categoria:Itemlist con errori di compilazione]]'
		end
	end
	return output
end

local p = {}

function p.cityitemTemplate(frame)
	return _item(frame:getParent(), 'city')
end

function p.cityitem(frame)
	return _item(frame, 'city')
end

function p.destinationitemTemplate(frame)
	return _item(frame:getParent(), 'vicinity')
end

function p.destinationitem(frame)
	return _item(frame, 'vicinity')
end

function p.citylistTemplate(frame)
	return _itemlist(frame:getParent(), 'citylist')
end

function p.citylist(frame)
	return _itemlist(frame, 'citylist')
end

function p.destinationlistTemplate(frame)
	return _itemlist(frame:getParent(), 'destinationlist')
end

function p.destinationlist(frame)
	return _itemlist(frame, 'destinationlist')
end

return p