[go: up one dir, main page]

Vai al contenuto

Modulo:Prefisso telefonico

Questa pagina è protetta dallo spostamento
Questa pagina è protetta
Da Wikipedia, l'enciclopedia libera.

Modulo che implementa il template {{Prefisso telefonico}}.

Ha una sottopagina di configurazione: Modulo:Prefisso telefonico/Configurazione.


--[[
* Modulo che implementa il template Prefisso telefonico.
]]--

require('strict')

local getArgs = require('Modulo:Arguments').getArgs
local mDelink = require('Modulo:Delink')
local mWikidata = require('Modulo:Wikidata')

-- Configurazione
local cfg = mw.loadData('Modulo:Prefisso telefonico/Configurazione')

local p = {}

local function getWikidataCategory(userval, wdval, from)
	local cat
	-- rimuove eventuali wikilink per il confronto
	userval = userval and mDelink._main({ userval })
	wdval = wdval and mDelink._main({ wdval })
	-- eventuale prefisso nazionale da ignorare nel confronto
	local prefnaz = mWikidata._getProperty({ 'P17', showprop = 'P474', from = from })

	if userval then
		if not wdval then
			cat = 'P473 assente su Wikidata'
		elseif wdval == userval or (prefnaz and userval == string.format('(%s) %s', prefnaz, wdval)) then
			cat = 'P473 uguale su Wikidata'
		else
			cat = 'P473 differente su Wikidata'
		end
	elseif wdval then
		cat = 'P473 letta da Wikidata'
	end
	return string.format('[[Categoria:%s]]', cat)
end

-- Per l'utilizzo da altro modulo
function p._main(args)
	local userval, wdval, cat 

	-- valore utente e wikidata
	userval = args[1]
	wdval = mWikidata._getProperty({ 'P473', from = args.from })

	-- se esiste una voce in itwiki per il valore Wikidata letto, crea il wikilink
	if wdval then
		local iso3166 = mWikidata._getProperty({ 'P17', showprop = 'P298', from = args.from })
		local prefissi = cfg.prefissi[iso3166]
		if prefissi and prefissi[wdval] then
			wdval = prefissi[wdval] == true and 
					string.format('[[%s]]', wdval) or
					string.format('[[%s|%s]]', prefissi[wdval], wdval)
		end
	end

	-- categorie di servizio
	if mw.title.getCurrentTitle().namespace == 0 then
		if not userval and not wdval and args.cat then
			cat = string.format('[[Categoria:%s]]', args.cat)
		elseif userval or wdval then
			cat = getWikidataCategory(userval, wdval, args.from)
		end
	end

	return (userval or wdval or '') .. (cat or '')
end

-- Entry-point per il template {{Prefisso telefonico}}
function p.main(frame)
	return p._main(getArgs(frame, { parentOnly = true }))
end

return p