Modulo:Collegamenti esterni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
supporto per vincolo multiplo. minuzie
Parametro per eventuali esclusioni. Solo categorie per link numerosi. Migliorie ai link multipli.
Riga 6:
 
local getArgs = require('Modulo:Arguments').getArgs
local mDelink = require('Modulo:Delink')
local mWikidata = require('Modulo:Wikidata')
local mCitazione = require('Modulo:Citazione')
Riga 16 ⟶ 15:
'Biografie', 'Letteratura', 'Biologia'
}
-- Soglie di attenzione sul numero elevato di collegamenti, per categorie di controllo
-- Numero di collegamenti esterni oltre il quale sono raggruppati
local THRESHOLD_GROUPED_LISTMOLTI_LINK = 12
local MOLTI_LINK_2 = 15
-- Categorie di servizio
local catLetta = ' letta da Wikidata'
local catMultiSenzaQual = ' multipla letta da Wikidata senza qualificatore'
local catGroupedListcatMoltiLink = 'Voci con template Collegamenti esterni e collegamentimolti raggruppaticollegamenti'
local catMoltiLink2 = 'Voci con template Collegamenti esterni e molti collegamenti (soglia maggiore)'
local catEmpty = 'Voci con template Collegamenti esterni senza dati da Wikidata'
local catUnknownQual = 'Voci con template Collegamenti esterni e qualificatori sconosciuti'
Riga 148 ⟶ 149:
specifica = self.qualifier[i]
else
local ripetuto = false -- controllo se stesso titolo già usato
if titolo == self.title then
for j = 1, i - 1 do
if titolo == (self.extraConf.titolo[j] or self.title) then
ripetuto = true
break
end
end
if ripetuto then
specifica = 'altra versione'
else
Riga 160 ⟶ 168:
end
return tbl
end
 
-- Restituisce il parametro posttitolo per il modulo Citazione.
--
-- @return {string}
function ExtLink:_getPostTitolo(groupedList)
local ret
if groupedList or not self.qualifier and #self.url > 1 then
local tbl = {}
for i = 2, #self.url do
table.insert(tbl, string.format('[%s %s]', self.url[i], i))
end
ret = string.format('(%s)', table.concat(tbl, ', '))
end
return ret
end
 
-- Restituisce la stringa da usare come "sito" per il modulo Citazione
-- o come label nel link creato come [url label].
--
-- @param {boolean} delink
-- @return {string}
function ExtLink:_getSito(delink)
local sito
if self.linkConf.sito then
sito = delink and mDelink._main({ self.linkConf.sito }) or self.linkConf.sito
else
sito = getDomain(self.url[1])
end
return sito
end
 
Riga 217 ⟶ 195:
end
return table.concat(formattedLinks, '\n')
end
 
-- Setta come necessaria la disambiguazione del link (più URL con lo stesso dominio nel gruppo),
-- se configurata tramite la chiave "sitodis" nella configurazione.
function ExtLink:needSitoDis()
self.sitodis = self.linkConf.sitodis
end
 
Riga 238 ⟶ 210:
titolo = self:_getTitolo(),
altrilink = self:_getAltriLink(),
sito = self.linkConf.opera and '' or self:_getSito().extraConf.sito,
opera = self.linkConf.opera,
editore = self.linkConf.editore,
Riga 252 ⟶ 224:
return self:_formatPropertyURL()
end
end
 
-- Formatta il collegamento esterno come elemento di un elenco puntato raggruppato.
--
-- @return {string}
function ExtLink:getGroupedListItem()
local ret = string.format('[%s %s]', self.url[1], self:_getSito(true))
return #self.url > 1 and (ret .. ' ' .. self:_getPostTitolo(true)) or ret
end
 
