Modulo:Interprogetto/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
copia da originale
 
use require('strict') instead of require('Module:No globals')
 
(85 versioni intermedie di 3 utenti non mostrate)
Riga 1:
-- Modulo per implementare le funzionalità di template:Interprogetto
require('strict')
local p = {} -- per l'esportazione delle funzioni del modulo
 
local cfg = {}
local HtmlBuilder = require('Module:HtmlBuilder') -- richiesto per la costruzione del markup html
local root = mw.html.create('') -- radice del markup html
local progetti={} -- dati da usare per la costruzione delle righe dell'elenco di link ai progetti
local rootdebug --= radice{} del-- markupper htmldebug
local debugcategories = {} -- percategorie di errore da debugaggiungere
local errors_msg = {} -- messaggi di errore da aggiungere
 
-- per non usare numeri "magici" nel codice
local function dump(t, ...)
local argscategory_namespace_number = {...}14
 
for _, s in ipairs(args) do
-- ============================================================================================================
table.insert(t, s)
-- Ritorna la stringa se è definita e diversa da stringa vuota, altrimenti nil
end
-- ============================================================================================================
local function is_defined(s)
if s and s ~= '' then
return s
else
return nil
end
end
 
-- ============================================================================================================
-- Aggiunge uno spazio alla stringa se non termina per "'" (apostrofo)
-- ============================================================================================================
local function add_space(s)
if not is_defined(s) then
--ritorna uno spazio se l'ultimo carattere non è un accento
return ''
if mw.ustring.sub(s, -1) == "'" then
elseif mw.ustring.sub(s, -1) == "'" then
return ''
return s
else
else
return ' '
return s .. ' end'
end
end
 
-- ============================================================================================================
local function Link(intext, pos, in_stampa)
-- Aggiunge la categoria "category" alla lista di categorie da aggiungere alla voce
-- Restituisce il link nel caso normale di collegamento (progetto senza interfaccia in lingua)
-- ============================================================================================================
-- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
local function add_category(category)
local p=progetti
if category then
local text=''
categories[category] = true
if intext then
end
if in_stampa then
text = table.concat({'* [[File:', p.icona[pos], '|', p.dimensione_icona[pos], "]] ",
p.messaggio_stampa[pos], "'''", p.base_url[pos],
tostring(mw.uri.localUrl( p.collegamento[pos] )), "'''" })
else
text = table.concat({'* [[File:', p.icona[pos], '|link=', p.prefix[pos], '|',
p.dimensione_icona[pos],'|Collabora a ', p.nome_progetto[pos],
"]]", ' ', "'''[[", p.prefix[pos], '|', p.nome_progetto[pos],
"]]''' contiene ", p.oggetto[pos], ' ', p.lingua[pos],
p.preposizione[pos], add_space(p.preposizione[pos]), p.testo_prima[pos],
"'''[[", p.prefix[pos], p.collegamento[pos], '|',
p.etichetta[pos], "]]'''", p.testo_dopo[pos] })
end
else
text = table.concat({'* [[', p.prefix[pos], p.collegamento[pos], '|', p.nome_leftbar[pos] or p.nome_progetto[pos], ']]'})
end
return text
end
 
