Modulo:Collegamenti esterni: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
miglioro la performance e aggiungo categoria di servizio temporanea su richiesta |
citazioni separate a stesso sito in presenza di determinati qualificatori come da discussione; riscrivo e semplifico alcune parti |
||
Riga 28:
local catUnknownQual = 'Voci con template Collegamenti esterni e qualificatori sconosciuti'
local catExcessiveLoad = 'Voci con template Collegamenti esterni e molte entità Wikidata caricate'
local catDuplicates = 'Voci con template Collegamenti esterni e doppioni disattivati'
-- =============================================================================
Riga 114 ⟶ 115:
--
-- @param {table} [url] - uno o più URL, quanti sono i valori della proprietà Wikidata
-- @param {table} linkConf - la configurazione fissa per questo collegamento esterno
-- @param {table} extraConf - altri elementi di configurazione ricavati dall'item
-- @param {string} from - entityId se diverso da quello collegato alla pagina corrente
-- @return {table} un nuovo oggetto ExtLink
function ExtLink:new(url
local self = {}
setmetatable(self, { __index = ExtLink })
self.url = url
self.linkConf = linkConf
self.extraConf = extraConf
Riga 135 ⟶ 130:
self.title = self.from and mWikidata._getLabel({ self.from }) or self.title
self.extraConf.medium = self.linkConf.medium or 'web'
return self
end
Riga 147 ⟶ 142:
titolo = self.linkConf.titolo:gsub('$1', titolo)
end
if #self.
return string.format('%s (%s)', titolo, self.
else
return titolo
Riga 159 ⟶ 154:
-- @return {table}
function ExtLink:_getAltriLink()
if self.extraConf.restrictedData then return end
local tbl = {}
local titolo, specifica
for i = 2, #self.url do
titolo = self.extraConf.titolo[i] or self.title
if self.
specifica = self.
else
local ripetuto = false -- controllo se stesso titolo già usato
Riga 223 ⟶ 219:
-- se è specificato l'URL di formattazione è una
-- proprietà di tipo "identificativo esterno" altrimenti di tipo URL
if not self.linkConf.url then
return
end
local formattedLinks = {}
for i = 1, self.extraConf.restrictedData and #self.url or 1 do
local formattedLink = mCitazione.cita_da_modulo(
self.extraConf.medium,
{
url = self.url[
titolo = self:_getTitolo(),
altrilink = self:_getAltriLink(),
Riga 234:
editore = self.linkConf.editore,
lingua = self.linkConf.lingua,
cid = self.extraConf.restrictedData and self.extraConf.cid[i] or self.linkConf.cid,
autore = self.linkConf.autore or self.extraConf.autore[i],
volume = self.extraConf.volume[i],
p = self.extraConf.pagina[i],
data = self.linkConf.data or self.extraConf.data[i],
tipo = self.linkConf.tipo or self.sitodis
})
table.insert(formattedLinks, '* ' .. formattedLink ..
mEditAtWikidata._showMessage({ pid = self.linkConf.pid, qid = self.from }))
end
return table.concat(formattedLinks, '\n')
end
Riga 305 ⟶ 306:
-- @return {table}
function LinksManager:_getExtLinks()
local ret, groupSites = {}, {}
local cfg = readConfig()
local lang = mw.language.getContentLanguage()
local pageContent = mw.title.getCurrentTitle():getContent()
Riga 318 ⟶ 313:
:gsub('<[Rr][Ee][Ff]%s.-/>', '') -- facilita la ricerca successiva
:gsub('<[Rr][Ee][Ff].->.-</[Rr][Ee][Ff]%s*>', '')
local loadedEntities = setmetatable({}, {
__newindex = function(t1, key, t2)
if not t2 then return end
for k, v in pairs(t2) do rawset(t1, k, v) end
end })
-- tabella di conversione per tipo dei qualificatori generali in ordine di priorità
local convert = {
autore = { 'P50', 'P2093' }, -- item o stringa dell'autore
volume = { 'P478' }, pagina = { 'P304' }, data = { 'P577' },
-- titolo o "indicato come" o "riferito come" o pseudonimo
titolo = { 'P1476', 'P1810', 'P1932', 'P742' },
-- url archiviato, solo per le proprietà di tipo URL
archivio = { 'P1065' }, dataarch = { 'P2960' }, urlmorto = { 'P582' }
}
-- qualificatori noti (quelli nella tabella convert sono pescati in automatico)
local knownQualifiers = { P407 = true, P813 = true }
for _, t in pairs(convert) do
for _, v in ipairs(t) do knownQualifiers[v] = true end
end
local duplicates = false -- per categoria temporanea
for _, groupName in ipairs(orderedGroupNames) do -- per ogni gruppo tematico
groupSites[groupName] = {}
ret[groupName] = {}
Riga 325 ⟶ 340:
cfg[groupName] = {}
end
for _, linkConf in ipairs(cfg[groupName]) do --
local claims, valido
-- se il sito non è escluso manualmente dall'utente e non è generato da
Riga 355 ⟶ 370:
local Nvincoli = 0
for _ in ipairs(linkConf.vincolo) do Nvincoli = Nvincoli + 1 end
for i = 2, Nvincoli, 2 do --
valido, loadedEntities[i] = checkEntity(linkConf.vincolo[i - 1], linkConf.vincolo[i], self.from)
if valido then break end
Riga 365 ⟶ 380:
-- se il sito è abilitato, viene aggiunto a quelli da mostrare
if valido then
local url
local
--
for i, claim in ipairs(claims) do
for k, t in pairs(convert) do
extraConf[k] = extraConf[k] or { count = 0 }
-- ricava i qualificatori generali e ne tiene il conto
for _, v in ipairs(t) do
extraConf[k][i] = mWikidata._formatQualifiers(claim, v) or
k == 'urlmorto' and
mWikidata._formatQualifiers(claim, v, { snaktype = 'somevalue' }) or nil
if extraConf[k][i] then
extraConf[k].count = extraConf[k].count + 1
break
end
end
end
if claim.qualifiers then
local
-- cerca un disambiguante per url
if extraConf.titolodis[i] == nil and claim.qualifiers[qualifierId] then
local args = { nq = '1', formatting = 'raw' }
local formattedQualifier = mWikidata._formatQualifiers(claim, qualifierId, args)
if formattedQualifier then
extraConf.titolodis[i] = mw.wikibase.getLabel(formattedQualifier)
if extraConf.titolodis[i] then
extraConf.titolodis.count = extraConf.titolodis.count + 1
end
end
end
otherKnownQualifiers[qualifierId] = true
end
-- categoria di servizio in presenza di qualificatori non riconosciuti
for qualifierId in pairs(claim.qualifiers) do
if
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catUnknownQual))
break
Riga 412 ⟶ 424:
-- crea l'url
claim = mWikidata._formatStatement(claim)
if linkConf.cid then
extraConf.cid[i] = linkConf.cid .. ' ' .. (extraConf.data[i] or claim)
end
if linkConf.url then
-- se proprietà di tipo id, il valore viene
claim = mw.message.newRawMessage(linkConf.url, claim):plain()
end
table.insert(url, (claim:gsub(' ', '%%20')))
end
-- qualificatori in presenza dei quali formattare una citazione diversa per url
local restricted = { 'autore', 'volume', 'pagina', 'data' }
for _, k in ipairs(restricted) do
if extraConf[k].count > 0 then
extraConf.restrictedData = true
break
end
end
-- nome sito, di default il dominio estratto dall'url
extraConf.sito = linkConf.sito or getDomain(linkConf.url)
--
table.insert(ret[groupName], ExtLink:new(url
-- categoria per proprietà letta; se multipla e indistinguibile, usa categoria di avviso
local tail = #url > 1 and linkConf.url
extraConf.titolodis.count ~= #url and
extraConf.titolo.count < #url - 1 and
catMultiSenzaQual or catLetta
table.insert(self.categories, string.format('[[%sCategoria:%s%s]]', self.catColon, linkConf.pid, tail))
-- per verificare se un sito è ripetuto nel gruppo
Riga 458 ⟶ 483:
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catExcessiveLoad))
end
-- categoria di servizio temporanea per i doppioni omessi
if duplicates then
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon,
end
return ret
|