Modulo:Interprogetto/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
importo modulo corrente
Riga 1:
-- Modulo per implementare le funzionalità di template:Interprogetto
require('Module:No globals')
local p = {} -- per l'esportazione delle funzioni del modulo
 
local cfg = mw.loadData( 'Modulo:Interprogetto/Configurazione' );
local root = mw.html.create('') -- radice del markup html
local debug = {} -- per debug
local categories = {} -- categorie di errore da aggiungere
local errors_msg = {} -- messaggi di errore da aggiungere
 
-- ============================================================================================================
local function dump(t, ...)
-- Ritorna la stringa se è definita e diversa da stringa vuota, altrimenti nil
local args = {...}
-- ============================================================================================================
for _, s in ipairs(args) do
local function is_defined(s)
table.insert(t, 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
if s == nil then return '' end
ifelseif mw.ustring.sub(s, -1) == "'" then
return s
else
Line 30 ⟶ 34:
 
-- ============================================================================================================
-- Aggiunge la categoria "category" alla lista di categorie da aggiungere alla voce
-- ritorna la stringa se è definita e diversa da stringa nulla, altrimenti nil
-- ============================================================================================================
local function is_defined(s)
if s and s ~= '' then return s end
return nil
end
 
-- ============================================================================================================
-- Aggiunge category alla lista di categorie da aggiungere alla voce
-- ============================================================================================================
local function add_category(category)
if category ~= nil then
categories[category] = true
end
Line 47 ⟶ 43:
 
-- ============================================================================================================
-- Aggiunge il messaggio di errore "error_msg" alla lista di messaggi di errore da visualizzare.
-- Se viene precisata una categoria di eroreerrore la aggiunge alle categorie in cui inserire la voce, altrimenti
-- altrimenti inserisce la categoria di errore standard
-- ============================================================================================================
local function add_error(error_msg, category)
if errors_msg ~= nilerror_msg then
errors_msg[#errors_msg+1] = error_msg
if category then
add_category(category)
else
add_category('Errori di compilazione del template Interprogettointerprogetto')
end
end
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)
Line 70 ⟶ 65:
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
return ''
end
 
-- ============================================================================================================
-- Funzione per ordinareOrdina una tabella in funzione della chiave "ordine" degli elementi della tabella
-- ============================================================================================================
local function sort_by_ordine(t1, t2)
Line 89 ⟶ 85:
end
 
-- ============================================================================================================
-- Classe per gestire la raccolta di informazioni da wikidataWikidata
-- ============================================================================================================
local Wikidata_entity = {}
 
function Wikidata_entity:new()
-- caricoCarica i dati da wikidataWikidata se esistono
local self = {}
self.entity = nil
Line 102 ⟶ 98:
end
setmetatable(self, { __index = Wikidata_entity,
__tostring = function(t) return self:__tostring() end })
self.collegamenti = {}
self.badge = {}
self:loadCollegamenti()
-- Imposta il corsivo se la pagina su Wikidata ha la proprietà P31 ("Istance of", [[wikidata:Property:P31]])
self.corsivo = self:hasPropertyValues('P31', cfg.check_opera)
-- con valore corrispondente a un'opera, come definito in cfg.check_opera
-- Considera disambigua se la pagina su wikidata ha la proprietà P31 ("Istance of", https://www.wikidata.org/wiki/Property:P31)
self.corsivo = self:hasPropertyValue('P31', cfg.check_opera)
---con valore 4167410 (wikidata item 'Wikimedia disambiguation page': https://www.wikidata.org/wiki/Q4167410)
-- 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')
return self
Line 116 ⟶ 114:
if self.entity then
return self.entity:getLabel(label)
else
return nil
end
return nil
end
 
-- ============================================================================================================
-- Carica collegamenti e badge da wikidataWikidata controllando i progetti elencati in cfg.automatic_link
-- ============================================================================================================
function Wikidata_entity:loadCollegamenti()
if self.entity == nil then return end
for key_progetto, progetto in pairs(cfg.automatic_link) do
-- caricoCarica i linkcollegamenti di un progetto solo se non disambigua o tipo di collegamentoprogetto abilitato in disambigua
if not self.disambigua or cfg.progetti[key_progetto].abilita_in_disambigua then
if local sitelink = self.entity:getSitelink(progetto.interwiki) then
if sitelink then
self.collegamenti[key_progetto] = self.entity:getSitelink(progetto.interwiki)
if self.entity.sitelinkscollegamenti[progetto.interwikikey_progetto].badges then= sitelink
localif badge_listself.entity.sitelinks[progetto.interwiki].badges = {}then
for _, badge_quality in ipairs(self.entity.sitelinks[progetto.interwiki].badges)local dobadge_class = {}
iflocal cfg.badges[badge_quality]badge_title then= {}
for _, badge_quality in badge_listipairs(self.entity.sitelinks[#badge_list+1progetto.interwiki] = cfg.badges[badge_quality]) 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 if #badge_list > 0progetto.property_category then
local property_id = selfprogetto.badge[key_progetto] = ''property_category
if for _,badge_to_add in ipairs(badge_list) doself.entity.claims
and self.badge[key_progetto] = selfentity.badgeclaims[key_progettoproperty_id] .. " " .. badge_to_add.class
endand self.entity.claims[property_id][1]
and self.entity.claims[property_id][1].mainsnak
and self.entity.claims[property_id][1].mainsnak.datavalue
and self.entity.claims[property_id][1].mainsnak.datavalue.type == 'string' then
self.collegamenti[key_progetto] = 'Category:' .. self.entity.claims[property_id][1].mainsnak.datavalue.value
end
end
elseif progetto.property_category and self.entity.claims then
local property_id = progetto.property_category
if self.entity.claims[property_id]
and self.entity.claims[property_id][1]
and self.entity.claims[property_id][1].mainsnak
and self.entity.claims[property_id][1].mainsnak.datavalue
and self.entity.claims[property_id][1].mainsnak.datavalue.type == 'string' then
self.collegamenti[key_progetto] = 'Category:' .. self.entity.claims[property_id][1].mainsnak.datavalue.value
end
end
Line 159 ⟶ 160:
 
-- ============================================================================================================
-- Verifica se una determinata proprietà ha iluno valoredei specificatovalori specificati nella lista "values".
-- Riadattata da "hasPropertyValue" su [[wikiquote:it:Modulo:Interprogetto]] a sua volta
-- riadattata da function "instanceof(arg)" su [[wikisource:it:Modulo:Autore]]
-- ============================================================================================================
function Wikidata_entity:hasPropertyValue(propertyId, valuevalues)
if self.entity and self.entity.claims and self.entity.claims[propertyId] then
local claims = self.entity.claims[propertyId]
Line 171 ⟶ 172:
if datavalue.type == 'wikibase-entityid' then
if datavalue.value['entity-type'] == 'item' then
if datavalue.value['numeric-id']type(values) == tonumber(value)'table' then return true end
if values[tostring(datavalue.value['numeric-id'])] then
return true
end
elseif values == tostring(datavalue.value['numeric-id']) then
return true
end
end
elseif datavalue.type == 'string' then
if datavalue.value == value then return true end
end
end
Line 181 ⟶ 186:
return false
end
 
-- ============================================================================================================
-- Fine definizione della classe Wikidata_entity
-- Verifica se una determinata proprietà ha uno dei valori specificato nella lista values.
-- Riadattata da "hasPropertyValue" su [[wikiquote:it:Modulo:Interprogetto]] a sua volta
-- riadattata da function instanceof(arg)" su [[wikisource:it:Modulo:Autore]]
-- ============================================================================================================
function Wikidata_entity:hasPropertyValues(propertyId, values)
if self.entity and self.entity.claims and self.entity.claims[propertyId] then
local claims = self.entity.claims[propertyId]
for _, claim in pairs(claims) do
if claim and claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then
local datavalue = claim.mainsnak.datavalue
if datavalue.type == 'wikibase-entityid' then
if datavalue.value['entity-type'] == 'item' then
if values[tostring(datavalue.value['numeric-id'])] then return true end
end
elseif datavalue.type == 'string' then
if values[datavalue.value['numeric-id']] then return true end
end
end
end
end
return false
end
 
-- ============================================================================================================
-- Fine classe Wikidata_entity
-- ===============================================================================================
 
-- ===============================================================================================
-- Classe per gestire i collegamenti interprogetto
-- ============================================================================================================
local Collegamento = {}
 
function Collegamento:new(key_progetto, args, entity, default)
-- Crea un collegamento a un progetto, riceve il nome del progetto, gli argomenti da usare per determinare
-- i valori dei vari parametri del collegamento. Si appoggia alla tabella esterna cfg.parameters per i
-- valori di default del collegamentoprogetto e all'arrayalla tabella globale defaultsdefault per i valorvalori di default generali
 
local self = {}
Line 224 ⟶ 204:
__tostring = function(t) return self:__tostring() end })
local default_progetto = cfg.parameters[key_progetto]
if default_progetto == nil then return nil end
-- Progetto non riconosciuto
self.ordine = default_progetto.ordine
return nil
self.key_progetto = key_progetto
end
self.badge_leftbar = entity.badge[key_progetto] or ''
self.collegamento = args[key_progetto]
if not is_defined(self.collegamento) then
self.etichetta = is_defined(args[key_progetto .. '_etichetta']) or (default_progetto.etichetta_lower and default.etichetta_lower) or default.etichetta
-- Collegamento non definito correttamente
self.oggetto = args[key_progetto .. '_oggetto'] or default.oggetto or default_progetto.oggetto
return nil
if default_progetto.preposizione then
self.preposizione = args[key_progetto .. '_preposizione'] or default.preposizione or default_progetto.preposizione
else
self.preposizionekey_progetto = ''key_progetto
self.ordine = default_progetto.ordine
end
self.badge_leftbar = {}
if key_progetto=='notizia' and is_defined(args.data) then
self.badge_leftbar.class = (entity.badge[key_progetto] and entity.badge[key_progetto].class) or ''
self.testo_dopo = table.concat({' <small>', args.data, '</small>'})
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
self.oggetto = args[key_progetto .. '_oggetto'] or default.oggetto or default_progetto.oggetto
if default.frase_unificata or default_progetto.preposizione then
self.preposizione = args[key_progetto .. '_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
if default_progetto.lingua and args[key_progetto .. '_lingua'] then
self.lingua = ' in lingua ' .. args[key_progetto .. '_lingua']
else
self.lingua = ''
end
return self
end
if default_progetto.lingua and args[key_progetto ..'_lingua'] then
self.lingua = ' in lingua ' .. args[key_progetto ..'_lingua']
else
self.lingua = ''
end
return self
end
 
Line 254 ⟶ 249:
if cfg.parameters[self.key_progetto].link == 'LinkRicette' then return self:Link_ricette() end
if cfg.parameters[self.key_progetto].link == 'LinkIncubator' then return self:Link_incubator() end
add_error('Errore interno modulo Interprogetto:' .. self.key_progetto)
return ''
end
Line 261 ⟶ 256:
if cfg.parameters[self.key_progetto].link == 'Link' then return self:Link_text_lb() end
if cfg.parameters[self.key_progetto].link == 'LinkWithLanguage' then return self:Link_language_lb() end
if cfg.parameters[self.key_progetto].link == 'LinkRicette' then return self:Link_ricette_lbLink_text_lb() end
if cfg.parameters[self.key_progetto].link == 'LinkIncubator' then return self:Link_incubator_lb() end
add_error('Errore interno modulo Interprogetto:' .. self.key_progetto)
Line 271 ⟶ 266:
return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona, "|Collabora a ",
default_progetto.nome_progetto, "]] '''[[", default_progetto.prefix, "|", default_progetto.nome_progetto, "]]''' contiene ",
self.oggetto, " ", self.lingua, " ", add_space(self.preposizione), default_progettoself.testo_prima, "'''[[", default_progetto.prefix,
"", self.collegamento, "|", self.etichetta, "]]'''", self.testo_dopo
end
 
Line 283 ⟶ 278:
local default_progetto = cfg.parameters[self.key_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_ricette_lb()
local default_progetto = cfg.parameters[self.key_progetto]
return '[[',default_progetto.prefix, self.collegamento, '|', default_progetto.nome_leftbar or default_progetto.nome_progetto, ']]'
end
 
function Collegamento:Link_language()
local default_progetto = cfg.parameters[self.key_progetto]
local main_page_link = tostring(mw.uri.fullUrl(default_progetto.prefix, {uselang='it'}))
return "* [[File:", default_progetto.icona, "|link=", main_page_link, "|", default_progetto.dimensione_icona, "|Collabora a ",
default_progetto.nome_progetto, "]] '''<span class=\"plainlinks\">[", main_page_link, " ", default_progetto.nome_progetto,
"]</span>''' contiene ", self.oggetto, " ", add_space(self.preposizione), default_progettoself.testo_prima,
"'''<span class=\"plainlinks\">[", tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
" ", self.etichetta, "]</span>'''", self.testo_dopo
Line 304 ⟶ 294:
function Collegamento:Link_language_lb()
local default_progetto = cfg.parameters[self.key_progetto]
return '"<span class=\"plainlinks\" title=\""', default_progetto.prefix , self.etichettacollegamento, "\">[",
tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})), " ",
default_progetto.nome_leftbar or default_progetto.nome_progetto, "]</span>"
end
 
Line 311 ⟶ 302:
local default_progetto = cfg.parameters[self.key_progetto]
local oggetto = self.oggetto
if not cfg.prefix_incubator[oggetto] then oggetto='wikipedia' end
oggetto = default_progetto.oggetto
end
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', cfg.prefix_incubator[oggetto],
'/', self.collegamento}), {uselang='it'}))
local main_page_incubator = tostring(mw.uri.fullUrl(':incubator:Main_PageIncubator:Main Page/it', {uselang='it'}))
local main_page_progetto = ''
if oggetto == 'wikipedia' then
main_page_progetto = '[[Wikipedia]]'
else
main_page_progetto = table.concat({'[[', oggetto, ':it:|', oggetto:gsub("'^%l"', string.upper), ']]'})
end
return "* [[File:", default_progetto.icona, "|link=", main_page_incubator, "|", default_progetto.dimensione_icona,
"|Collabora a Incubator]] '''<span class=\"plainlinks\">[", main_page_incubator, " Incubator]</span>''' contiene un test su ",
main_page_progetto, self.lingua, " ", add_space(self.preposizione), "'''<span class=\"plainlinks\">[", collegamento, " ", self.etichetta, "]</span>'''"
end
 
function Collegamento:Link_incubator_lb()
local default_progetto = cfg.parameters[self.key_progetto]
local oggetto = self.oggetto
if not cfg.prefix_incubator[oggetto] then oggetto='wikipedia' end
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
-- ============================================================================================================
 
-- ============================================================================================================
-- CreaScandisce la barratabella diprogetti sinistrae conproduce iil linkcodice interprogetto,html costruisceper lel'elenco righedei percollegamenti lanella barra di sinistra come un elenco puntato
-- AperturaImposta delil tag div id="interProject" (vedi [[Commons:MediaWiki:InterProject.js]] incluso da [[Mediawiki:Common.js]])
-- ============================================================================================================
local function RenderLeftBar(progetti)
 
local leftbar = mw.html.create('div'):attr('title', 'Collegamenti verso gli altri progetti Wikimedia')
for _, progetto in ipairs(progetti) do
leftbar:newline()
leftbar:wikitext('<li class=\"', progetto.badge_leftbar.class, '\" title=\"', progetto.badge_leftbar.title, '\">')
leftbar:wikitext(progetto:Link_lb())
if cfg.parameters[progetto.key_progetto].nome_leftbar then
Line 355 ⟶ 351:
root:tag('div')
:attr('id', 'interProject')
:addClass('toccolours')
:cssText('display: none; clear: both; border-width: 2px 0; border-style: dotted; border-color: #AAAAAA; margin-top: 2em')
:cssText('display: none; clear: both; margin-top: 2em')
:tag('p')
:attr('id', 'sisterProjects')
:cssText('background-color: #efefef; font-weight: bold; margin: 0 0 -0.2em')
:tag('span')
:wikitext('Altri progetti')
Line 367 ⟶ 364:
 
-- ============================================================================================================
-- Scandisce la tabella progetti e produce il codice html per l'elenco puntato dei collegamenti interprogetto
-- ============================================================================================================
local function RenderLinksInText(progetti)
for _, progetto in ipairs(progetti) do
root:newline()
root:wikitext(progetto:Link())
Line 382 ⟶ 379:
 
local origArgs
-- =================================================================================================================================
-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
-- =================================================================================================================================
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame.args
end
-- tabellaTabella con i parametri di default valorizzati
local default = {}
-- =================================================================================================================================
-- CaricoCarica 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 usousa 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
Line 406 ⟶ 403:
default.current_fullpagename = current_pagename
end
-- =================================================================================================================================
-- caricoCarica i dati da wikidataWikidata nell'oggetto "entity"
-- =================================================================================================================================
local entity = Wikidata_entity:new()
-- =================================================================================================================================
-- CalcoloCalcola l'etichetta di default per i collegamenti, in ordine di priorità:
-- 1) Se è definita l'etichetta in lingua italiana su wikidataWikidata usousa questa (elimiando un eventuale
' -- "Categoria:'" di fronte alla voce)
-- 2) Altrimenti usousa il nome della pagina corrente, eliminando un'eventuale disambiguedisambigua in coda alla voce e definisco etichetta_lower ,
-- e definisce etichetta_lower come il nome della voce con iniziale minuscola. Se la voce è segnalata come un'opera (fumetto, film, romanzo, ecc..) su
-- Se la voce wikidataè segnalata come opera su Wikidata allora l'etichetta è in corsivo. (senza iniziale minuscola)
-- =================================================================================================================================
if is_defined(origArgs.etichetta) then
default.etichetta = origArgs.etichetta
Line 422 ⟶ 420:
local wikidata_label = entity:getLabel('it')
if is_defined(wikidata_label) then
default.etichetta = mw.ustring.gsub(wikidata_label, '^Categoria:', '') -- EliminoElimina un eventuale "Categoria:" in fronte del nome
default.etichetta_loweretichetta = defaultmw.etichettaustring.gsub(wikidata_label, '^Categoria:', '')
else
default.etichetta = mw.ustring.gsub(current_pagename, ' %(.*%)$', '') -- EliminoElimina 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, "'^%l"u', string.lower)
else
default.etichetta_lower = default.etichetta
end
end
if entity.corsivo then
default.etichetta = '<span style=\"font-style:italic;\">' .. default.etichetta .. '</span>'
default.etichetta_lower = '<span style=\"font-style:italic;\">' .. default.etichetta_loweretichetta .. '</span>'
end
end
-- =================================================================================================================================
-- CalcoloCalcola preposizione e oggetto di default, modificandoli se il namespace è 14 (categoria)
-- =================================================================================================================================
if current_namespace ~= 14 then
default.preposizione = origArgs.preposizione
Line 446 ⟶ 443:
default.preposizione = origArgs.preposizione or "sull'argomento"
default.oggetto = origArgs.oggetto or "una categoria"
default.frase_unificata = true
end
-- =================================================================================================================================
-- CopioCopia i parametri in una nuova tabella, creando una coppiacoppie progetto/collegamento per i parametri posizionali
-- e controllando per parametri duplicati e nomi di progetto non conosciuti
-- =================================================================================================================================
local newArgs = {}
local nolink = false
Line 458 ⟶ 456:
if cfg.parameters[key_progetto] then
if origArgs[key_progetto] then
add_error('Collegamento a \"' .. value .. '\" inserito sia come parametro posizionale che nominale')
else
newArgs[key_progetto] = get_default_collegamento(key_progetto, default.current_fullpagename)
Line 466 ⟶ 464:
nolink = true
else
add_error('Il parametro \"' .. value .. '\" non corrisponde a nessun progetto riconosciuto dal template')
end
end
Line 473 ⟶ 471:
end
end
-- =================================================================================================================================
-- Controllo seControlla i collegamenti inseriti manualmente sonointegrandoli presentieventualmente incon wikidataquelli epresenti in caso contrario li aggiungoWikidata.
-- saltoSalta questo passo se c'è un collegamento a '"notizia'" dato che in questo caso deve essere unico e quindi non devo aggiungere i
-- linknon deve aggiungere i collegamenti da wikidataWikidata
-- =================================================================================================================================
if not newArgs.notizia then
-- controllo se è presenteControlla il collegamento compilato manualmente macon nonquello quellocaricato inda wikidataWikidata
for key_progetto, collegamento in pairs(newArgs) do
if cfg.parameters[key_progetto] and cfg.automatic_link[key_progetto] and entity.entyty then
if not entity.collegamenti[key_progetto] then
-- Segnala che è presente il collegamento compilato manualmente ma non quello in Wikidata
add_category(cfg.automatic_link[key_progetto].category_wikidata_missing)
add_category(cfg.automatic_link[key_progetto].category_wikidata_missing)
elseif entity.collegamenti[key_progetto] ~= collegamento then
-- Segnala che il collegamento compilato manualmente è diverso da quello in Wikidata
add_category(cfg.automatic_link[key_progetto].category_wikidata_diff)
end
end
end
-- ====================================================================================================
-- aggiungo il collegamento da wikidata se non presente compilato manualmente
for-- key_progetto,Aggiunge il collegamento inda Wikidata pairs(entity.collegamenti)se donon è presente quello compilato manualmente
-- ====================================================================================================
for key_progetto, collegamento in pairs(entity.collegamenti) do
if not newArgs[key_progetto] and not (cfg.automatic_link[key_progetto].alias and 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].category_wikidata)
end
end
end
-- =================================================================================================================================
-- Sulla base della lista di argomenti ripulita costruiscocostruisce la lista dei collegamenti da inserire
-- =================================================================================================================================
local progetti = {}
for key_progetto, collegamento in pairs(newArgs) do
if cfg.parameters[key_progetto] then
-- SaltoSalta i linkcollegamenti a wikidataWikidata per le voci nel innamespase ns0principale eccetto che per la Pagina principale
if not(key_progetto =~= 'wikidata') or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
-- Se è disambigua registroregistra solo i valori per i linkprogetti alabilitati wikizionarioin disambigua
if not(entity.disambigua) or cfg.parameters[key_progetto].abilita_in_disambigua then
local progetti[#progetti+1]progetto = Collegamento:new(key_progetto, newArgs, entity, default)
if progetto then
progetti[#progetti+1] = progetto
add_category(cfg.parameters[key_progetto].categoria)
end
end
end
Line 508 ⟶ 520:
end
table.sort(progetti, sort_by_ordine)
-- =================================================================================================================================
-- generoGenera il codice html
-- =================================================================================================================================
if newArgs.notizia then
root = mw.html.create('')
if newArgs.notizia then -- gestiscoGestisce il parametro "notizia" a parte
if #progetti > 1 then
add_error('Errore: il parametro \"notizia\" se presente deve essere unico')
else
local newsprogetto = progetti[1]
local news_default = cfg.parameters.notizia
root:wikitext('"* [[File:'", news_default.icona, '"|link='", news_default.prefix, '"|'",
news_default.dimensione_icona,' "|Collabora a '", news_default.nome_progetto,
"]]", " Articolo su '''[[", news_default.prefix, news_default.nome_progetto, '"|'",
news_default.nome_progetto, "]]''': ", "'''[[", news_default.prefix,
newsprogetto.collegamento, '"|'", newsprogetto.collegamento, "]]'''", newsprogetto.testo_dopo )
add_category('Template interprogetto - parametro notizia'news_default.categoria)
end
else
if #progetti == 0 then
add_error('Template interprogetto vuoto e senza dati da recuperare da wikidataWikidata', 'Errori di compilazione del template interprogetto - template vuoto')
else
RenderLeftBar(progetti)
if not nolink then
RenderLinksInText(progetti)
end
Line 536 ⟶ 548:
end
-- =================================================================================================================================
-- Se sono in unNei namespace ammessoammessi inseriscoinserisce 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
-- =================================================================================================================================
-- AggiungoAggiunge i messaggi di errore
-- =================================================================================================================================
if #errors_msg > 0 then
Line 550 ⟶ 562:
root:wikitext('\n')
end
root:wikitext('<strong class=\"error\">' .. table.concat(errors_msg, '; ') .. '</strong>')
end
return tostring(root)