-- ============================================================================================================
local function LinkRicette(intext, pos, in_stampa)
-- Aggiunge il messaggio di errore "error_msg" alla lista di messaggi di errore da visualizzare.
-- Restituisce il link per le ricette su wikibook
-- Se viene precisata una categoria di errore la aggiunge alle categorie in cui inserire la voce,
-- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
-- altrimenti inserisce la categoria di errore standard
local p=progetti
-- ============================================================================================================
local text=''
local function add_error(error_msg, category)
if intext then
if in_stampaerror_msg then
errors_msg[#errors_msg+1] = error_msg
text = table.concat({'* [[File:', p.icona[pos], '|', p.dimensione_icona[pos], "]] ",
if category then
p.messaggio_stampa[pos], "'''", p.base_url[pos],
add_category(category)
tostring(mw.uri.localUrl( p.prefix[pos] .. p.collegamento[pos] )), "'''" })
else
add_category('Errori di compilazione del template Interprogetto')
text = table.concat({'* [[File:', p.icona[pos], '|link=', p.prefix[pos], '|', p.dimensione_icona[pos],
end
'|Collabora a ', p.nome_progetto[pos],
end
"]] Il ''[[b:Libro di cucina|Libro di cucina]]'' di '''[[b:|Wikibooks]]''' contiene [[", p.prefix[pos],
p.collegamento[pos], "|ricette]]", " relative a questo argomento." })
end
else
text = table.concat({'* [[', p.prefix[pos], p.collegamento[pos], '|', p.nome_leftbar[pos] or p.nome_progetto[pos], ']]'})
end
return text
end
 
-- ============================================================================================================
-- Ritorna un collegamento di default dato il nome di un progetto, nil in caso di errori
-- ============================================================================================================
local function get_default_collegamento(key_progetto, fullpagename)
if cfg.parameters[key_progetto] then
if cfg.parameters[key_progetto]['collegamento_non_esistente'] then
add_error(cfg.parameters[key_progetto]['collegamento_non_esistente'])
return nil
elseif cfg.parameters[key_progetto].collegamento_default_minuscolo then
return mw.ustring.gsub(fullpagename, '^%u', string.lower)
else
return fullpagename
end
else
return nil
end
end
 
-- ============================================================================================================
local function LinkWithLanguage(intext, pos, in_stampa)
-- Ordina una tabella in funzione della chiave "ordine" degli elementi della tabella
-- Restituisce il link verso progetti con interfaccia in lingua (seleziona automaticamente quella italiana)
-- ============================================================================================================
-- intext vero se è richiesto il link del testo principale, falso per la barra sinistra
local function sort_by_ordine(t1, t2)
local p=progetti
if t1.ordine < t2.ordine or t1.ordine == t2.ordine and t1.lingua < t2.lingua then
local text=''
return true
if intext then
end
if in_stampa then
text = table.concat({'* [[File:', p.icona[pos], '|', p.dimensione_icona[pos], "]] ",
p.messaggio_stampa[pos], "'''", p.base_url[pos],
tostring(mw.uri.localUrl( p.collegamento[pos] )), "'''" })
else
main_page_link=tostring(mw.uri.fullUrl(p.prefix[pos] .. 'Pagina principale', {uselang='it'}))
text = table.concat({'* [[File:', p.icona[pos], '|link=', main_page_link, '|',
p.dimensione_icona[pos], '|Collabora a ', p.nome_progetto[pos],
"]]", ' ', "'''<span class=\"plainlinks\">[",
main_page_link, ' ', p.nome_progetto[pos], "]</span>''' contiene ",
p.oggetto[pos], ' ', p.preposizione[pos], add_space(p.preposizione[pos]),
p.testo_prima[pos], "'''<span class=\"plainlinks\">[",
tostring(mw.uri.fullUrl(p.prefix[pos] .. p.collegamento[pos], {uselang='it'})), ' ',
p.etichetta[pos], "]<span class=\"plainlinks\">'''", p.testo_dopo[pos] })
end
else
text = table.concat({'* [', tostring(mw.uri.fullUrl(p.prefix[pos] .. p.collegamento[pos], {uselang='it'})),
' ', p.nome_leftbar[pos] or p.nome_progetto[pos], ']'})
end
return text
end
 
-- ============================================================================================================
local function LinkIncubator(intext, pos, in_stampa)
-- Classe per gestire la raccolta di informazioni da Wikidata
-- Restituisce il link verso progetti per incubator
-- ============================================================================================================
local p=progetti
local Wikidata_entity = {}
local text=''
local prefix = {
wikipedia = 'Wp',
wiktionary = 'Wt',
wikizionario= 'Wt',
wikibooks= 'Wb',
wikinews= 'Wn',
wikinotizie= 'Wn',
wikiquote= 'Wq',
}
 
function Wikidata_entity:new(ignore_wikidata)
local oggetto = p.oggetto[pos]
-- Carica i dati da Wikidata se esistono
if not prefix[oggetto] then oggetto='wikipedia' end
local self = {}
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', prefix[oggetto],
if not ignore_wikidata then
'/', p.collegamento[pos]}), {uselang='it'}))
self.entity = mw.wikibase.getEntityObject()
if intext then
end
if in_stampa then
setmetatable(self, { __index = Wikidata_entity,
text = table.concat({'* [[File:', p.icona[pos], '|', p.dimensione_icona[pos], "]] ",
__tostring = function(t) return self:__tostring() end })
p.messaggio_stampa[pos], "'''", collegamento, "'''" })
self.collegamenti = {}
else
self.badge = {}
local main_page_incubator=tostring(mw.uri.fullUrl(':incubator:Main_Page/it', {uselang='it'}))
self.from_property_category = {}
local main_page_progetto = ''
self.article_link = {}
if oggetto == 'wikipedia' then
self.lingua = {}
main_page_progetto = '[[Wikipedia]]'
if self.entity then
else
self.etichetta = self.entity:getLabel('it')
main_page_progetto = table.concat({'[[', oggetto, ':|', oggetto:gsub("^%l", string.upper), ']]'})
-- Imposta il corsivo se la pagina su Wikidata ha la proprietà P31 ("Istance of", [[wikidata:Property:P31]])
end
-- con valore corrispondente a un'opera, come definito in cfg.check_opera
self.corsivo = self:hasPropertyValue('P31', cfg.check_opera)
-- Considera disambigua se la pagina su Wikidata ha la proprietà P31 ("Istance of", [[wikidata:Property:P31]])
-- con valore 4167410 ("Wikimedia disambiguation page", [[wikidata:Q4167410]])
self.disambigua = self:hasPropertyValue('P31', '4167410')
-- Controlla se la voce è relativa a una categoria
self.is_category = self:hasPropertyValue('P31', '4167836')
self:loadCollegamenti()
end
return self
end
 
function Wikidata_entity:getClaim(property_id)
text = table.concat({'* [[File:', p.icona[pos], '|link=', main_page_incubator, '|',
if self.entity.claims and
p.dimensione_icona[pos], "|Collabora a Incubator]] '''<span class=\"plainlinks\">[",
self.entity.claims[property_id] and
main_page_incubator, " Incubator]</span>''' contiene un test su ",
self.entity.claims[property_id][1].mainsnak.datavalue and
main_page_progetto, ' ',
self.entity.claims[property_id][1].mainsnak.datavalue.type == 'string' then
p.preposizione[pos], add_space(p.preposizione[pos]),
return self.entity.claims[property_id][1].mainsnak.datavalue.value
'<span class="plainlinks">[', collegamento, ' ', p.etichetta[pos], ']</span>' })
else
end
return nil
else
end
text = table.concat({'* [', collegamento, ' Incubator]'})
end
return text
end
 
function Wikidata_entity:getInterwiki(project, property_language)
function Link_vuoto(intext, pos)
local interwiki = { project }
-- per il parametro notizia, non dovrebbe mai essere chiamato, ma giusto in caso restituisce
if property_language and self.entity.claims and self.entity.claims[property_language] then
-- una stringa vuota
project = project:sub(3)
return ''
for _, claim in ipairs(self.entity.claims[property_language]) do
if claim.mainsnak.datavalue.type == 'wikibase-entityid' then
local entityId = 'Q' .. claim.mainsnak.datavalue.value['numeric-id']
if entityId ~= 'Q652' then
local claims = mw.wikibase.getBestStatements(entityId, 'P424')
local language_code = claims[1] and claims[1].mainsnak.datavalue.value
if language_code then
if project == 'wikisource' and language_code == 'grc' then
language_code = 'el'
end
table.insert(interwiki, language_code .. project)
self.lingua[language_code .. project] = language_code
end
end
end
end
end
return interwiki
end
 
