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

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')
	local extraClasses = args['class'] or ''
	if #extraClasses > 0 then extraClasses = ' '.. extraClasses  end
	output
		:tag('td')
			:attr('colspan', is_defined(args['colspan']) or '2')
			:addClass('qbImageCell')
			:node(heading)
			:tag('div')
				:addClass('qbImage' .. extraClasses)
				: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='<div width="100%"><div style="display:inline-block;width: 50%;">'..wikistemma..'</div><div style="display:inline-block;width: 50%;">'..wikibandiera..'</div></div>'
			}
		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)
	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( require('Modulo:Formatnum it').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

-- -- GESTISCO MAPPA DI LOCALIZZAZIONE --

-- Estrai latitudine e longitudine, preferendo quelli passati dall'utente
local function fetch_coords(args)
    local wikibase = require('Modulo:Wikibase')
    local latitude, longitude

    -- User provided
    if is_defined(args['lat']) or is_defined(args['long']) then
        -- If any , use all of them
        latitude = args['lat']
        longitude = args['long']
    else
        -- If none,  all from wikidata
        latitude = wikibase.latitudine()
        longitude = wikibase.longitudine()
    end

    -- Final check
    latitude = is_defined(latitude) and latitude or ''
    longitude = is_defined(longitude) and longitude or ''

    return latitude, longitude
end

-- Determina la mappa da usare
local function determine_map(args)
    local map = args['map']
    if is_defined(map) then
        return string.lower(map)
    else
        local wdGetProperty = require('Modulo:Wikidata')._getProperty
        local countryId = wdGetProperty({ 'P17', n = 1, formatting = 'raw' })
        local iso_code = wdGetProperty({ 'P297', n = 1, from = countryId })
        return string.lower(iso_code)  -- Ensure lowercase
    end
end

-- Genera la mappa di localizzazione usata nel quickbar (via template quickbar image)
function quickbar.localizzazione(frame)
	local args = getArgs(frame) 

    local latitude, longitude = fetch_coords(args)
    local iso_code = determine_map(args)
    local label = args['nome'] or mw.title.getCurrentTitle().text
    
    if latitude ~= '' and longitude ~= '' and iso_code ~= '' then
    	
    	-- Gestisco i parametri per il modulo Location map
    	local locMap = require('Modulo:Location map').locationMap
    	local locMapFrame = {}
    	locMapFrame.args = {
	    	map   = iso_code,
			lat   = tonumber(latitude),
			long  = tonumber(longitude),
			name  = label,
			label = "'''"  .. label .. "'''",
			width = 250
    	}
        
        -- Creo il Quickbar image
        local quickbarImageArgs = {
            heading = 'Posizione',
            image = locMap( locMapFrame ),
            class = 'dFlex',
        }
        
    	return quickbar.Quickbar_image( quickbarImageArgs )
    end
    return ''
end
 
return quickbar