Modulo:Opera
Aspetto
La documentazione per questo modulo può essere creata in Modulo:Opera/man
-- elemento su Wikidata
local item = mw.wikibase.getEntityObject()
local a = require('Modulo:Autore')
local g = require('Modulo:Genere')
local c = require('Modulo:Common')
local d = require('Modulo:Date')
local p = {}
local outputCat = '' --le categorie le metto qui, per tenerle separate e metterle poi in fondo al testo generato
function addCat(name)
if name and c.isNSOpera() then
outputCat = outputCat .. c.category(mw.text.trim(name))
end
end
--funzione che recupera i dati dell'opera
--l'idea è di richiamarla anche da fuori dell'opera, passando l'item corrispondente
function p.getDatiOpera(operaItem)
item = operaItem or item
c.setItem(item)
dati = {}
--il titolo è il titolo della pagina
dati.titolo = mw.title.getCurrentTitle().text
--togli " (Nome Autore)"
dati.titolo = string.gsub(dati.titolo, ' %(.*%)', '')
--titolo originale dell'opera (P357 e' la vecchia proprieta' deprecata, ma ancora in uso su molti item)
dati.titoloOriginale = c.getClaimValue(c.getSingleClaimByProperty('P1476')) or c.getClaimValue(c.getSingleClaimByProperty('P357'))
--sottotitolo dell'opera
dati.sottotitolo = c.getClaimValue(c.getSingleClaimByProperty('P1680'))
--autore
dati.autori = c.getClaimValuesByProperty('P50')
dati.autoriList = c.getListaAutori(dati.autori)
dati.autore = c.getLinksAutori(dati.autori)
dati.autoriString = c.concat(dati.autoriList, '/')
--genere
dati.genere = string.lower(c.concat(c.getLabelsFromPropertyValues('P136'), ', '))
--lingua originale (364 è la vecchia property deprecata)
lingua = c.getClaimValue(c.getSingleClaimByProperty('P407')) or c.getClaimValue(c.getSingleClaimByProperty('P364'))
--volgare toscano -> lingua italiana
if lingua and lingua['numeric-id'] == 1990745 then lingua['numeric-id'] = 652 end
--greco omerico -> greco antico TODO trovare un sistema migliore!
if lingua and lingua['numeric-id'] == 990062 then lingua['numeric-id'] = 35497 end
--spagnolo medio -> spagnolo
if lingua and lingua['numeric-id'] == 5364419 then lingua['numeric-id'] = 1321 end
--early modern english -> inglese
if lingua and lingua['numeric-id'] == 1472196 then lingua['numeric-id'] = 1860 end
dati.lingua = c.getLabelFromValue(lingua)
--pubblicazione
dati.pubblicazione = d.getAllDates('P577')
--composizione
dati.composizione = d.getAllDates('P571')
--secolo di composizione/pubblicazione
dates = d.getDatesFromProperty('P571')
if c.empty(dates) then dates = d.getDatesFromProperty('P577') end
dataComune = d.getCommonDate(dates)
dati.secolo = dataComune and dataComune.century and d.formatCentury(dataComune)
--luogo di composizione TODO riportare il valore del qualificatore P276 (luogo) contenuto nella proprietà P571 (data di fondazione)
claim = c.getClaimValue(c.getClaimValuesByProperty('P571'))
dati.LuogoComp = c.concat(c.getQualifierValueFromClaim(claim), ', ')
--main subject
dati.argomento = c.getLabelsFromPropertyValues('P921')
--movement
dati.movimento = c.getLabelsFromPropertyValues('P135')
--fa parte di
dati.ParteOpere = c.getClaimValuesByProperty('P361')
dati.ParteOpera = c.getLinksParteOpere(dati.ParteOpere)
--incipit dell'opera
dati.incipit = c.getClaimValue(c.getSingleClaimByProperty('P1922'))
--series P179
--follows P155
--followed by P156
--link ai progetti
wpLang, wpLink = c.wikipedia()
dati.wikipedia = wpLink
dati.wikipediaLang = wpLang
dati.wikiquote = c.wikiquote()
dati.wikibooks = c.wikibooks()
dati.wikiversity = c.wikiversity()
dati.commons = c.commons()
dati.commonscat = c.commonscat()
if item then
dati.wikidata = item.id
end
--immagine
dati.immagine = c.getSingleClaimValueByProperty('P18')
--edizioni
dati.edizioni = c.getClaimValuesByProperty('P747')
--TODO filtrare solo le edizioni con "language of work" P407 = Italian
dati.edizioniItaliane = ''
dati.edizioniLista = ''
for k, edizione in pairs(dati.edizioni) do
dati.edizioniLista = dati.edizioniLista .. '\n* ' .. c.getWikiLinkFromValue(edizione)
end
--leggo da genereItem la property 910 "topic's main category" e prendo il sitelink it per usarlo come categoria
genereValue = c.getClaimsByProperty('P136')
if genereValue then
for j, k in pairs(genereValue) do
local gen = c.getClaimValue(k);
if gen then
genereItem = mw.wikibase.getEntityObject('Q'..gen['numeric-id'])
datiGenere = g.getDatiGenere(genereItem)
dati.linkCategoriaGenere = datiGenere.categoriaLink
end
end
end
return dati
end
function p.opera(frame)
--mw.log(c.printElement(item))
--recupero i dati con cui popolare il box
datiOpera = p.getDatiOpera()
datiAutore = {}
--recupera i dati dell'autore
--TODO gestire i casi di autori multipli
if datiOpera.autori and #datiOpera.autori == 1 then
autoreItem = mw.wikibase.getEntityObject('Q'..datiOpera.autori[1]['numeric-id'])
datiAutore = a.getDatiAutore(autoreItem)
end
dati = c.mergeTables(datiOpera, datiAutore, '', 'Autore-')
mw.log('Argomenti di Opera/Box')
mw.log(c.printElement(dati))
output = c.template('Opera/Box', dati)
-- CATEGORIE
addCat('Opere')
--Opere del secolo
if (dati.secolo) then
addCat('Opere del '..dati.secolo)
else
addCat('Opere non datate')
end
--Opere di Autore
if c.empty(dati.autoriList) then
addCat('Opere di autore anonimo')
else
for k, autore in pairs(dati.autoriList) do addCat('Opere di ' .. autore) end
end
--Opere originariamente in Lingua
if dati.lingua then
addCat('Opere originariamente in '..dati.lingua)
else
addCat('Opere senza lingua originale su Wikidata')
end
--categorie per edizioni
if #dati.edizioni > 1 then addCat('Opere con edizioni multiple')
elseif #dati.edizioni == 1 then addCat('Opere con una sola edizione')
else addCat('Opere senza edizioni') end
--categorie per argomenti e movimenti artistici
for k, arg in pairs(dati.argomento) do addCat(arg) end
for k, mov in pairs(dati.movimento) do addCat(mov) end
-- OPERE SENZA ELEMENTO SU WIKIDATA
if not item then
addCat('Opere non collegate a Wikidata')
end
--ordinamento di default
output = output .. c.template('DEFAULTSORT', {titolo} )
return output .. outputCat
end
return p