-- ============================================================================================================
-- default_parameter: contiene i valori di default dei parametri
-- Carica collegamenti e badge da Wikidata controllando i progetti elencati in cfg.automatic_link
-- priorità: ordine di priorità in cui visualizzare il link (un numero intero)
-- ============================================================================================================
-- funzione da richiamare per inserire i link
function Wikidata_entity:loadCollegamenti()
-- prefisso_progetto: prefisso da usare per i link del progetto
for key_progetto, progetto in pairs(cfg.automatic_link) do
-- nome_progetto: nome del progetto
-- Carica i collegamenti di un progetto solo se non disambigua o tipo di progetto abilitato in disambigua
-- nome_leftbar: nome da usare per il collegamento nella barra di sinistra (falso se coincide con
if not self.disambigua or cfg.parameters[key_progetto].abilita_in_disambigua then
-- il nome del progetto, altrimenti una stringa, da usare per esempio per wikiricette)
for i, interwiki in ipairs(self:getInterwiki(progetto.interwiki, progetto.property_language)) do
-- logo del progetto: nome del file che contiene il logo del progetto
local sitelink = self.entity:getSitelink(interwiki)
-- dimensioni del logo: dimensioni da usare per il logo
-- Dà sempre precedenza al sitelink se è una categoria
-- oggetto standard: per il contenuto ('opere originali', 'testi o manuali', ecc..).
if sitelink and mw.ustring.find(sitelink, '^Category:') then
-- preposizione standard: da mettere prima dell'etichetta ('di o su', 'relative a questo argomento', ecc..),
-- 'false' disabilita la consultazione della proprietà
-- se è false non viene sostituita
self.from_property_category[key_progetto] = false
-- testo di apertura intorno all'etichetta: stringa vuota o testo da usare immediatamente prima del
end
-- collegamento (usate dal wikizionario per la virgoletta di
local claim
-- apertura e da wikiricette per non inserire niente)
if progetto.property_category and self.from_property_category[key_progetto] ~= false then
-- testo di chiusura intorno all'etichetta: stringa vuota o testo di chiusura da usare immediatamente
claim = self:getClaim(progetto.property_category)
-- dopo il collegamento (usate dal wikizionario per la virgoletta
if claim then
-- di chiusura e da wikiricette per scrivere " relative a questo argomento")
self.collegamenti[key_progetto] = 'Category:' .. claim
-- lingua originale: lingua di un testo linkato (false se non è possibile impostarla, true per
self.from_property_category[key_progetto] = true
-- i progetti per cui si può impostare.
end
-- da usare per i progetti che prevedono l'inserimento di "in xxxxx" tra il nome
end
-- del progetto e l'etichetta standard per il tipo di contenuto)
if sitelink then
if self.from_property_category[key_progetto] then
self.article_link[key_progetto] = sitelink
elseif i > 1 then
local lingua = self.lingua[interwiki]
key_progetto = string.format('%s_%s', key_progetto, lingua)
self.lingua[key_progetto] = lingua
self.collegamenti[key_progetto] = string.format('%s:%s', lingua, sitelink)
else
self.collegamenti[key_progetto] = sitelink
end
if i == 1 and self.entity.sitelinks[interwiki].badges then
local badge_class = {}
local badge_title = {}
for _, badge_quality in ipairs(self.entity.sitelinks[interwiki].badges) do
if cfg.badges[badge_quality] then
badge_class[#badge_class+1] = cfg.badges[badge_quality].class
badge_title[#badge_title+1] = cfg.badges[badge_quality].title
end
end
self.badge[key_progetto] = {}
self.badge[key_progetto].class = table.concat(badge_class, ' ' )
self.badge[key_progetto].title = table.concat(badge_title, ', ' )
end
elseif not self.is_category and progetto.property_gallery and not self.from_property_category[key_progetto] then
claim = self:getClaim(progetto.property_gallery)
self.collegamenti[key_progetto] = claim
end
end
end
end
end
 
-- ============================================================================================================
local default_parameter ={
-- Verifica se una determinata proprietà ha uno dei valori specificati nella lista "values".
wikisource = {1, Link, 'wikisource:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali', 'di o su', '', '', false, "'''Wikisource''' contiene opere originali in inglese: ", 'http://en.wikisource.org'},
-- Riadattata da "hasPropertyValue" su [[wikiquote:it:Modulo:Interprogetto]] a sua volta
s = {2, Link, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
-- riadattata da "instanceof(arg)" su [[wikisource:it:Modulo:Autore]]
s2 = {3, Link, 's:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
-- ============================================================================================================
testo = {4, Link, 's:', 'Wikisource', 'Testo completo', 'Wikisource-logo.svg', '18px', 'il testo completo', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
function Wikidata_entity:hasPropertyValue(propertyId, values)
oldwikisource = {5, Link, 'oldwikisource:', 'Wikisource', false, 'Wikisource-logo.svg', '18px', 'opere originali', 'di o su', '', '', true, "'''Wikisource''' contiene opere originali: ", "http://it.wikisource.org"},
if self.entity.claims and self.entity.claims[propertyId] then
wikiquote = {6, Link, 'wikiquote:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px', 'citazioni', 'di o su', '', '' , false, "'''Wikiquote''' contiene citazioni in inglese: ", "http://en.wikiquote.org"},
for _, claim in ipairs(self.entity.claims[propertyId]) do
q = {7, Link, 'q:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px', 'citazioni', 'di o su', '', '' , true, "'''Wikiquote''' contiene citazioni: ", "http://it.wikiquote.org"},
if claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then
q2= {8, Link, 'q:', 'Wikiquote', false, 'Wikiquote-logo.svg', '18px', 'citazioni', 'di o su', '', '' , true, "'''Wikiquote''' contiene citazioni: ", "http://it.wikiquote.org"},
local datavalue = claim.mainsnak.datavalue
wikibooks = {9, Link, 'wikibooks:', 'Wikibooks', false, 'Wikibooks-logo.svg', '22px', 'testi o manuali', 'su', '', '' , false, "'''Wikibooks''' contiene testi o manuali: ", "http://it.wikibooks.org"},
if datavalue.type == 'wikibase-entityid' and
b = {10, Link, 'b:', 'Wikibooks', false, 'Wikibooks-logo.svg', '22px', 'testi o manuali', 'su', '', '' , false, "'''Wikibooks''' contiene testi o manuali in inglese:", "http://en.wikibooks.org"},
datavalue.value['entity-type'] == 'item' and
ricetta = {11, LinkRicette, 'b:Libro di cucina/Ricette/', 'Wikibooks', 'Ricette', 'Wikibooks-logo.svg', '22px', '', '', '', '' , false, "'''Wikibooks''' contiene la ricetta: ", "http://it.wikibooks.org"},
(type(values) == 'table' and values[tostring(datavalue.value['numeric-id'])]) or
wiktionary = {12, Link, 'wiktionary:', 'Wikizionario', false, 'Wiktionary small.svg', '18px', 'il lemma di dizionario', false, '«', '»', false, "'''Wikizionario''' contiene la voce di dizionario:", "http://it.wiktionary.org"},
values == tostring(datavalue.value['numeric-id']) then
wikt = {13, Link, 'wikt:', 'Wikizionario', false, 'Wiktionary small.svg', '18px', 'il lemma di dizionario', false, '«', '»', false, "'''Wikizionario''' contiene la voce di dizionario in inglese: ", "http://en.wiktionary.org"},
return true
v = {14, Link, 'v:', 'Wikiversità', false, 'Wikiversity-logo-It.svg', '18px', 'informazioni', 'su', '', '', false, "'''Wikiversità''' contiene informazioni: ", "http://it.wikiversity.org"},
end
wikinews = {15, Link, 'wikinews:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', 'notizie di attualità', 'su', '', '', false, "'''Wikinotizie''' contiene notizie di attualità in inglese: ", "http://en.wikinews.org"},
end
n = {16, Link, 'n:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', 'notizie di attualità', 'su', '', '', false, "'''Wikinotizie''' contiene notizie di attualità: ", "http://it.wikinews.org"},
end
commons = {17, LinkWithLanguage, 'commons:', 'Commons', false, 'Commons-logo.svg', '18px', 'immagini o altri file', 'su', '', '', false, "'''Wikimedia Commons''' contiene file multimediali: ", "http://commons.wikimedia.org"},
end
meta = {18, LinkWithLanguage, 'meta:', 'Meta-Wiki', false, 'Wikimedia Community Logo.svg', '18px', 'informazioni', 'su', '', '', false, "'''Meta-Wiki''' contiene informazioni: ", "http://meta.wikimedia.org"},
return false
m = {19, LinkWithLanguage, 'm:', 'Meta-Wiki', false, 'Wikimedia Community Logo.svg', '18px', 'informazioni', 'su', '', '', false, "'''Meta-Wiki''' contiene informazioni: ", "http://meta.wikimedia.org"},
end
wikispecies = {20, LinkWithLanguage, 'wikispecies:', 'Wikispecies', false, 'WikiSpecies notext.svg', '21px', 'informazioni', 'su', '', '', false, "'''Wikispecies''' contiene informazioni: ", "http://species.wikimedia.org"},
-- ============================================================================================================
voy = {21, Link, 'voy:', 'Wikivoyage', false, 'Wikivoyage-Logo-v3-icon.svg', '18px', 'informazioni turistiche', 'su', '', '', false, "'''Wikivoyage''' contiene informazioni turistiche: ", "http://it.wikiwoyage.org"},
-- Fine definizione della classe Wikidata_entity
mw = {22, LinkWithLanguage, 'mw:', 'Mediawiki', false, 'MediaWiki-notext.svg', '21px', 'informazioni', 'su', '', '', false, "'''Mediawiki''' contiene informazioni: ", "http://www.mediawiki.org"},
-- ============================================================================================================
incubator = {23, LinkIncubator, 'incubator:', 'Incubator', false, 'Incubator-notext.svg', '18px', '[[wikipedia]]', 'in', '', '', false, " '''Wikimedia''' Incubator contiene un test: ", "http://incubator.wikimedia.org"},
notizia = {0, Link_vuoto, 'n:', 'Wikinotizie', false, 'Wikinews-logo.svg', '25px', '', '', ': ', '', false, "'''Wikinotizie''' contiene notizie di attualità: ", 'http://it.wikinews.org'},
}
-- nota oldwikisource rimosso, stando a http://toolserver.org/~kolossos/templatetiger/template-parameter.php?template=interprogetto&lang=itwiki non usato
 
-- ============================================================================================================
--tabella link gestiti in automatico se assenti, basandosi su wikidata
-- Classe per gestire i collegamenti interprogetto
--formata da coppie 'nome progetto' (come compare nella tabella sopra) e nome proprietà su wikidata con il link al progetto
-- ============================================================================================================
local automatic_link = {
local Collegamento = {}
voy = {interwiki='itwikivoyage', category=nil },
commons= {interwiki='commonswiki', category=nil },
s= {interwiki='itwikisource', category='Pagine con collegamento automatico a wikisource' }
}
 
function Collegamento:new(key_progetto, args, entity, default)
local check_property = {
-- Crea un collegamento a un progetto, riceve il nome del progetto, gli argomenti da usare per determinare
commons = 'P373'
-- i valori dei vari parametri del collegamento. Si appoggia alla tabella esterna cfg.parameters per i
}
-- valori di default del progetto e alla tabella globale default per i valori di default generali
 
local functionself sort_by_first(t1,= t2){}
setmetatable(self, { __index = Collegamento,
-- per ordinare una tabella in base al valore del primo elemento della tabella
__tostring = function(t) return self:__tostring() end })
if t1[1] < t2[1] then
local default_progetto = cfg.parameters[key_progetto:match('^[^_]+')]
return true
if default_progetto == nil then
end
-- Progetto non riconosciuto
return nil
end
self.collegamento = args[key_progetto]
if not is_defined(self.collegamento) then
-- Collegamento non definito correttamente
return nil
else
self.default_progetto = default_progetto
self.ordine = default_progetto.ordine
self.badge_leftbar = {}
self.badge_leftbar.class = (entity.badge[key_progetto] and entity.badge[key_progetto].class) or ''
self.badge_leftbar.title = (entity.badge[key_progetto] and entity.badge[key_progetto].title) or ''
self.etichetta = is_defined(args[key_progetto .. '_etichetta']) or (default_progetto.etichetta_lower and default.etichetta_lower) or default.etichetta
-- elabora l'oggetto per i testi completi su wikisource quando il collegamento è ricavato da wikidata e il parametro testo_preposizione è compilato
local alias_s_oggetto = key_progetto == 's' and args.testo_preposizione and not args.orig_s and not args.s_preposizione and cfg.parameters['testo'].oggetto
self.oggetto = args[key_progetto .. '_oggetto'] or alias_s_oggetto or default.oggetto or default_progetto.oggetto
if default.frase_unificata or default_progetto.preposizione then
-- consulta il parametro testo_preposizione se il collegamento a wikisource non è manuale
local alias_s_preposizione = key_progetto == 's' and not args.orig_s and args.testo_preposizione
self.preposizione = args[key_progetto .. '_preposizione'] or alias_s_preposizione or default.preposizione or default_progetto.preposizione
else
self.preposizione = ''
end
if default.frase_unificata then
self.testo_prima = ''
self.testo_dopo = ''
else
self.testo_prima = default_progetto.testo_prima
self.testo_dopo = default_progetto.testo_dopo
end
if key_progetto == 'notizia' and is_defined(args.data) then
self.testo_dopo = ' <small>' .. args.data .. '</small>'
end
local lingua = key_progetto == 's_el' and 'lingua greca' or
entity.lingua[key_progetto] and require('Modulo:Linguaggi').get_voce(entity.lingua[key_progetto]) or
args[key_progetto .. '_lingua'] and 'lingua ' .. args[key_progetto .. '_lingua']
if default_progetto.lingua and lingua then
self.lingua = ' in ' .. lingua
else
self.lingua = ''
end
return self
end
end
 
local function RenderLeftBarCollegamento:Link()
local default_progetto = self.default_progetto
-- Crea la barra di sinistra con i link interprogetto
if default_progetto.link == 'Link' then
-- costruisce le righe per la barra di sinistra
return self:Link_text()
-- Apertura del tag div id="interProject" (vedi [[Mediawiki:Monobook.js]] o [[Mediawiki:Vector.js]])
elseif default_progetto.link == 'LinkWithLanguage' then
return self:Link_language()
elseif default_progetto.link == 'LinkRicette' then
return self:Link_ricette()
elseif default_progetto.link == 'LinkIncubator' then
return self:Link_incubator()
end
add_error('Errore interno modulo Interprogetto')
return ''
end
 
function Collegamento:Link_lb()
local leftbar = HtmlBuilder.create('div').attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
local default_progetto = self.default_progetto
for i = 1, #progetti.ordine do
if default_progetto.link == 'Link' then
local pos = progetti.ordine[i][2]
return self:Link_text_lb()
local link =progetti.link[pos]
elseif default_progetto.link == 'LinkWithLanguage' then
leftbar.newline().wikitext(link(false, pos))
return self:Link_language_lb()
if progetti.nome_leftbar[pos] then
elseif default_progetto.link == 'LinkRicette' then
leftbar.wikitext(table.concat({'<br />(', progetti.nome_progetto[pos], ')'}))
return self:Link_text_lb()
end
elseif default_progetto.link == 'LinkIncubator' then
return self:Link_incubator_lb()
end
add_error('Errore interno modulo Interprogetto')
return ''
end
 
function Collegamento:Link_text()
end
local default_progetto = self.default_progetto
root
return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona, "|Collabora a ",
.tag('div')
default_progetto.nome_progetto, "]] [[", default_progetto.prefix, "|", default_progetto.nome_progetto, "]] contiene ",
.attr('id', 'interProject')
self.oggetto, self.lingua, " ", add_space(self.preposizione), self.testo_prima, "'''[[", default_progetto.prefix,
.cssText('display: none; clear: both; border-top: 2px dotted #AAAAAA; margin-top: 2em')
self.collegamento, "|", self.etichetta, "]]'''", self.testo_dopo
.node(leftbar)
end
 
local function RenderLinksInTextCollegamento:Link_text_lb(in_stampa)
local default_progetto = self.default_progetto
-- Scandisce la tabella progetti e produce il codice html per l'elenco puntato
return "[[", default_progetto.prefix, self.collegamento, "|", default_progetto.nome_leftbar or default_progetto.nome_progetto, "]]"
for i = 1, #progetti.ordine do
local pos = progetti.ordine[i][2]
root.newline()
local link=progetti.link[pos]
root.wikitext(link(true, pos, in_stampa))
end
end
 
function p.interprogettoCollegamento:Link_ricette(frame)
local default_progetto = self.default_progetto
return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona,
"|Collabora a ", default_progetto.nome_progetto, "]] Il ''[[b:Libro di cucina|Libro di cucina]]'' di [[b:|Wikibooks]] contiene '''[[",
default_progetto.prefix, self.collegamento, "|ricette]]''' relative a questo argomento"
end
 
function Collegamento:Link_language()
local origArgs
local default_progetto = self.default_progetto
-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
local main_page_link = tostring(mw.uri.fullUrl(default_progetto.prefix, {uselang='it'}))
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
return "* [[File:", default_progetto.icona, "|link=", main_page_link, "|", default_progetto.dimensione_icona, "|Collabora a ",
if frame == mw.getCurrentFrame() then
default_progetto.nome_progetto, "]] <span class=\"plainlinks\">[", main_page_link, " ", default_progetto.nome_progetto,
origArgs = frame:getParent().args
"]</span> contiene ", self.oggetto, " ", add_space(self.preposizione), self.testo_prima,
else
"'''<span class=\"plainlinks\">[", tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
origArgs = frame
" ", self.etichetta, "]</span>'''", self.testo_dopo
end
end
 
function Collegamento:Link_language_lb()
local in_stampa = false
local default_progetto = self.default_progetto
if frame.args['stampa'] then
return "<span class=\"plainlinks\" title=\"", default_progetto.prefix , self.collegamento, "\">[",
in_stampa = true
tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})), " ",
end
default_progetto.nome_leftbar or default_progetto.nome_progetto, "]</span>"
end
 
function Collegamento:Link_incubator()
-- Carico i parametri
local default_progetto = self.default_progetto
local current_page = mw.title.getCurrentTitle()
local current_titleoggetto = current_pageself.fullTextoggetto
if not cfg.prefix_incubator[oggetto] then
local etichetta = origArgs.etichetta
oggetto = default_progetto.oggetto
-- carico i dati da wikidata se esistono
end
local entity = nil
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', cfg.prefix_incubator[oggetto],
if mw.wikibase then
'/', self.collegamento}), {uselang='it'}))
entity = mw.wikibase.getEntity()
local main_page_incubator = tostring(mw.uri.fullUrl('incubator:Incubator:Main Page/it', {uselang='it'}))
end
local main_page_progetto = ''
-- se esiste l'etichetta su wikidata uso questa come etichetta di default dei collegamenti
if (etichetta == nil or etichettaoggetto == 'wikipedia') then
main_page_progetto = '[[Wikipedia]]'
if entity and entity.labels and entity.labels.it and entity.labels.it.value ~= '' then
else
etichetta = mw.ustring.gsub(entity.labels.it.value, '^Categoria:', '') -- Elimino un eventuale "Categoria:" in fronte del nome
main_page_progetto = table.concat({'[[', oggetto, ':it:|', oggetto:gsub('^%l', string.upper), ']]'})
else
end
etichetta = current_page.text
return "* [[File:", default_progetto.icona, "|link=", main_page_incubator, "|", default_progetto.dimensione_icona,
end
"|Collabora a Incubator]] <span class=\"plainlinks\">[", main_page_incubator, " Incubator]</span> contiene un test su ",
end
main_page_progetto, self.lingua, " ", add_space(self.preposizione), "'''<span class=\"plainlinks\">[", collegamento, " ", self.etichetta, "]</span>'''"
end
 
