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