Differenze tra le versioni di "Modulo:Interprogetto/Sandbox"

adattamento pedia/quote + parametro _site + categorizzazioni di test + + fix leftbar + fix vari - modulo noglobals - parametro notizia
(modulo importato da wikipedia:it:Modulo:Interprogetto)
(adattamento pedia/quote + parametro _site + categorizzazioni di test + + fix leftbar + fix vari - modulo noglobals - parametro notizia)
-- Modulo per implementare le funzionalità di template:Interprogetto
require('Module:No globals')
local p = {} -- per l'esportazione delle funzioni del modulo
 
return ''
elseif mw.ustring.sub(s, -1) == "'" then
return s
else
return s .. ' '
local function add_category(category)
if category then
table.insert(categories[, category] = true)
end
end
local function add_error(error_msg, category)
if error_msg then
table.insert(errors_msg[#errors_msg+1] =, error_msg)
add_category(category or 'Errori di compilazione del template Interprogetto')
if category then
add_category(category)
else
add_category('Errori di compilazione del template Interprogetto')
end
end
end
 
-- ============================================================================================================
-- Ritorna un collegamento di default dato il nome di un progetto, altrimenti 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
else
return nil
end
end
 
-- ============================================================================================================
-- Riproduce i template dei collegamenti a siti in altra lingua (vedi [[Categoria:Template collegamenti esterni]])
-- ============================================================================================================
local function template_lingua(lang_code)
if is_defined(lang_code) then
local styleCSS = 'font-weight: bolder; font-size: smaller; color: #002BD0;'
return '(<span style=\"', styleCSS, '\" title=\"{{nomelingua|', lang_code, '}}\">', string.upper(lang_code), '</span>)'
else
return ''
end
end
-- Carica i dati da Wikidata se esistono
local self = {}
self.entity = nil
if mw.wikibase then
self.entity = mw.wikibase.getEntityObjectgetEntity()
end
-- In fase di TEST aggiunge la voce alla categoria delle voci senza elemento su Wikidata
if not self.entity then
add_category(cfg.test and cfg.test.categoria_senza_wikidata)
end
setmetatable(self, { __index = Wikidata_entity,
-- con valore corrispondente a un'opera, come definito in cfg.check_opera
self.corsivo = self:hasPropertyValue('P31', cfg.check_opera)
-- In fase di TEST aggiunge la voce alla categoria definita in cfg.categoria_opera
if self.corsivo then
add_category(cfg.test and cfg.test.categoria_opera)
end
-- 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')
-- In fase di TEST aggiunge la voce alla categoria definita in cfg.categoria_disambigua
if self.disambigua then
add_category(cfg.test and cfg.test.categoria_disambigua)
end
return self
end
 
-- ============================================================================================================
-- Carica l'etichetta da Wikidata
-- ============================================================================================================
function Wikidata_entity:getLabel(label)
if self.entity then
if self.entity then
for key_progetto, progetto in pairs(cfg.automatic_link) do
local sitelink = self.entity:getSitelink(progetto.interwiki)
-- Carica i collegamenti di un progetto solo se non disambigua o tipo di progetto abilitato in disambigua
if not self.disambigua or cfg.progetti[key_progetto].abilita_in_disambiguasitelink then
local sitelinkself.collegamenti[key_progetto] = self.entity:getSitelink(progetto.interwiki)sitelink
if sitelinkself.entity.sitelinks[progetto.interwiki].badges then
self.collegamenti[key_progetto]local badge_class = sitelink{}
iflocal self.entity.sitelinks[progetto.interwiki].badgesbadge_title then= {}
for _, badge_quality in localipairs(self.entity.sitelinks[progetto.interwiki].badges) badge_class = {}do
localif badge_titlecfg.badges[badge_quality] = {}then
for _, badge_quality in ipairstable.insert(selfbadge_class, cfg.entity.sitelinksbadges[progetto.interwikibadge_quality].badgesclass) do
iftable.insert(badge_title, cfg.badges[badge_quality] then.title)
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 progetto.property_category then
local property_id = progetto.property_category
if self.entity.claims
and 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
self.badge[key_progetto] = {
class = table.concat(badge_class, ' '),
title = table.concat(badge_title, ', ')
}
end
elseif progetto.property_category then
local property_id = progetto.property_category
if self.entity.claims
and 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
__tostring = function(t) return self:__tostring() end })
local default_progetto = cfg.parameters[key_progetto]
if not default_progetto == nil then
-- Progetto non riconosciuto
return nil
end
self.collegamentoif =not is_defined(args[key_progetto]) then
if not is_defined(self.collegamento) then
-- Collegamento non definito correttamente
return nil
else
self.key_progetto = key_progetto
self.ordine = default_progetto.ordine or 0
self.badge_leftbarcollegamento = {}args[key_progetto]
self.badge_leftbar.class = (entity.badge[key_progetto] and entity.badge[key_progetto].class) or ''{
self.badge_leftbar.title class = (entity.badge[key_progetto] and entity.badge[key_progetto].titleclass) or '',
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 or ''
if default.frase_unificata or default_progetto.preposizione then
self.preposizione = args[key_progetto .. '_preposizione'] or default.preposizione or default_progetto.preposizione or ''
else
self.preposizione = ''
end
if default.frase_unificata then
self.testo_prima = cfg.frase_unificata.testo_prima or ''
self.testo_dopo = cfg.frase_unificata.testo_dopo or ''
else
self.testo_prima = default_progetto.testo_prima or ''
self.testo_dopo = default_progetto.testo_dopo or ''
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
else
self.lingua = ''
end
if default_progetto.prefix_site then
self.prefix_site = args[key_progetto .. '_site'] or default_progetto.prefix_site
end
-- Se è definito correttamente il parametro "_site" per i progetti in altra lingua,
-- aggiungo una categoria di servizio, aggiorno il prefisso verso il progetto in altra lingua
-- e predispongo il template corrispondente alla lingua
if is_defined(self.prefix_site) then
add_category('Voci con interprogetto verso ' .. default_progetto.nome_progetto .. ' in altra lingua - ' .. self.prefix_site)
self.prefix_template = template_lingua(self.prefix_site)
self.prefix_site = self.prefix_site .. ':'
else
self.prefix_template = ''
self.prefix_site = ''
end
return self
 
function Collegamento:Link()
if cfg.parameters[self.key_progetto].link == 'Link' then return self:Link_text() end
if cfg.parameters[self.key_progetto].link == 'LinkWithLanguageLink' then return self:Link_languageLink_text() end
if cfg.parameters[self.key_progetto].link == 'LinkRicetteLinkWithLanguage' then return self:Link_ricetteLink_language() end
if cfg.parameters[self.key_progetto].link == 'LinkIncubatorLinkRicette' then return self:Link_incubatorLink_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)
add_error('Errore interno modulo Interprogetto:' .. self.key_progetto)
return ''
return ''
end
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 == 'LinkWithLanguageLink' then return self:Link_language_lbLink_text_lb() end
if cfg.parameters[self.key_progetto].link == 'LinkRicetteLinkWithLanguage' then return self:Link_text_lbLink_language_lb() end
if cfg.parameters[self.key_progetto].link == 'LinkIncubatorLinkRicette' then return self:Link_incubator_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)
add_error('Errore interno modulo Interprogetto:' .. self.key_progetto)
return ''
return ''
end
end
 
function Collegamento:Link_text()
local default_progetto = cfg.parameters[self.key_progetto]
return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefix, "|", default_progetto.dimensione_icona, "|Collabora a link=",
default_progetto.nome_progettoprefix, "]] '''[[", default_progettoself.prefixprefix_site, "|Collabora a ", default_progetto.nome_progetto, "]]''' contiene ",
self.oggetto, self.lingua, " ", add_space(self.preposizioneprefix_template), self.testo_prima, "'''[[", default_progetto.prefix, self.prefix_site, "|",
default_progetto.nome_progetto, "]]''' contiene ", self.collegamento, "|"oggetto, self.etichettalingua, "]]''' ", self.testo_dopo
add_space(self.preposizione), self.testo_prima, "'''[[", default_progetto.prefix, self.prefix_site,
self.collegamento, "|", self.etichetta, "]]'''", self.testo_dopo
end
 
function Collegamento:Link_text_lb()
local default_progetto = cfg.parameters[self.key_progetto]
-- Eventuale sottotitolo del progetto (tra parentesi, con caretteri più piccoli)
return "[[", default_progetto.prefix, self.collegamento, "|", default_progetto.nome_leftbar or default_progetto.nome_progetto, "]]"
local leftbar = default_progetto.nome_leftbar and ("<br /><small>(" .. default_progetto.nome_leftbar .. ")</small>") or ""
return "[[", default_progetto.prefix, self.prefix_site, self.collegamento, "|", default_progetto.nome_progetto, "]] ",
self.prefix_template, leftbar
end
 
function Collegamento:Link_ricette()
local default_progetto = cfg.parameters[self.key_progetto]
return "* [[File:", default_progetto.icona, "|link=", default_progetto.prefixdimensione_icona, "|link=b:", default_progetto.dimensione_icona,
"|Collabora a ", default_progetto.nome_progetto, "]] Il ''[[b:Libro di cucina|Libro di cucina]]'' di '''[[b:|Wikibooks]]''' contiene [[",
"'''[[b:|Wikibooks]]''' contiene ", self.oggetto, " ", add_space(self.preposizione), "'''[[",
default_progetto.prefix, self.collegamento, "|ricette]] relative a questo argomento"
default_progetto.prefix, self.collegamento, "|", self.etichetta, "]]'''"
end
 
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 link=",
main_page_link, "|Collabora a ", default_progetto.nome_progetto, "]] '''<span class=\"plainlinks\">[", main_page_link, " ", default_progetto.nome_progetto,
main_page_link, " ", default_progetto.nome_progetto, "]</span>''' contiene ", self.oggetto, " ", add_space(self.preposizione), self.testo_prima,
add_space(self.preposizione), self.testo_prima, "'''<span class=\"plainlinks\">[", tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
tostring(mw.uri.fullUrl(default_progetto.prefix .. self.collegamento, {uselang='it'})),
" ", self.etichetta, "]</span>'''", self.testo_dopo
" ", self.etichetta, "]</span>'''", self.testo_dopo
end
 
function Collegamento:Link_language_lb()
local default_progetto = cfg.parameters[self.key_progetto]
-- Eventuale sottotitolo del progetto (tra parentesi, con caretteri più piccoli)
local leftbar = default_progetto.nome_leftbar and ("<br /><small>(" .. default_progetto.nome_leftbar .. ")</small>") or ""
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>", leftbar
end
 
local oggetto = self.oggetto
if not cfg.prefix_incubator[oggetto] then
oggetto = default_progetto.oggetto'wikiquote'
end
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', .. cfg.prefix_incubator[oggetto] .. '/' .. self.collegamento, {uselang='it'}))
'/', 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 == 'wikipediawikiquote' then
main_page_progetto = '[[WikipediaPagina principale|Wikiquote]]'
else
main_page_progetto = table.concat({'[[', .. oggetto, .. ':it:|', .. oggetto:gsub('^%l', string.upper), .. ']]'})
end
return "* [[File:", default_progetto.icona, "|link=", main_page_incubatordefault_progetto.dimensione_icona, "|link=", default_progetto.dimensione_icona,
main_page_incubator, "|Collabora a Incubator", default_progetto.nome_progetto, "]] '''<span class=\"plainlinks\">[", main_page_incubator, " Incubator]</span>''' contiene un test su ",
main_page_incubator, " ", default_progetto.nome_progetto, "]</span>''' contiene un test su ",
main_page_progetto, self.lingua, " ", add_space(self.preposizione), "'''<span class=\"plainlinks\">[", collegamento, " ", self.etichetta, "]</span>'''"
main_page_progetto, self.lingua, " ", add_space(self.preposizione), "'''<span class=\"plainlinks\">[",
collegamento, " ", self.etichetta, "]</span>'''"
end
 
local oggetto = self.oggetto
if not cfg.prefix_incubator[oggetto] then
oggetto = default_progetto.oggetto'wikiquote'
end
local collegamento = tostring(mw.uri.fullUrl(table.concat({'incubator:', .. cfg.prefix_incubator[oggetto] .. '/' .. self.collegamento, {uselang='it'}))
-- Sottotitolo del progetto (tra parentesi, con caretteri più piccoli)
'/', self.collegamento}), {uselang='it'}))
local leftbar = ("<br /><small>(" .. oggetto:gsub('^%l', string.upper) .. ")</small>")
return mw.message.newRawMessage("<span class=\"plainlinks\" title=\"$1\">[$2 Incubator]<span>", {self.etichetta, collegamento}):plain()
return "<span class=\"plainlinks\">[", collegamento, " ", default_progetto.nome_progetto, "]</span>", leftbar
end
-- ============================================================================================================
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('<br />(', cfg.parameters[progetto.key_progetto].nome_progetto, ')')
end
leftbar:wikitext('</li>')
end
end
-- Tabella con i parametri di default valorizzati
local default = {}
-- ========================================================================================================
-- Carica il nome della pagina corrente
default.oggetto = origArgs.oggetto
else
default.preposizione = origArgs.preposizione or "sull'argomento"cfg.frase_unificata.preposizione
default.oggetto = origArgs.oggetto or "una categoria"cfg.frase_unificata.oggetto
default.frase_unificata = true
end
-- ========================================================================================================
-- Controlla i collegamenti inseriti manualmente integrandoli eventualmente con quelli presenti in Wikidata.
-- SaltaIn questocaso passodi se"disambigua", c'èsalta uni collegamentoprogetti anon "notizia" datoabilitati che in questoogni caso devenon devono essere unico e quindiaggiunti
-- 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
-- ========================================================================================================
-- Confronta il collegamento compilato manualmente e quello caricato da Wikidata
if not newArgs.notizia then
-- ========================================================================================================
for -- Controlla ilkey_progetto, collegamento compilato manualmente e quello caricatoin dapairs(newArgs) Wikidatado
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
for key_progetto, collegamento in pairs(newArgs) do
if cfg.parameters[key_progetto] and cfg local entity_collegamento = entity.automatic_linkcollegamenti[key_progetto] and entity.entity then
if not entity.disambigua or cfg.parameters[key_progetto].abilita_in_disambiguaif not is_defined(entity_collegamento) then
local entity_collegamento = entity.collegamenti[key_progetto] if is_defined(collegamento) then
-- Segnala che è presente il collegamento compilato manualmente ma non quello in Wikidata
if not is_defined(entity_collegamento) then
if is_defined add_category(collegamentocfg.automatic_link[key_progetto].category_wikidata_missing) 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
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
-- ====================================================================================================
-- 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
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
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
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 costruisce la lista dei collegamenti da inserire
if cfg.parameters[key_progetto] then
-- Salta i collegamenti a Wikidata per le voci nel namespace principale eccetto che per la Pagina principale
if (key_progetto ~= 'wikidata' and key_progetto ~= 'd') or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
-- Se è disambigua registra solo i valori per i progetti abilitati in disambigua
if not entity.disambigua or cfg.parameters[key_progetto].abilita_in_disambigua then
local progetto = Collegamento:new(key_progetto, newArgs, entity, default)
if progetto then
table.insert(progetti[#progetti+1] =, progetto)
add_category(cfg.parameters[key_progetto].categoria)
end
-- ========================================================================================================
if #progetti == 0 then
add_error('Template interprogettoInterprogetto vuoto e senza dati da recuperare da Wikidata', 'Errori di compilazione del template Interprogetto - template vuoto')
else
RenderLeftBar(progetti)
if not nolink then
RenderLinksInText(progetti)
-- =================================================================================================================================
if cfg.whitelist_category[current_namespace] then
for category_, _category in pairs(categories) do
root:wikitext('[[Categoria:' .. category .. ']]')
end
-- =================================================================================================================================
if #errors_msg > 0 then
if #progetti > 0 then
root:wikitext('\n')
end
5 786

contributi