function Collegamento:Link_incubator_lb()
local preposizione = origArgs.preposizione
local default_progetto = cfg.parameters[self.key_progetto]
local oggetto = origArgs.oggetto
local oggetto = self.oggetto
if not cfg.prefix_incubator[oggetto] then
oggetto = default_progetto.oggetto
end
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', cfg.prefix_incubator[oggetto],
'/', self.collegamento}), {uselang='it'}))
return mw.message.newRawMessage("<span class=\"plainlinks\" title=\"$1\">[$2 Incubator]</span>", {self.etichetta, collegamento}):plain()
end
-- ============================================================================================================
-- Fine definizione della classe Collegamento
-- ============================================================================================================
 
-- ============================================================================================================
progetti ={
-- Scandisce la tabella progetti e produce il codice html per l'elenco dei collegamenti nella barra di sinistra
ordine = {},
-- Imposta il tag div id="interProject" (vedi accessorio [[MediaWiki:Gadget-InterProject.js]])
link = {},
-- ============================================================================================================
prefix = {},
local function RenderLeftBar(progetti)
nome_progetto = {},
local leftbar = mw.html.create('ul')
nome_leftbar = {},
for _, progetto in ipairs(progetti) do
collegamento = {},
leftbar
etichetta = {},
:tag('li')
icona = {},
:attr('title', progetto.badge_leftbar.title)
dimensione_icona = {},
:addClass(progetto.badge_leftbar.class)
oggetto = {},
:wikitext(progetto:Link_lb())
preposizione = {},
if progetto.default_progetto.nome_leftbar then
testo_prima = {},
leftbar:wikitext('<br />(', progetto.default_progetto.nome_progetto, ')')
testo_dopo = {},
end
lingua = {},
end
messaggio_stampa = {},
root
base_url = {}
:tag('div')
:attr('id', 'interProject')
:cssText('display: none')
:node(leftbar)
end
 
-- ============================================================================================================
}
-- Scandisce la tabella progetti e produce il codice html per l'elenco puntato dei collegamenti interprogetto
local pos = 0
-- ============================================================================================================
local notizia_presente = false
local function RenderLinksInText(progetti)
local incubator_without_value = false
for _, progetto in ipairs(progetti) do
local add_categories = {}
root:newline()
root:wikitext(progetto:Link())
end
end
 
