Modulo:Sandbox/ValterVB/Tracklist

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
require('strict')
local getArgs = require('Module:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local p = {}

function p.main(frame)
	local t = getArgs(frame)
	local dato = t[1]
	local tracce1 = {}
	local tracce2 = {}
	local i
	local ss
	local wdTracce, wdAutori, wdParole, wdBasatoSu
	local ordine, ddato, titolo, durata
	local ret
	wdTracce = mWikidata._getClaims('P658', { from = dato })

	if wdTracce then

		for _, traccia in ipairs(wdTracce) do
			ss = ''

			titolo = mWikidata._formatStatement(traccia)

			ordine = mWikidata._formatQualifiers(traccia, 'P1545')

			if (ordine and tonumber(ordine)) then
				ordine = tonumber(ordine)
				ss = ordine
			else
				ordine = -1
				ss = '-'
			end

			durata = mWikidata._formatQualifiers(traccia, 'P2047')
			if durata == nil then
				durata = 'n.d.'
			else
				durata = tonumber(durata) or 0
				if (durata > 59) then
					durata = math.floor(durata/60) .. '\' ' .. (durata - 60*math.floor(durata/60)) .. '"'
				else
					durata = durata .. '"'
				end
			end

			ss = ss .. '. \'\'' .. titolo .. '\'\' (' .. durata .. ')'

			if traccia.mainsnak.datavalue.value.id then
				ddato =  traccia.mainsnak.datavalue.value.id
		 		wdAutori = mWikidata._getClaims('P86', { from = ddato })
		 		if #wdAutori > 0 then
					ss = ss .. ' <small>Comp.: '
					i = 1
					for _, autore in ipairs(wdAutori) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(autore)
					end
					ss = ss .. '</small>'
				end
				wdParole = mWikidata._getClaims('P676', { from = ddato })
				if #wdParole > 0 then
					ss = ss .. ' <small>Parol.: '
					i = 1
					for _, parola in ipairs(wdParole) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(parola)
					end
					ss = ss .. '</small>'
				end
				wdBasatoSu = mWikidata._getClaims('P144', { from = ddato })
				
				if next(wdBasatoSu) ~= nil then
					ss = ss .. ' <small>Basato su: '
					i = 1
					for _, basato in ipairs(wdBasatoSu) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(basato)
					end
					ss = ss .. '</small>'
				end
			end

			if (ordine == -1) then
				table.insert(tracce2,ss)
			else
				tracce1[ordine] = ss
			end

		end

	end

	ret = {}
	for _,k in ipairs(tracce1) do
		table.insert(ret,k..'<br/>')
	end
	for _,k in ipairs(tracce2) do
		table.insert(ret,k..'<br/>')
	end

	return table.concat(ret)

end

return p