Modulo:Edizione
La documentazione per questo modulo può essere creata in Modulo:Edizione/man
local c = require('Modulo:Common')
-- elemento su Wikidata
local item = mw.wikibase.getEntity()
if c.isSubpage() then
--se sono in una sottopagina, recupero l'item connesso alla pagina base (vedi bug T74815)
rootPage = mw.title.getCurrentTitle().rootText
item = mw.wikibase.getEntity(mw.wikibase.getEntityIdForTitle(rootPage))
end
--TODO esaminare il caso in cui la sottopagina ha un proprio elemento WD
local d = require('Modulo:Date')
local l = require('Modulo:Lingua')
local o = require('Modulo:Opera')
local lang = mw.getContentLanguage()
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.isNS0() and not c.isSubpage() then
outputCat = outputCat .. c.category(mw.text.trim(name))
end
end
--ritorna i dati dell'edizione da Wikidata
function p.getDatiEdizione(edizioneItem)
item = edizioneItem or item
dati = {}
c.setItem(item)
if not item then
return {}
end
--title P1476: titolo dell'edizione (potrebbe essere diverso dal titolo dell'opera)
-- (P357 e' la vecchia proprieta' deprecata, ma ancora in uso su molti item)
dati.titolo = c.getClaimValue(c.getSingleClaimByProperty('P1476')) or c.getClaimValue(c.getSingleClaimByProperty('P357'))
or item:getLabel() --se non c'e' il titolo ci metto la label (meglio che niente)
--subtitle P1680: sottotitolo
dati.sottotitolo = c.getClaimValue(c.getSingleClaimByProperty('P1680'))
--language of work P407: lingua dell'edizione (se si tratta di una traduzione, sarà diversa dalla lingua dell'opera)
dati.lingua = c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P407')))
--author P50: persona che figura come autore dell'edizione, in teoria dovrebbe essere (quasi) sempre lo stesso dell'opera
autori = c.getClaimValuesByProperty('P50')
dati.autoriList = c.getListaAutori(autori)
dati.autore = c.getLinksAutori(autori)
dati.autoriString = c.concat(dati.autoriList, '/')
--translator P655: il traduttore, se presente
traduttori = c.getClaimValuesByProperty('P655')
dati.traduttoriList = c.getListaAutori(traduttori)
dati.traduttore = c.getLinksAutori(traduttori)
dati.traduttoriString = c.concat(dati.traduttoriList, '/')
--editor P98: "a cura di"
curatore = c.getClaimValuesByProperty('P98')
dati.curatoriList = c.getListaAutori(curatore)
dati.curatore = c.getLinksAutori(curatore)
--illustrator P110: autore delle illustrazioni
dati.illustratore = c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P110')))
--place of publication P291: luogo di pubblicazione, in genere la città
dati.luogoPubblicazione = c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P291')))
--publisher P123: l'editore
dati.editore = c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P123')))
--printed by P872: si potrebbe trovare "printed by" in luogo di "publisher"
if not dati.editore then
dati.editore = c.getLabelFromValue(c.getClaimValue(c.getSingleClaimByProperty('P872')))
end
--publication P577: data di pubblicazione
dati.dataPubblicazione = d.getAllDates('P577')
--scan file P996
dati.scanFiles = c.getClaimValuesByProperty('P996')
--come pagina indice di riferimento uso il primo dei file
dati.indice = c.first(dati.scanFiles)
--Wikisource index page P1957 (purtroppo è un'URL!)
dati.indiceURL = c.getClaimValue(c.getSingleClaimByProperty('P1957'))
--edition or translation of P629
dati.opera = c.getClaimValue(c.getSingleClaimByProperty('P629'))
--full text available at P953
dati.fonte = c.getClaimValue(c.getSingleClaimByProperty('P953'))
--link alla pagina Opera
if dati.opera then
dati.paginaOpera = mw.wikibase.sitelink('Q'..dati.opera['numeric-id'])
dati.labelOpera = mw.wikibase.label('Q'..dati.opera['numeric-id'])
end
return dati
end
function p.edizione(frame)
--argomenti passati al template:Edizione
args = c.getParameters(frame)
--recupero i dati con cui popolare il box
datiEdizione = p.getDatiEdizione()
--recupero i dati dell'opera, chiamando getDatiOpera() con l'item dell'opera
datiOpera = {}
if datiEdizione.opera then
operaItem = mw.wikibase.getEntityObject('Q'..datiEdizione.opera['numeric-id'])
datiOpera = o.getDatiOpera(operaItem)
end
dati = c.mergeTables(datiEdizione, datiOpera, 'Edizione-', 'Opera-')
mw.log(c.printElement(dati))
--inserisco il box di intestazione
local output
if c.isSubpage() then
dati.sottotitolo = args.sottotitolo
dati.prec = args.prec
dati.succ = args.succ
output = c.template('Edizione/BoxSottopagina', dati)
else
output = c.template('Edizione/Box', dati)
end
-- CATEGORIE
-- TESTI-Lettera
addCat('Testi-' .. l.primaLetteraEsclusoArticolo(datiEdizione.titolo))
-- TESTI DI ...
for k, autore in pairs(datiEdizione.autoriList or {}) do
addCat('Testi di '..lang:ucfirst(autore))
end
-- TRADUZIONI DI ...
for k, autore in pairs(datiEdizione.traduttoriList or {}) do
addCat('Traduzioni di '..lang:ucfirst(autore))
end
-- TESTI DELL'ANNO...
if datiOpera.composizione and datiOpera.composizione ~= '' then
addCat('Testi del '..datiOpera.composizione)
elseif datiOpera.pubblicazione and datiOpera.pubblicazione ~= '' then
addCat('Testi del '..datiOpera.pubblicazione)
end
--TESTI DEL SECOLO ...
if datiOpera.secolo then
addCat('Testi del '..datiOpera.secolo)
end
-- TESTI IN <lingua>
if datiEdizione.lingua and datiEdizione.lingua ~= 'italiano' then
addCat('Testi in ' .. datiEdizione.lingua)
end
-- TESTI <genere>
if not c.isSubpage() and datiOpera.linkCategoriaGenere then
for j, k in pairs(datiOpera.linkCategoriaGenere) do
outputCat = outputCat .. '[['..k..']]'
end
end
--TESI CON/SENZA VERSIONE CARTACEA A FRONTE
if datiEdizione.indice then addCat('Testi con versione cartacea a fronte')
else addCat('Testi senza versione cartacea a fronte') end
-- TESTI SENZA ELEMENTO SU WIKIDATA
if not item then
addCat('Testi non collegati a Wikidata')
end
return output .. outputCat
end
function p.testo(frame)
pagina = frame:getParent().args[1]
edizioneItem = mw.wikibase.getEntity(mw.wikibase.getEntityIdForTitle(pagina))
datiEdizione = p.getDatiEdizione(edizioneItem)
datiEdizione.pagina = pagina
datiOpera = {}
if datiEdizione.opera then
operaItem = mw.wikibase.getEntityObject('Q'..datiEdizione.opera['numeric-id'])
datiOpera = o.getDatiOpera(operaItem)
end
dati = c.mergeTables(datiEdizione, datiOpera, 'Edizione-', 'Opera-')
output = c.template('DatiTesto', dati)
return output
end
return p