-- ============================================================================================================
local is_disambigua = false
-- Confronta i collegamenti manuali con quelli automatici e genera le categorie di classificazione nei casi di:
-- - Presenza di link manuale e assenza di link su wikidata
-- - Differenza tra link manuale e link su wikidata
-- - Differenza tra link manuale a categoria e e categoria su wikidata
-- - Presenza di link manuale a categoria e a catagoria su wikidta
-- ============================================================================================================
local function check_with_wikidata(key_progetto, entity, collegamento)
if collegamento == nil then return end -- se non c'è un collegamento manuale ritorna immediatamente
local entity_collegamento = entity.collegamenti[key_progetto]
-- si assicura che il collegamento manuale inizi con la 'C' maiuscola se è una categoria
local collegamento_normalizzato = mw.ustring.gsub(collegamento, '^category:', 'Category:')
local collegamento_is_category = mw.ustring.find(collegamento_normalizzato, '^Category:')
-- Check se il collegamento manuale è una categoria, se il tipo di progetto prevede una proprietà a parte
-- per le categorie e se la sua consultazione non è stata disabilitata
if collegamento_is_category and cfg.automatic_link[key_progetto].property_category and entity.from_property_category[key_progetto] ~= false then
-- se esiste un collegamento su wikidata dalla proprietà per la categoria la confronta con quello manuale
if entity.from_property_category[key_progetto] then
if entity_collegamento ~= collegamento_normalizzato then
add_category(cfg.automatic_link[key_progetto].category_wikidata_category_diff)
end
-- se non esiste un collegamento manuale su wikidata lo marca come assente
else
add_category(cfg.automatic_link[key_progetto].category_wikidata_category_missing)
end
else
local article_link
-- recupera il collegamento automatico alla voce (può essere in entity.article_link[key_progetto] o
-- in entity.collegamento[key_progetto] a seconda del sitelink e della proprietà per le categorie)
if entity.from_property_category[key_progetto] then
article_link = entity.article_link[key_progetto]
else
article_link = entity_collegamento
end
-- Se ha recuperato un valore per article_link lo confronta con quello normalizzato
-- altrimenti aggiunge il tracking di collegamento mancante in wikidata
if article_link then
if article_link ~= collegamento_normalizzato then
add_category(cfg.automatic_link[key_progetto].category_wikidata_diff)
end
else
add_category(cfg.automatic_link[key_progetto].category_wikidata_missing)
end
end
end
 
