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 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
local
local MOLTI_LINK_2 = 15
-- Categorie di servizio
local catLetta = ' letta da Wikidata'
local catMultiSenzaQual = ' multipla letta da Wikidata senza qualificatore'
local
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
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
Riga 217 ⟶ 195:
end
return table.concat(formattedLinks, '\n')
end
Riga 238 ⟶ 210:
titolo = self:_getTitolo(),
altrilink = self:_getAltriLink(),
sito = self.linkConf.opera and '' or self
opera = self.linkConf.opera,
editore = self.linkConf.editore,
Riga 252 ⟶ 224:
return self:_formatPropertyURL()
end
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
-- conteggio complessivo dei collegamenti
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),
-- se configurata tramite "sitodis" nella configurazione.
if groupSites[groupName][extLink.extraConf.sito] > 1 then
extLink
end
end
end
-- categorie di servizio sul numero di link
local catnumero
if self.numExtLinks == 0 then
catnumero = catEmpty
elseif self.numExtLinks >
if self.numExtLinks > MOLTI_LINK_2 then catnumero = catMoltiLink2
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
-- Restituisce tutti i collegamenti esterni formattandoli come elenco puntato
--
-- @return {string}
function LinksManager:getList()
local categories
-- categorie di servizio
categories = (mw.title.getCurrentTitle().namespace == 0 or self.debug) and
table.concat(self.categories) or ''
-- collegamenti
return links .. categories
end
Riga 477 ⟶ 436:
local p = {}
--
function p.threshold(frame)
return
end
function p.threshold2(frame)
return MOLTI_LINK_2
end
|