:tag('p')
:attr('id', 'sisterProjects')
:cssText('background-color: #efefef; font-weight: bold; margin: 0')
:tag('span')
:wikitext('Altri progetti')
:done
:done
:node(leftbar)
end  
-- ============================================================================================================
-- 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)
end
end  
-- ============================================================================================================
-- Funzione principale richiamata dal template Interprogetto
-- ============================================================================================================
function p.interprogetto  
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 == mw.getCurrentFrame then
origArgs = :getParent.args
else
origArgs =
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 entity = Wikidata_entity:new
-- ========================================================================================================
-- Calcola l'etichetta di default per i collegamenti, in ordine di priorità:
-- 1) Se è definita l'etichetta in lingua italiana su Wikidata usa questa (elimiando 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
local wikidata_label = entity:getLabel('it')
if is_defined(wikidata_label) then
-- Elimina un eventuale "Categoria:" in fronte del nome
default.etichetta = mw.ustring.gsub(wikidata_label, '^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 = '<span style=\"font-style:italic;\">' .. default.etichetta .. '</span>'
end
end
-- ========================================================================================================
-- Calcola preposizione e oggetto di default, modificandoli se il namespace è 14 (categoria)
-- ========================================================================================================
if current_namespace ~= 14 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
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
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
local entity_collegamento = entity.collegamenti[key_progetto]
if not is_defined(entity_collegamento) then
if is_defined(collegamento) then
-- Segnala che è presente il collegamento compilato manualmente ma non quello in Wikidata
add_category(cfg.automatic_link[key_progetto].category_wikidata_missing)
end
elseif tostring(mw.uri.localUrl(collegamento)) ~= tostring(mw.uri.localUrl(entity_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
end
-- ====================================================================================================
-- Aggiunge il collegamento da Wikidata se non è presente quello compilato manualmente
-- ====================================================================================================
for key_progetto, collegamento in pairs(entity.collegamenti) do
if not entity.disambigua or (cfg.parameters[key_progetto] and cfg.parameters[key_progetto].abilita_in_disambigua) then