-- ============================================================================================================
-- Check if the page is a disambiguation page
-- Funzione principale richiamata dal template Interprogetto
-- The costant 4167410 is the wikidata item 'Wikimedia disambiguation page': https://www.wikidata.org/wiki/Q4167410
-- ============================================================================================================
local istance_of = 'p31' -- wikidata property "Istance of", https://www.wikidata.org/wiki/Property:P31
function p.interprogetto(frame)
if entity and entity.claims and entity.claims[istance_of]
and entity.claims[istance_of][0]
and entity.claims[istance_of][0].mainsnak
and entity.claims[istance_of][0].mainsnak.datavalue
and entity.claims[istance_of][0].mainsnak.datavalue.type == 'wikibase-entityid'
and entity.claims[istance_of][0].mainsnak.datavalue.value
and entity.claims[istance_of][0].mainsnak.datavalue.value['entity-type'] == 'item'
and entity.claims[istance_of][0].mainsnak.datavalue.value['numeric-id'] == 4167410 then
is_disambigua = true
end
-- carico tutti i dati in una nuova tabella e controllo se i valori per i link presenti nella
-- tabella automatic_link sono definiti, in caso contrario provo a leggere il link da wikidata
local automatic_found = {}
for key, _ in pairs(automatic_link) do automatic_found[key] = false end
local newArgs = {}
for k, value in pairs(origArgs) do
if automatic_link[k] then
automatic_found[k] = true
elseif (tonumber(k) and automatic_link[mw.text.trim(value)]) then
automatic_found[mw.text.trim(value)] = true
end
-- Se è disambigua registro solo i valori i link al wikizionario
if k == 'wikt' or value=='wikt' or not(is_disambigua) then
newArgs[k] = value
end
end
 
