-- Fine definizione della 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 progetto e alla tabella globale default per i valori di default generali  
local self = {}
setmetatable(self, { __index = Collegamento,
__tostring = function(t) return self:__tostring end })
local default_progetto = cfg.parameters[key_progetto]
if default_progetto == nil then
-- 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.key_progetto = key_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
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
end  
function Collegamento:Link
if cfg.parameters[self.key_progetto].link == 'Link' then return self:Link_text end
if cfg.parameters[self.key_progetto].link == 'LinkWithLanguage' then return self:Link_language end
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('Error interno module Interprogetto:' .. self.key_progetto)
return ''
end  
function Collegamento:Link_lb
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_text_lb end
if cfg.parameters[self.key_progetto].link == 'LinkIncubator' then return self:Link_incubator_lb end
add_error('Errore interno module Interprogetto:' .. self.key_progetto)
return ''
end  
function Collegamento:Link_text
local default_progetto = cfg.parameters[self.key_progetto]
return "* **", default_progetto.nome_progetto, "** contiene ",
self.oggetto, self.lingua, " ", add_space(self.preposizione), self.testo_prima, "**", self.etichetta, "**", self.testo_dopo
end  
function Collegamento:Link_text_lb
local default_progetto = cfg.parameters[self.key_progetto]
return "", default_progetto.nome_leftbar or default_progetto.nome_progetto, ""
end  
function Collegamento:Link_ricette
local default_progetto = cfg.parameters[self.key_progetto]
return "* Il *Libro di cucina* di **Wikibooks** contiene ricette relative a questo argomento"
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 "* '''<span class=\"plainlinks\">[", main_page_link, " ", default_progetto.nome_progetto,
"]</span>''' contiene ", self.oggetto, " ", add_space(self.preposizione), self.testo_prima,
"'''<span class=\"plainlinks\">[", tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
" ", self.etichetta, "]</span>'''", self.testo_dopo
end  
function Collegamento:Link_language_lb
local default_progetto = cfg.parameters[self.key_progetto]
return "<span class=\"plainlinks\" title=\"", default_progetto.prefix , self.collegamento, "\">[",
tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})), " ",
default_progetto.nome_leftbar or default_progetto.nome_progetto, "]</span>"
end  
function Collegamento:Link_incubator
local default_progetto = cfg.parameters[self.key_progetto]
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'}))
local main_page_incubator = tostring(mw.uri.fullUrl('incubator:Incubator:Main Page/it', {uselang='it'}))
local main_page_progetto = ''
if oggetto == 'wikipedia' then
main_page_progetto = 'Wikipedia'
else
main_page_progetto = table.concat({*, oggetto:gsub('^%l', string.upper), *})
end
return "* **<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 = 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
-- ============================================================================================================  
-- ============================================================================================================
-- Scandisce la tabella progetti e produce il codice html per l'elenco dei collegamenti nella barra di sinistra
-- Imposta il tag div id="interProject" (vedi 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
leftbar:wikitext('
(', cfg.parameters[progetto.key_progetto].nome_progetto, ')')
end
leftbar:wikitext('</li>')
end
root:tag('div')
:attr('id', 'interProject')
:addClass('toccolours')
:cssText('display: ; clear: both; margin-top: 2em')
:tag('p')
:attr('id', 'sisterProjects')
:cssText('background-color: #efefef; font-weight: bold; margin: 0')
:tag('span')
:wikitext('Altri progetti')
:done
:done
:node(leftbar)
end