Questa pagina è protetta dallo spostamento
Questa pagina è semiprotetta. Può essere modificata solo da utenti registrati

Modulo:Quickbar

Da Wikivoyage.
Jump to navigation Jump to search

Il modulo Quickbar si occupa di generare il riquadro informativo che compare a lato di ogni articolo tramite il template {{Quickbar}}.

Utilizza i seguenti moduli:



local quickbar = {}
local getArgs = require('Module:Arguments').getArgs

local function is_defined(s)
	if s and s ~= '' then return s end
	return nil
end

function quickbar.Quickbar_header ( frame )
	args = getArgs(frame)
	if is_defined(args) and is_defined(args[1]) then
		local output = mw.html.create('tr')
		output
			:tag('td')
				:attr('colspan', is_defined(args['colspan']) or '2')
				:addClass('qbHeader')
				:wikitext(args[1] or '')
		return tostring(output)
	end
	return nil
end

function quickbar.Quickbar_site ( frame )
	-- Assumo la chiamata mediante  #invoke, quindi usa gli argomenti passati al template invocante.
	args = getArgs(frame)
	if is_defined(args) and is_defined(args[1]) and is_defined(args[2]) then
		return quickbar.Quickbar_header{'['..args[2]..' <small>'..args[1]..'</small>]'}
	end
	return nil
end

function quickbar.Quickbar_item ( frame )
	args = getArgs(frame)
	if is_defined(args) and is_defined(args[1]) and is_defined(args[2]) then
		local output = mw.html.create('tr')
		output
			:tag('th')
				:addClass('qbRowHeader')
				:wikitext(args['heading'] or args[1] or '')
				:done()
			:tag('td')
				:addClass('printNoLink qbRowValue')
				:wikitext(args['value'] or args[2] or '')
		return tostring(output)
	end
	return nil
end

function quickbar.Quickbar_image ( frame )  
	args = getArgs(frame)
	if not is_defined(args) then return nil end
	local heading = mw.html.create('')
	if is_defined(args['heading']) then
		heading
			:tag('div')
				:addClass('qbHeader')
				:wikitext(args['heading'])
				:done()
	end
	local output = mw.html.create('tr')
	output
		:tag('td')
			:attr('colspan', is_defined(args['colspan']) or '2')
			:addClass('qbImageCell')
			:node(heading)
			:tag('div')
				:addClass('qbImage')
				:wikitext(args['image'] or '')
	return tostring(output)
end

function quickbar.coa_and_flag ( frame )
	local Wikibase = require('Module:Wikibase')
	local stemma = Wikibase.stemma()
	local stemma_titolo = Wikibase.stemma_titolo()
	local wikistemma = '[[File:'..stemma..'|70x70px|center|'..stemma_titolo..']]'
	local bandiera = Wikibase.bandiera()
	local bandiera_titolo = Wikibase.bandiera_titolo()
	local wikibandiera = '[[File:'..bandiera..'|70x70px|center|border|'..bandiera_titolo..']]'
	--Mostra stemma e bandiera affiancate quando entrambe presenti, o il solo stemma se la bandiera è mancante
	if is_defined(stemma) then
		if is_defined(bandiera) then
			return quickbar.Quickbar_image{
				heading='Stemma e Bandiera',
				image='<table width="100%"><tr><td witdh="50%">'..wikistemma..'</td><td witdh="50%">'..wikibandiera..'</td></tr></table>'
			}
		else
			return quickbar.Quickbar_image{
				heading='Stemma',
				image=wikistemma
			}
		end
	--Mostra la sola bandiera quando lo stemma è mancante
	elseif is_defined(bandiera) then
		return quickbar.Quickbar_image{
			heading='Bandiera',
			image=wikibandiera
		}
	end
	return nil
end

function quickbar.currency ( frame )
	args = getArgs(frame)
	if is_defined(args) and is_defined(args[1]) then
		return args[1]
	end
	local mWikidata = require('Module:Wikidata')
	local nome = mWikidata._getProperty({ 'P38', n = 1 })
	if is_defined(nome) then
		nome = nome:gsub("^%l", string.upper)
	else
		return nil
	end
	local codice = mWikidata._getProperty({ 'P498', n = 1, from = mWikidata._getProperty({ 'P38', n = 1, formatting = 'raw' }) })
	if is_defined(codice) and (codice ~= "''nessun valore''") then
		return nome .. ' (' .. codice .. ') '
	else
		return nome
	end
end

function quickbar.capital ( frame )
	args = getArgs(frame)
	if is_defined(args) and is_defined(args[1]) then
		return args[1]
	end
	local mWikidata = require('Module:Wikidata')
	local capitale = mWikidata._getProperty({ 'P36', n = 1 })
	if is_defined(capitale) then
		return capitale
	else
		return nil
	end
end

function quickbar.area ( frame )
	args = getArgs(frame)
	local formattedNum = require('Modulo:Formatnum')
	if is_defined(args) and is_defined(args[1]) then
		return args[1]
	end
	local mWikidata = require('Module:Wikidata')
	local area = mWikidata._getProperty({ 'P2046', n = 1 })
	if is_defined(area) then
		local prec = 0
		if tonumber(area) < 1000 then prec = 2 end
		return string.gsub( string.gsub( formattedNum.main({area, prec}), "(,%d-)0+$", "%1"), "(,)$", "") .. ' km²'
	else
		return nil
	end
end

function quickbar.UTC_Format ( frame )
	return (((frame[1]:gsub(":00","")):gsub("±00","")):gsub("−","-")):gsub("([%+%-])0","%1")
end

function quickbar.UTC ( frame )
	args = getArgs(frame)
	if is_defined(args) and is_defined(args.UTC) then
		return args.UTC
	end
	local mWikidata = require('Module:Wikidata')
	local qconfig = mw.loadData( 'Modulo:Quickbar/Configurazione');
	local UTC_data = mWikidata._getProperty({'P421', qualifier='P1264', qualifiervalue='Q1777301'}, true)
	if UTC_data == nil or #UTC_data == 0 then
		UTC_data = mWikidata._getProperty({'P421'}, true)
	end
	if UTC_data == nil then
		return ''
	end
	for index, value in ipairs(UTC_data) do
		if qconfig.UTC[value] then
			UTC_data[index] = qconfig.UTC[value]
		end
	end
	if #UTC_data == 1 then
		if string.match(UTC_data[1], "^UTC") then
			UTC_data[1] = quickbar.UTC_Format({UTC_data[1]})
			return UTC_data[1]
		else
			return ''			
		end
	end
	if #UTC_data > 1 then
		local UTC_first = UTC_data[1]:match('^UTC ?(.*)') or UTC_data[1]
		UTC_first = quickbar.UTC_Format({UTC_first})
		local UTC_last = UTC_data[#UTC_data]:match('^UTC ?(.*)') or UTC_data[#UTC_data]
		UTC_last = quickbar.UTC_Format({UTC_last})
		return 'UTC da ' .. UTC_first .. ' a ' .. UTC_last
	end
	return ''
end
 
return quickbar