for key, found in pairs(automatic_found) do
if not found then
if not is_disambigua and entity then
if entity.sitelinks and entity.sitelinks[automatic_link[key].interwiki] then
newArgs[key] = entity.sitelinks[automatic_link[key].interwiki].title
if automatic_link[key].category then
add_categories[#add_categories+1] = automatic_link[key].category
end
elseif check_property[key] and entity.claims and entity.claims[check_property[key]]
and entity.claims[check_property[key]][0]
and entity.claims[check_property[key]][0].mainsnak
and entity.claims[check_property[key]][0].mainsnak.datavalue
and entity.claims[check_property[key]][0].mainsnak.datavalue.type == 'string' then
newArgs[key] = 'Category:' .. entity.claims[check_property[key]][0].mainsnak.datavalue.value
end
end
end
end
 
-- Scandisco tutti gli argomenti per costruire una tabella in cui ad ogni riga corrisponde un link
-- a un altro progetto con le opzioni che sono state settate per quel progetto
for k, collegamento in pairs(newArgs) do
-- controlla se è un parametro posizionale e in questo caso usa il suo valore come nome del
-- progetto a cui puntare, con pagina corrispondente a quella della pagina corrente
-- in cui è inserito il template
if tonumber(k) then
k = mw.text.trim(collegamento) -- elimino eventuali spazi iniziali e finali
if k == 'incubator' then
k = ''
incubator_without_value = true -- se incubator non è valorizzato loggo l'errore
else
collegamento = current_title
end
end
if collegamento == '' then collegamento = current_title end
-- se k corrisponde a un progetto inserito in default_parameter aggiungo una riga alla tabella
-- progetti con i parametri da usare per visualizzare i collegamenti
if default_parameter[k] then
pos = pos+1
progetti.ordine[pos] = {default_parameter[k][1], pos}
progetti.link[pos] = default_parameter[k][2]
progetti.prefix[pos] = default_parameter[k][3]
progetti.nome_progetto[pos] = default_parameter[k][4]
progetti.nome_leftbar[pos] = default_parameter[k][5]
progetti.collegamento[pos] = collegamento
progetti.etichetta[pos] = newArgs[k .. '_etichetta'] or etichetta
progetti.icona[pos] = default_parameter[k][6]
progetti.dimensione_icona[pos] = default_parameter[k][7]
progetti.oggetto[pos] = newArgs[k .. '_oggetto'] or oggetto or default_parameter[k][8]
if default_parameter[k][9] then
progetti.preposizione[pos] = newArgs[k .. '_preposizione'] or preposizione or default_parameter[k][9]
else
progetti.preposizione[pos] = ''
end
progetti.testo_prima[pos] = default_parameter[k][10]
progetti.testo_dopo[pos] = default_parameter[k][11]
if k=='notizia' then
notizia_presente = true
if newArgs.data then
progetti.testo_dopo[pos] = table.concat({' <small>', newArgs.data, '</small>'})
end
end
if default_parameter[k][12] and newArgs[k ..'_lingua'] then
progetti.lingua[pos] = table.concat({' in lingua ', newArgs[k ..'_lingua'], ' '})
else
progetti.lingua[pos] = ' '
end
progetti.messaggio_stampa[pos] = default_parameter[k][13]
progetti.base_url[pos] = default_parameter[k][14]
end
end
root = HtmlBuilder.create()
if notizia_presente then -- gestisco il parametro "notizia" a parte
if #progetti.ordine>1 then
root.wikitext('<strong class="error">Errore: il parametro "notizia" se presente deve essere unico</strong>[[categoria:Errori del template Interprogetto]]')
else
if in_stampa then
root.wikitext(table.concat({'* [[File:', progetti.icona[1], '|', progetti.dimensione_icona[1],
"]] ", progetti.messaggio_stampa[1], "'''", progetti.base_url[1],
tostring(mw.uri.localUrl(progetti.collegamento[1] )), "'''" }))
else
root.wikitext(table.concat({'* [[File:', progetti.icona[1], '|link=', progetti.prefix[1], '|',
progetti.dimensione_icona[1],'|Collabora a ', progetti.nome_progetto[1],
"]]", " Articolo su '''[[", progetti.prefix[1], progetti.nome_progetto[1], '|',
progetti.nome_progetto[1], "]]''': ", "'''[[", progetti.prefix[1],
progetti.collegamento[1], '|', progetti.collegamento[1], "]]'''", progetti.testo_dopo[1] }))
end
end
else
if #progetti.ordine > 0 then
table.sort(progetti.ordine, sort_by_first)
if not(in_stampa) then RenderLeftBar() end
if not(newArgs[1]) or mw.text.trim(newArgs[1])~= 'nolink' then
RenderLinksInText(in_stampa)
 
-- se chiamata da una sandbox carica la configurazione della sandbox
end
--if nil ~= string.find (frame:getTitle(), 'sandbox', 1, true) then
if #add_categories > 0 then
cfg = mw.loadData('Module:Interprogetto/Configurazione/sandbox')
for _,category in ipairs(add_categories) do
--else
root.wikitext('[[Categoria:' .. category .. ']]')
--cfg = mw.loadData('Module:Interprogetto/Configurazione')
end
--end
end
local origArgs
end
-- ========================================================================================================
end
-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
if incubator_without_value then
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
root.wikitext('<strong class="error">Errore: il parametro "incubator" deve essere valorizzato</strong>[[categoria:Errori del template Interprogetto]]')
-- ========================================================================================================
end
if frame == mw.getCurrentFrame() then
return tostring(root)
origArgs = frame:getParent().args
else
origArgs = frame
end
-- Tabella con i parametri di default valorizzati
local default = {}
-- ========================================================================================================
-- Carica il nome della pagina corrente
-- ========================================================================================================
local current_page = mw.title.getCurrentTitle()
local current_namespace = current_page.namespace
local current_pagename = current_page.text
-- Per i namespace usa il nome canonico (inglese) per non avere differenze tra progetti:
-- esempio: Utente/User, Categoria/Category, ma anche Wikiquote/Wikipedia (Project), ecc.
if current_namespace ~= 0 then
default.current_fullpagename = mw.site.namespaces[current_namespace].canonicalName .. ':' .. current_pagename
else
default.current_fullpagename = current_pagename
end
-- ========================================================================================================
-- Carica i dati da Wikidata nell'oggetto "entity"
-- ========================================================================================================
local ignore_wikidata = false
local nowikidata = origArgs.nowikidata and origArgs.nowikidata:lower()
if nowikidata == 's' or nowikidata == 'sì' or nowikidata == 'si' then
ignore_wikidata = true
end
local entity = Wikidata_entity:new(ignore_wikidata)
-- ========================================================================================================
-- Calcola l'etichetta di default per i collegamenti, in ordine di priorità:
-- 1) Se è definita l'etichetta in lingua italiana su Wikidata usa questa (eliminando un eventuale
-- "Categoria:" di fronte alla voce)
-- 2) Altrimenti usa il nome della pagina corrente, eliminando un'eventuale disambigua in coda alla voce,
-- e definisce etichetta_lower come il nome della voce con iniziale minuscola.
-- Se la voce è segnalata come opera su Wikidata allora l'etichetta è in corsivo (senza iniziale minuscola)
-- ========================================================================================================
if is_defined(origArgs.etichetta) then
default.etichetta = origArgs.etichetta
else
if entity.etichetta then
-- Elimina un eventuale "Categoria:" in fronte del nome
default.etichetta = mw.ustring.gsub(entity.etichetta, '^Categoria:', '')
else
-- Elimina un'eventuale disambigua dal nome
default.etichetta = mw.ustring.gsub(current_pagename, ' %(.*%)$', '')
if current_namespace == 0 then
default.etichetta_lower = mw.ustring.gsub(default.etichetta, '^%u', string.lower)
end
end
if entity.corsivo then
default.etichetta = '<span style=\"font-style:italic;\">' .. default.etichetta .. '</span>'
default.etichetta_lower = default.etichetta
end
end
-- ========================================================================================================
-- Calcola preposizione e oggetto di default, modificandoli se il namespace quello delle categorie
-- ========================================================================================================
if current_namespace ~= category_namespace_number then
default.preposizione = origArgs.preposizione
default.oggetto = origArgs.oggetto
else
default.preposizione = origArgs.preposizione or "sull'argomento"
default.oggetto = origArgs.oggetto or "una categoria"
default.frase_unificata = true
end
-- ========================================================================================================
-- Copia i parametri in una nuova tabella, creando coppie progetto/collegamento per i parametri posizionali
-- e controllando per parametri duplicati e nomi di progetto non conosciuti
-- ========================================================================================================
local newArgs = {}
local nolink = false
newArgs.orig_s = origArgs.s
for key, value in pairs(origArgs) do
if tonumber(key) then
local key_progetto = mw.text.trim(value)
if cfg.parameters[key_progetto] then
if origArgs[key_progetto] then
add_error('Collegamento a \"' .. value .. '\" inserito sia come parametro posizionale che nominale')
else
if key_progetto == 's' then newArgs.orig_s = key_progetto end
newArgs[key_progetto] = get_default_collegamento(key_progetto, default.current_fullpagename)
end
else
if key == 1 and key_progetto == 'nolink' then
nolink = true
else
add_error('Il parametro \"' .. value .. '\" non corrisponde a nessun progetto riconosciuto dal template')
end
end
else
newArgs[key] = value
end
end
-- ========================================================================================================
-- Controlla i collegamenti inseriti manualmente integrandoli eventualmente con quelli presenti in Wikidata.
-- Salta questo passo se c'è un collegamento a "notizia" dato che in questo caso deve essere unico e quindi
-- non deve aggiungere i collegamenti da Wikidata. Inoltre, in caso di "disambigua", salta i progetti non
-- abilitati in disambigua che in ogni caso non devono essere aggiunti
-- ========================================================================================================
if not newArgs.notizia then
-- ====================================================================================================
-- Controlla il collegamento compilato manualmente e quello caricato da Wikidata
-- ====================================================================================================
for key_progetto, collegamento in pairs(newArgs) do
if cfg.parameters[key_progetto] and cfg.automatic_link[key_progetto] and entity.entity then
if not entity.disambigua or cfg.parameters[key_progetto].abilita_in_disambigua then
check_with_wikidata(key_progetto, entity, collegamento)
end
end
end
-- ====================================================================================================
-- Aggiunge il collegamento da Wikidata se non è presente quello compilato manualmente o se rinvia a
-- un progetto in lingua non italiana che non è registrato nella configurazione e non va sovrascritto
-- ====================================================================================================
for key_progetto, collegamento in pairs(entity.collegamenti) do
if not cfg.automatic_link[key_progetto] or not (newArgs[key_progetto] or newArgs[cfg.automatic_link[key_progetto].alias]) then
newArgs[key_progetto] = collegamento
-- Segnala che il collegamento è stato aggiunto da Wikidata
add_category(cfg.automatic_link[key_progetto:match('^[^_]+')].category_wikidata)
end
end
end
-- ========================================================================================================
-- Sulla base della lista di argomenti ripulita costruisce la lista dei collegamenti da inserire
-- ========================================================================================================
local progetti = {}
local collegamento_found = false
for key_progetto, collegamento in pairs(newArgs) do
if cfg.parameters[key_progetto] or entity.collegamenti[key_progetto] then
-- Salta i collegamenti a Wikidata per le voci nel namespace principale eccetto che per la Pagina principale
if key_progetto ~= 'wikidata' or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
local progetto = Collegamento:new(key_progetto, newArgs, entity, default)
if progetto then
collegamento_found = true
-- Se è disambigua registra solo i valori per i progetti abilitati in disambigua
if not entity.disambigua or cfg.parameters[key_progetto] and cfg.parameters[key_progetto].abilita_in_disambigua then
progetti[#progetti+1] = progetto
end
end
end
end
end
table.sort(progetti, sort_by_ordine)
-- ========================================================================================================
-- Genera il codice html
-- ========================================================================================================
if entity.disambigua and #progetti == 0 and collegamento_found then
add_error('Collegamenti non visualizzabili perché la voce è una disambigua su Wikidata',
'Errori di compilazione del template Interprogetto - collegamenti in disambigua')
elseif #progetti == 0 then
--add_error('Template interprogetto vuoto e senza dati da recuperare da Wikidata', 'Errori di compilazione del template Interprogetto - template vuoto')
add_error('', 'Errori di compilazione del template Interprogetto - template vuoto')
else
local nobarra = origArgs.nobarra and origArgs.nobarra:lower()
if nobarra ~= 's' and nobarra ~= 'sì' and nobarra ~= 'si' then
RenderLeftBar(progetti)
end
if not nolink then
RenderLinksInText(progetti)
end
end
-- =================================================================================================================================
-- Nei namespace ammessi inserisce le categorie di segnalazione di errori/avvisi
-- =================================================================================================================================
if cfg.whitelist_category[current_namespace] then
for category, _ in pairs(categories) do
root:wikitext('[[Categoria:' .. category .. ']]')
end
end
-- =================================================================================================================================
-- Aggiunge i messaggi di errore
-- =================================================================================================================================
if #errors_msg > 0 then
if #progetti > 0 then
root:wikitext('\n')
end
root:wikitext('<strong class=\"error\">' .. table.concat(errors_msg, '; ') .. '</strong>')
end
return tostring(root)
end