Riga 285 ⟶ 249:
self.catColon = ''
self.from = args.from
-- esclusioni ricevute come 'Xxx, yyy' e memorizzate come { 'Xxx'=true, 'Yyy'=true }
self.escludi = {}
local argescludi = args.escludi and mw.text.split(args.escludi, ',')
if argescludi then
for _, str in ipairs(argescludi) do
self.escludi[mw.getContentLanguage():ucfirst(mw.text.trim(str))] = true
end
end
-- la pagina dei test utilizza uno stub del modulo Wikidata
if mw.title.getCurrentTitle().prefixedText ==
Riga 317 ⟶ 289:
groupSites[groupName] = {}
ret[groupName] = {}
-- controlla se è un gruppo escluso manualmente dall'utente
if self.escludi[groupName] then
cfg[groupName] = {}
end
for _, linkConf in ipairs(cfg[groupName]) do -- Per ogni sito configurato
local valido = true
Riga 328 ⟶ 304:
end
end
-- controlla se è un sito escluso manualmente dall'utente
if self.escludi[linkConf.pid] or self.escludi[mw.getContentLanguage():ucfirst(linkConf.medium or 'web')] then
valido = false
end
-- Se il sito è abilitato, avviene la lettura da Wikidata
if valido then
local url, qualifier, extraConf
local Nqualtitoli = 0
local claims = mWikidata._getClaims(linkConf.pid, { from = self.from, snaktype = 'value' })
-- Qui, se ci sono valori, il sito viene aggiunto a quelli da mostrare
if claims and #claims > 0 then
-- Qualificatori generali
-- In caso di valori multipli, il titolo viene letto per tutti; gli altri qualificatori solo per il primo (altrimenti bisogna rivedere la formattazione dei valori multipli)
-- Ricordarsi di elencare i qual. generali anche in altriQualNoti
extraConf = {}
extraConf.autore = mWikidata._formatQualifiers(claims[1], 'P50') or mWikidata._formatQualifiers(claims[1], 'P2093') -- come item o stringa
Riga 342 ⟶ 325:
extraConf.titolo = {}
for i, claim in ipairs(claims) do
extraConf.titolo[i] = mWikidata._formatQualifiers(claim, 'P1476') or mWikidata._formatQualifiers(claim, 'P1810') or mWikidata._formatQualifiers(claim, 'P742') -- titolo o "indicato come" o pseudonimo
if extraConf.titolo[i] then Nqualtitoli = Nqualtitoli + 1 end
end
Riga 364 ⟶ 347:
end
for _, v in ipairs(qualifierIds) do qualifierIds[v] = true end
local altriQualNoti = {P407 = true, P50 = true, P2093 = true, P1476 = true, P1810 = true, P742 = true, P577 = true, P478 = true, P304 = true, P813 = true}
for qualifierId in pairs(claim.qualifiers) do
if qualifierIds[qualifierId] ~= true and altriQualNoti[qualifierId] ~= true then
Riga 380 ⟶ 363:
table.insert(url, claim)
end
-- nome sito, di default il dominio estratto dall'url
extraConf.sito = linkConf.sito or getDomain(linkConf.url)
-- Creazione dell'oggetto collegamento esterno, con l'url (o gli url) e gli altri dati raccolti
table.insert(ret[groupName], ExtLink:new(url, qualifier, linkConf, extraConf, self.from))
Riga 387 ⟶ 372:
table.insert(self.categories, string.format('[[%sCategoria:%s%s]]', self.catColon, linkConf.pid, tail))
-- per verificare se un sito è ripetuto nel gruppo
groupSites[groupName][extraConf.sito] = (groupSites[groupName][extraConf.sito] or 0) + 1
local sito = linkConf.sito and mDelink._main({ linkConf.sito }) or getDomain(linkConf.url)
-- conteggio complessivo dei collegamenti
groupSites[groupName][sito] = (groupSites[groupName][sito] or 0) + 1
self.numExtLinks = self.numExtLinks + 1
end
Riga 397 ⟶ 382:
for _, groupName in ipairs(orderedGroupNames) do
for _, extLink in ipairs(ret[groupName]) do
-- necessaria la disambiguazione (più URL con lo stesso dominio nel gruppo),
local linkConf = extLink.linkConf
-- se configurata tramite "sitodis" nella configurazione.
local sito = linkConf.sito and mDelink._main({ linkConf.sito }) or getDomain(linkConf.url)
if groupSites[groupName][extLink.extraConf.sito] > 1 then
extLink:needSitoDis().sitodis = extLink.linkConf.sitodis
end
end
end
-- categorie di servizio sul numero di link
local catnumero
if self.numExtLinks == 0 then
catnumero = catEmpty
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catEmpty))
elseif self.numExtLinks > THRESHOLD_GROUPED_LISTMOLTI_LINK then
if self.numExtLinks > MOLTI_LINK_2 then catnumero = catMoltiLink2
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catGroupedList))
else catnumero = catMoltiLink end
end
if catnumero then
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catnumero))
end
 
return ret
end
Riga 426 ⟶ 415:
end
return table.concat(formattedLinks, '\n')
end
 
-- Formatta i collegamenti esterni come elenco puntato, raggruppandoli.
--
-- @param {table} [groupNames]
-- @return {string}
function LinksManager:_formatGroupedList(groupNames)
local formattedGroups = {}
for _, groupName in ipairs(groupNames) do
local formattedLinks = {}
for _, extLink in ipairs(self.extLinks[groupName]) do
table.insert(formattedLinks, extLink:getGroupedListItem())
end
if #formattedLinks > 0 then
local groupTitle = groupName == 'Enciclopedie' and
groupName or 'Banche dati ' .. mw.ustring.lower(groupName)
table.insert(formattedGroups, string.format("* %s: %s%s", groupTitle,
table.concat(formattedLinks, '<span style="font-weight:bold;">&nbsp;·</span> '),
mEditAtWikidata._showMessage({ sezione = 'identifiers', qid = self.from })))
end
end
return table.concat(formattedGroups, '\n')
end
 
-- Restituisce tutti i collegamenti esterni formattandoli come elenco puntato
-- e raggruppandoli quando sono più di THRESHOLD_GROUPED_LIST.
--
-- @return {string}
function LinksManager:getList()
local categories, groupNames, olinks, links
-- categorie di servizio
 
-- categorie
categories = (mw.title.getCurrentTitle().namespace == 0 or self.debug) and
table.concat(self.categories) or ''
-- collegamenti
-- i siti web ufficiali sono sempre visualizzati uno per riga
olinkslinks = self:_formatList({ 'Ufficiali' }orderedGroupNames)
return links .. categories
-- tutti gli altri collegamenti
groupNames = { unpack(orderedGroupNames, 2) }
links = self.numExtLinks <= THRESHOLD_GROUPED_LIST and
self:_formatList(groupNames) or
self:_formatGroupedList(groupNames)
 
return olinks .. ((links ~= '' and olinks ~= '') and '\n' or '') .. links .. categories
end
 
Riga 477 ⟶ 436:
local p = {}
 
-- FunzioneFunzioni di utilità per il manuale, restituiscedanno la soglia THRESHOLD_GROUPED_LISTdi attenzione sul n° di link.
function p.threshold(frame)
return THRESHOLD_GROUPED_LISTMOLTI_LINK
end
function p.threshold2(frame)
return MOLTI_LINK_2
end